From d7e4583d3ba5bf66ebef190fb8f6010a27ab38c4 Mon Sep 17 00:00:00 2001 From: CodeForFame Date: Sat, 25 Jun 2011 00:44:53 -0500 Subject: [PATCH] Formatted all code. Removed unused imports. Addressed all warnings. Made all fields in Player class private (added getters and setters where needed). Removed dead code. --- .../src/org/moparscape/msc/config/Config.java | 4 +- .../org/moparscape/msc/config/Constants.java | 2 - .../org/moparscape/msc/config/Formulae.java | 2387 ++++++++-------- .../src/org/moparscape/msc/gs/Instance.java | 32 +- .../src/org/moparscape/msc/gs/Server.java | 3 +- .../GameObjectPositionPacketBuilder.java | 83 +- .../builders/ItemPositionPacketBuilder.java | 80 +- .../msc/gs/builders/LSPacketBuilder.java | 101 +- .../msc/gs/builders/MiscPacketBuilder.java | 1331 +++++---- .../gs/builders/NpcPositionPacketBuilder.java | 90 +- .../gs/builders/NpcUpdatePacketBuilder.java | 106 +- .../builders/PlayerPositionPacketBuilder.java | 8 +- .../builders/PlayerUpdatePacketBuilder.java | 25 +- .../msc/gs/builders/RSCPacketBuilder.java | 50 +- .../msc/gs/builders/StaticPacketBuilder.java | 471 ++-- .../WallObjectPositionPacketBuilder.java | 83 +- .../msc/gs/builders/ls/MiscPacketBuilder.java | 15 +- .../msc/gs/builders/ls/SavePacketBuilder.java | 11 +- .../msc/gs/connection/LSCodecFactory.java | 48 +- .../gs/connection/LSConnectionHandler.java | 182 +- .../msc/gs/connection/LSPacket.java | 81 +- .../msc/gs/connection/LSProtocolDecoder.java | 87 +- .../msc/gs/connection/LSProtocolEncoder.java | 83 +- .../moparscape/msc/gs/connection/Packet.java | 455 +-- .../msc/gs/connection/PacketQueue.java | 59 +- .../msc/gs/connection/RSCCodecFactory.java | 48 +- .../gs/connection/RSCConnectionHandler.java | 470 ++-- .../msc/gs/connection/RSCPacket.java | 54 +- .../msc/gs/connection/RSCProtocolDecoder.java | 109 +- .../msc/gs/connection/RSCProtocolEncoder.java | 132 +- .../connection/filter/ConnectionFilter.java | 6 +- .../moparscape/msc/gs/core/ClientUpdater.java | 129 +- .../msc/gs/core/DelayedEventHandler.java | 132 +- .../moparscape/msc/gs/core/GameEngine.java | 31 +- .../msc/gs/core/LoginConnector.java | 401 +-- .../moparscape/msc/gs/db/DBConnection.java | 96 +- .../msc/gs/db/ReportHandlerQueries.java | 113 +- .../moparscape/msc/gs/event/DelayedEvent.java | 118 +- .../msc/gs/event/DelayedQuestChat.java | 44 +- .../moparscape/msc/gs/event/DuelEvent.java | 179 +- .../moparscape/msc/gs/event/FightEvent.java | 9 - .../moparscape/msc/gs/event/MiniEvent.java | 20 +- .../msc/gs/event/ObjectRemover.java | 50 +- .../moparscape/msc/gs/event/RangeEvent.java | 525 ++-- .../moparscape/msc/gs/event/ShortEvent.java | 8 +- .../moparscape/msc/gs/event/SingleEvent.java | 22 +- .../msc/gs/event/WalkMobToMobEvent.java | 156 +- .../msc/gs/event/WalkToMobEvent.java | 52 +- .../msc/gs/event/WalkToObjectEvent.java | 44 +- .../msc/gs/external/AgilityCourseDef.java | 140 +- .../msc/gs/external/AgilityDef.java | 220 +- .../moparscape/msc/gs/external/CertDef.java | 42 +- .../moparscape/msc/gs/external/CerterDef.java | 54 +- .../moparscape/msc/gs/external/DoorDef.java | 80 +- .../moparscape/msc/gs/external/EntityDef.java | 40 +- .../msc/gs/external/EntityHandler.java | 697 ++--- .../msc/gs/external/FiremakingDef.java | 42 +- .../msc/gs/external/GameObjectDef.java | 94 +- .../msc/gs/external/GameObjectLoc.java | 84 +- .../msc/gs/external/ItemArrowHeadDef.java | 42 +- .../msc/gs/external/ItemBowStringDef.java | 42 +- .../msc/gs/external/ItemCookingDef.java | 56 +- .../msc/gs/external/ItemCraftingDef.java | 42 +- .../msc/gs/external/ItemDartTipDef.java | 42 +- .../moparscape/msc/gs/external/ItemDef.java | 118 +- .../msc/gs/external/ItemDropDef.java | 34 +- .../msc/gs/external/ItemGemDef.java | 42 +- .../msc/gs/external/ItemHerbDef.java | 42 +- .../msc/gs/external/ItemHerbSecond.java | 70 +- .../moparscape/msc/gs/external/ItemLoc.java | 70 +- .../msc/gs/external/ItemLogCutDef.java | 70 +- .../msc/gs/external/ItemSmeltingDef.java | 56 +- .../msc/gs/external/ItemSmithingDef.java | 56 +- .../msc/gs/external/ItemUnIdentHerbDef.java | 42 +- .../msc/gs/external/ItemWieldableDef.java | 170 +- .../moparscape/msc/gs/external/NPCDef.java | 248 +- .../moparscape/msc/gs/external/NPCLoc.java | 117 +- .../msc/gs/external/ObjectFishDef.java | 42 +- .../msc/gs/external/ObjectFishingDef.java | 64 +- .../msc/gs/external/ObjectMiningDef.java | 56 +- .../msc/gs/external/ObjectWoodcuttingDef.java | 70 +- .../moparscape/msc/gs/external/PrayerDef.java | 28 +- .../moparscape/msc/gs/external/ReqOreDef.java | 28 +- .../moparscape/msc/gs/external/SpellDef.java | 72 +- .../moparscape/msc/gs/external/TileDef.java | 24 +- .../org/moparscape/msc/gs/io/WorldLoader.java | 285 +- .../moparscape/msc/gs/model/ActiveTile.java | 25 +- .../src/org/moparscape/msc/gs/model/Bank.java | 259 +- .../org/moparscape/msc/gs/model/Bubble.java | 36 +- .../moparscape/msc/gs/model/ChatMessage.java | 66 +- .../org/moparscape/msc/gs/model/Entity.java | 378 +-- .../moparscape/msc/gs/model/GameObject.java | 209 +- .../org/moparscape/msc/gs/model/InvItem.java | 166 +- .../moparscape/msc/gs/model/Inventory.java | 342 +-- .../src/org/moparscape/msc/gs/model/Item.java | 311 +-- .../moparscape/msc/gs/model/MenuHandler.java | 72 +- .../src/org/moparscape/msc/gs/model/Mob.java | 605 ++-- .../src/org/moparscape/msc/gs/model/Npc.java | 100 +- .../src/org/moparscape/msc/gs/model/Path.java | 193 +- .../msc/gs/model/PathGenerator.java | 377 +-- .../moparscape/msc/gs/model/PathHandler.java | 493 ++-- .../org/moparscape/msc/gs/model/Player.java | 2437 +++++++++-------- .../msc/gs/model/PlayerAppearance.java | 114 +- .../org/moparscape/msc/gs/model/Point.java | 169 +- .../moparscape/msc/gs/model/Projectile.java | 52 +- .../org/moparscape/msc/gs/model/Script.java | 694 ++--- .../org/moparscape/msc/gs/model/Sector.java | 146 +- .../src/org/moparscape/msc/gs/model/Shop.java | 439 +-- .../moparscape/msc/gs/model/Syndicate.java | 7 +- .../moparscape/msc/gs/model/TelePoint.java | 8 +- .../src/org/moparscape/msc/gs/model/Tile.java | 122 +- .../moparscape/msc/gs/model/TileValue.java | 14 +- .../org/moparscape/msc/gs/model/ViewArea.java | 197 +- .../org/moparscape/msc/gs/model/World.java | 86 +- .../msc/gs/model/snapshot/Activity.java | 15 +- .../msc/gs/model/snapshot/Chatlog.java | 20 +- .../msc/gs/model/snapshot/Snapshot.java | 4 +- .../moparscape/msc/gs/npchandler/Aggie.java | 189 +- .../msc/gs/npchandler/Apothecary.java | 210 +- .../moparscape/msc/gs/npchandler/Bananas.java | 190 +- .../moparscape/msc/gs/npchandler/Bankers.java | 44 +- .../moparscape/msc/gs/npchandler/Boat.java | 133 +- .../moparscape/msc/gs/npchandler/Certer.java | 409 ++- .../msc/gs/npchandler/EntranaMonks.java | 94 +- .../msc/gs/npchandler/KebabSeller.java | 113 +- .../msc/gs/npchandler/MakeOverMage.java | 103 +- .../msc/gs/npchandler/MonkHealer.java | 108 +- .../msc/gs/npchandler/NpcHandler.java | 2 +- .../msc/gs/npchandler/NpcHandlerDef.java | 76 +- .../msc/gs/npchandler/OtherNPC.java | 91 +- .../msc/gs/npchandler/ShopKeeper.java | 152 +- .../moparscape/msc/gs/npchandler/Tanner.java | 185 +- .../msc/gs/npchandler/Thrander.java | 49 +- .../msc/gs/phandler/PacketHandler.java | 3 +- .../msc/gs/phandler/PacketHandlerDef.java | 76 +- .../msc/gs/phandler/PlayerLogin.java | 450 +-- .../msc/gs/phandler/client/AttackHandler.java | 435 +-- .../msc/gs/phandler/client/BankHandler.java | 232 +- .../msc/gs/phandler/client/BotHandler.java | 99 +- .../msc/gs/phandler/client/ChatHandler.java | 26 +- .../gs/phandler/client/CommandHandler.scala | 34 +- .../msc/gs/phandler/client/DropHandler.java | 99 +- .../msc/gs/phandler/client/DuelHandler.java | 710 ++--- .../msc/gs/phandler/client/DummyPacket.java | 35 +- .../gs/phandler/client/ExceptionHandler.java | 33 +- .../msc/gs/phandler/client/FollowRequest.java | 57 +- .../msc/gs/phandler/client/FriendHandler.java | 140 +- .../phandler/client/GameSettingHandler.java | 47 +- .../gs/phandler/client/InvActionHandler.java | 1658 ++++++----- .../phandler/client/InvUseOnGroundItem.java | 323 ++- .../msc/gs/phandler/client/InvUseOnItem.java | 2100 +++++++------- .../msc/gs/phandler/client/InvUseOnNpc.java | 469 ++-- .../gs/phandler/client/InvUseOnObject.java | 2181 +++++++++------ .../gs/phandler/client/InvUseOnPlayer.java | 198 +- .../gs/phandler/client/MenuReplyHandler.java | 39 +- .../msc/gs/phandler/client/NpcCommand.java | 57 +- .../msc/gs/phandler/client/ObjectAction.java | 2310 +++++++++------- .../msc/gs/phandler/client/PickupItem.java | 313 ++- .../msc/gs/phandler/client/Ping.java | 21 +- .../client/PlayerAppearanceIDHandler.java | 29 +- .../client/PlayerAppearanceUpdater.java | 114 +- .../msc/gs/phandler/client/PlayerLogin.java | 37 +- .../msc/gs/phandler/client/PlayerLogout.java | 13 +- .../phandler/client/PlayerLogoutRequest.java | 18 +- .../msc/gs/phandler/client/PrayerHandler.java | 166 +- .../client/PrivacySettingHandler.java | 64 +- .../msc/gs/phandler/client/ReportHandler.java | 28 +- .../gs/phandler/client/SessionRequest.java | 3 +- .../msc/gs/phandler/client/ShopHandler.java | 248 +- .../msc/gs/phandler/client/Sleepword.java | 85 +- .../msc/gs/phandler/client/SpellHandler.java | 9 +- .../msc/gs/phandler/client/StyleHandler.java | 25 +- .../gs/phandler/client/TalkToNpcHandler.java | 241 +- .../msc/gs/phandler/client/TradeHandler.java | 642 +++-- .../msc/gs/phandler/client/Trap.java | 18 +- .../msc/gs/phandler/client/TrapHandler.java | 18 +- .../msc/gs/phandler/client/WalkRequest.java | 290 +- .../gs/phandler/client/WallObjectAction.java | 909 +++--- .../msc/gs/phandler/client/WieldHandler.java | 300 +- .../msc/gs/phandler/ls/AlertHandler.java | 25 +- .../msc/gs/phandler/ls/ForceLogout.java | 25 +- .../msc/gs/phandler/ls/FriendLogin.java | 29 +- .../msc/gs/phandler/ls/FriendLogout.java | 42 +- .../msc/gs/phandler/ls/GlobalHandler.java | 23 +- .../phandler/ls/PlayerInfoRequestHandler.java | 30 +- .../phandler/ls/PlayerListRequestHandler.java | 27 +- .../msc/gs/phandler/ls/ReceivePM.java | 41 +- .../phandler/ls/ReportInfoRequestHandler.java | 38 +- .../msc/gs/phandler/ls/ShutdownHandler.java | 19 +- .../gs/phandler/ls/StatRequestHandler.java | 27 +- .../msc/gs/phandler/ls/UpdateHandler.java | 31 +- .../msc/gs/plugins/ai/KingBlackDragon.java | 2 +- .../msc/gs/plugins/ai/RedDragon.java | 140 +- .../msc/gs/plugins/dependencies/NpcAI.java | 100 +- .../gs/plugins/dependencies/NpcScript.java | 51 +- .../plugins/dependencies/PluginHandler.java | 298 +- .../msc/gs/plugins/extras/Thieving.java | 1774 ++++++------ .../gs/plugins/listeners/ObjectListener.java | 60 +- .../moparscape/msc/gs/plugins/plugs/Test.java | 27 +- .../msc/gs/plugins/plugs/skills/Mining.java | 298 +- .../msc/gs/plugins/quests/CooksAssistant.java | 329 ++- .../msc/gs/plugins/quests/Dorics.java | 443 +-- .../gs/plugins/quests/GoblinDiplomacy.java | 1273 +++++---- .../msc/gs/plugins/quests/ImpCatcher.java | 671 ++--- .../msc/gs/plugins/quests/KnightsSword.java | 327 ++- .../msc/gs/plugins/quests/SheepShearer.java | 316 ++- .../msc/gs/plugins/quests/WitchsPotion.java | 492 ++-- .../org/moparscape/msc/gs/quest/Quest.java | 885 +++--- .../moparscape/msc/gs/quest/QuestAction.java | 33 +- .../moparscape/msc/gs/quest/QuestEvent.java | 156 +- .../msc/gs/quest/QuestEventManager.java | 201 +- .../moparscape/msc/gs/quest/QuestManager.java | 648 ++--- .../org/moparscape/msc/gs/states/Action.java | 14 +- .../moparscape/msc/gs/states/CombatState.java | 13 +- .../org/moparscape/msc/gs/tools/Captcha.java | 33 +- .../msc/gs/tools/DataConversions.java | 760 ++--- .../moparscape/msc/gs/tools/PaintCaptcha.java | 210 +- .../src/org/moparscape/msc/gs/util/Cache.java | 5 +- .../moparscape/msc/gs/util/DefCompressor.java | 80 +- .../moparscape/msc/gs/util/DelayMonitor.java | 46 +- .../org/moparscape/msc/gs/util/DuelLog.java | 12 +- .../moparscape/msc/gs/util/EntityList.java | 139 +- .../msc/gs/util/EntityListIterator.java | 51 +- .../moparscape/msc/gs/util/MapGenerator.java | 232 +- .../moparscape/msc/gs/util/ObjectLoader.java | 23 +- .../msc/gs/util/PersistenceManager.java | 85 +- .../src/org/moparscape/msc/gs/util/RSA.java | 107 +- .../msc/gs/util/StatefulEntityCollection.java | 81 +- .../org/moparscape/msc/gs/util/WorkGroup.java | 40 +- .../org/moparscape/msc/gs/util/Worker.java | 29 +- .../org/moparscape/msc/ls/LoginEngine.java | 4 +- .../moparscape/msc/ls/model/PlayerSave.java | 4 +- .../moparscape/msc/ls/net/PacketQueue.java | 57 +- .../packethandler/frontend/AuctionHouse.java | 1 - .../msc/ls/util/PersistenceManager.java | 4 +- 235 files changed, 26292 insertions(+), 22671 deletions(-) diff --git a/GameServer/src/org/moparscape/msc/config/Config.java b/GameServer/src/org/moparscape/msc/config/Config.java index f61415b..43f8139 100644 --- a/GameServer/src/org/moparscape/msc/config/Config.java +++ b/GameServer/src/org/moparscape/msc/config/Config.java @@ -94,9 +94,9 @@ public class Config { SAVE_INTERVAL = Integer.parseInt(props.getProperty("save-interval")); DATE_FORMAT = props.getProperty("date-format"); - + ALERT_CONFIG = props.getProperty("alert-config"); - COMMAND_CONFIG = props.getProperty("command-config"); + COMMAND_CONFIG = props.getProperty("command-config"); props.clear(); diff --git a/GameServer/src/org/moparscape/msc/config/Constants.java b/GameServer/src/org/moparscape/msc/config/Constants.java index e95f95e..cfd19ab 100644 --- a/GameServer/src/org/moparscape/msc/config/Constants.java +++ b/GameServer/src/org/moparscape/msc/config/Constants.java @@ -1,7 +1,5 @@ package org.moparscape.msc.config; -import org.moparscape.msc.gs.Instance; - /** * Holds all important, commonly tweaked variables. * diff --git a/GameServer/src/org/moparscape/msc/config/Formulae.java b/GameServer/src/org/moparscape/msc/config/Formulae.java index c6b40bc..5720514 100644 --- a/GameServer/src/org/moparscape/msc/config/Formulae.java +++ b/GameServer/src/org/moparscape/msc/config/Formulae.java @@ -23,1184 +23,1283 @@ import org.moparscape.msc.gs.model.Point; import org.moparscape.msc.gs.model.Shop; import org.moparscape.msc.gs.tools.DataConversions; - public class Formulae { - public static final Point[] noremoveTiles = {new Point(341,487), new Point(343,581), new Point(92,649), new Point(434,682), new Point(660,551), new Point(196,3266), new Point(59,573), new Point(560,472), new Point(140,180), new Point(285,195), new Point(243,178), new Point(394,851), new Point(388,851), new Point(512,550)}; - public static final int[] arrowIDs = { 723, 647, 646, 645, 644, 643, 642, 641, 640, 639, 638, 574, 11 }; - public static final int[] bodySprites = { 2, 5 }; - public static final int[] boltIDs = { 786, 592, 190 }; - public static final int[] bowIDs = { 188, 189, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657 }; - // spell - public static final int[] experienceArray = { 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584, 1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, 6291, 7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247, 20224, 22406, 24815, 27473, 30408, 33648, 37224, 41171, 45529, 50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945, 123660, 136594, 150872, 166636, 184040, 203254, 224466, 247886, 273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953, 605032, 668051, 737627, 814445, 899257, 992895, 1096278, 1210421, 1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087, 2673114, 2951373, 3258594, 3597792, 3972294, 4385776, 4842295, 5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577, 10692629, 11805606, 13034431, 14391160 }; - public static final int[] headSprites = { 1, 4, 6, 7, 8 }; - public static final int[] miningAxeIDs = { 1262, 1261, 1260, 1259, 1258, 156 }; - public static final int[] miningAxeLvls = { 41, 31, 21, 6, 1, 1 }; + public static final Point[] noremoveTiles = { new Point(341, 487), + new Point(343, 581), new Point(92, 649), new Point(434, 682), + new Point(660, 551), new Point(196, 3266), new Point(59, 573), + new Point(560, 472), new Point(140, 180), new Point(285, 195), + new Point(243, 178), new Point(394, 851), new Point(388, 851), + new Point(512, 550) }; + public static final int[] arrowIDs = { 723, 647, 646, 645, 644, 643, 642, + 641, 640, 639, 638, 574, 11 }; + public static final int[] bodySprites = { 2, 5 }; + public static final int[] boltIDs = { 786, 592, 190 }; + public static final int[] bowIDs = { 188, 189, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657 }; + // spell + public static final int[] experienceArray = { 83, 174, 276, 388, 512, 650, + 801, 969, 1154, 1358, 1584, 1833, 2107, 2411, 2746, 3115, 3523, + 3973, 4470, 5018, 5624, 6291, 7028, 7842, 8740, 9730, 10824, 12031, + 13363, 14833, 16456, 18247, 20224, 22406, 24815, 27473, 30408, + 33648, 37224, 41171, 45529, 50339, 55649, 61512, 67983, 75127, + 83014, 91721, 101333, 111945, 123660, 136594, 150872, 166636, + 184040, 203254, 224466, 247886, 273742, 302288, 333804, 368599, + 407015, 449428, 496254, 547953, 605032, 668051, 737627, 814445, + 899257, 992895, 1096278, 1210421, 1336443, 1475581, 1629200, + 1798808, 1986068, 2192818, 2421087, 2673114, 2951373, 3258594, + 3597792, 3972294, 4385776, 4842295, 5346332, 5902831, 6517253, + 7195629, 7944614, 8771558, 9684577, 10692629, 11805606, 13034431, + 14391160 }; + public static final int[] headSprites = { 1, 4, 6, 7, 8 }; + public static final int[] miningAxeIDs = { 1262, 1261, 1260, 1259, 1258, + 156 }; + public static final int[] miningAxeLvls = { 41, 31, 21, 6, 1, 1 }; - /** - * Cubic P2P boundaries. MinX, MinY - MaxX, MaxY - */ - public static final java.awt.Point[][] F2PWILD_LOCS = {{new java.awt.Point(48, 96), new java.awt.Point(335, 142)} }; - public static final java.awt.Point[][] P2P_LOCS = { { new java.awt.Point(436, 432), new java.awt.Point(719, 906) }, { new java.awt.Point(48, 96), new java.awt.Point(335, 142) }, { new java.awt.Point(343, 567), new java.awt.Point(457, 432) }, { new java.awt.Point(203, 3206), new java.awt.Point(233, 3265) }, { new java.awt.Point(397, 525), new java.awt.Point(441, 579), }, { new java.awt.Point(431, 0), new java.awt.Point(1007, 1007) } }; - public static final int[] potions1Dose = { 224, 476, 479, 482, 485, 488, 491, 494, 497, 500, 568, 571 }; - public static final int[] potions2Dose = { 223, 475, 478, 481, 484, 487, 490, 493, 496, 499, 567, 570 }; - public static final int[] potions3Dose = { 222, 474, 477, 480, 483, 486, 489, 492, 495, 498, 566, 569 }; - public static final int[] potionsUnfinished = { 454, 455, 456, 457, 458, 459, 460, 461, 462, 463 }; - - private static Random r = new Random(); - public static final int[] runeIDs = { 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 46, 619, 825 }; - public static final int[] safePacketIDs = { 70, 123, 128, 255 }; - public static final String[] statArray = { "attack", "defense", "strength", "hits", "ranged", "prayer", "magic", "cooking", "woodcut", "fletching", "fishing", "firemaking", "crafting", "smithing", "mining", "herblaw", "agility", "thieving" }; - - public static final int[] woodcuttingAxeIDs = { 405, 204, 203, 428, 88, 12, 87 }; - - public static final int[] xbowIDs = { 59, 60 }; - - public static ArrayList dray2edge = new ArrayList(); - /** - * Array of items that cannot be telegrabbed. - */ - public static int[] telegrabBlocked = { 828, 831, 832, 1289, 422, 1315, 1314, 1316, 971 }; - - static - { - dray2edge.add(new Point(114,638)); - dray2edge.add(new Point(120,621)); - dray2edge.add(new Point(131,612)); - dray2edge.add(new Point(159,596)); - dray2edge.add(new Point(195,583)); - dray2edge.add(new Point(201,562)); - dray2edge.add(new Point(200,540)); - dray2edge.add(new Point(227,501)); - dray2edge.add(new Point(225,460)); - dray2edge.add(new Point(206,448)); - } - - /** - * Adds the prayers together to calculate what perecntage the stat should be - * increased - */ - public static double addPrayers(boolean first, boolean second, boolean third) { - if (third) { - return 1.15D; - } - if (second) { - return 1.1D; - } - if (first) { - return 1.05D; - } - return 1.0D; - } - - /** - * Returns a power to assosiate with each arrow - */ - private static double arrowPower(int arrowID) { - switch (arrowID) { - case 11: // bronze arrows - case 574: // poison bronze arrows - case 190: // crossbow bolts - case 592: // poison cross bow bolts - case 1013: // bronze throwing dart - case 1122: // poison bronze throwing dart - return 0; - case 638:// iron arrows - case 639:// poison iron arrows - case 1015: // iron throwing dart - case 1123:// poison iron throwing dart - return 0.5; - case 640:// steel arrows - case 641:// poison steel arrows - case 1024: // steel throwing dart - case 1124: // poison steel throwing dart - case 1076:// bronze throwing dart - case 1128:// poison bronze throwing knife - case 827:// bronze spear - case 1135:// poison bronze spear - return 1; - case 642:// mith arrows - case 643:// poison mith arrows - case 786:// pearle crossbow bolts - case 1068:// mith throwing dart - case 1125: // poison mith throwing dart - case 1075:// iron throwing dart - case 1129:// poison iron throwing knife - case 1088:// iron spear - case 1136:// poison iron spear - return 1.5; - case 644:// addy arrows - case 645:// poison addy arrows - case 1069:// addy throwing dart - case 1126:// poison addy throwing dart - case 1077:// steel throwing knife - case 1130:// poison steel throwing knife - case 1089:// steel spear - case 1137:// poison steel spear - return 1.75; - case 1081:// black throwing knife - case 1132:// poison black throwing knife - return 2; - case 646:// rune arrows - case 647:// poison rune arrows - case 1070:// rune throwing dart - case 1127:// poison rune throwing dart - case 1078:// mith throwing knife - case 1131:// poison mith throwing knife - case 1090:// mith spear - case 1138:// poison mith spear - return 5; - case 723:// ice arrows - case 1079:// addy throwing knife - case 1133:// poison addy throwing knife - case 1091:// addy spear - case 1139:// poison addy spear - return 6; - case 1080:// rune throwing knife - case 1134:// poison rune throwing knife - case 1092:// rune spear - case 1140:// poison rune spear - return 7; - case 785:// lit arrow (not stackable, why not?) - return 10; - default: - return 0; - } - } - - public static int bitToDoorDir(int bit) { - switch (bit) { - case 1: - return 0; - case 2: - return 1; - case 4: - return -1; - case 8: - return -1; - } - return -1; - } - - public static int bitToObjectDir(int bit) { - switch (bit) { - case 1: - return 6; - case 2: - return 0; - case 4: - return 2; - case 8: - return 4; - } - return -1; - } - - /** - * Decide if the food we are cooking should be burned or not - */ - public static boolean burnFood(int foodId, int cookingLevel) { - int levelDiff = cookingLevel - EntityHandler.getItemCookingDef(foodId).getReqLevel(); - if (levelDiff < 0) { - return true; - } - if (levelDiff >= 20) { - return false; - } - return DataConversions.random(0, levelDiff + 1) == 0; - } - - /** - * Calulates what one mob should hit on another with meelee - */ - public static int calcFightHit(Mob attacker, Mob defender) { - int max = maxHit(attacker.getStrength(), attacker.getWeaponPowerPoints(), attacker.isPrayerActivated(1), attacker.isPrayerActivated(4), attacker.isPrayerActivated(10), styleBonus(attacker, 2)); - int newAtt = (int) - ( - addPrayers(attacker.isPrayerActivated(2), attacker.isPrayerActivated(5), attacker.isPrayerActivated(11) - ) - * - (attacker.getAttack() / 0.8D) - + - ( - (DataConversions.random(0, 4) == 0 ? attacker.getWeaponPowerPoints() : attacker.getWeaponAimPoints()) / 2.5D - ) - + - ( - attacker.getCombatStyle() == 1 && DataConversions.random(0, 2) == 0 ? 4 : 0 - ) - + - ( - DataConversions.random(0, 100) <= 10 ? (attacker.getStrength() / 5D) : 0 - ) - + - ( - styleBonus(attacker, 0) * 2) - ); - int newDef = (int) - ( - addPrayers(defender.isPrayerActivated(0), defender.isPrayerActivated(3), defender.isPrayerActivated(9)) - * - ( - (DataConversions.random(0, 100) <= 5 ? 0 : defender.getDefense()) * 1.1D - ) - + - ( - (DataConversions.random(0, 100) <= 5 ? 0 : defender.getArmourPoints()) / 2.75D - ) - + - (defender.getStrength() / 4D) - + - (styleBonus(defender, 1) * 2) - ); - - int hitChance = DataConversions.random(0, 100) + (newAtt - newDef); - if (attacker instanceof Npc) { - hitChance -= 5; - } - if (DataConversions.random(0, 100) <= 10) { - hitChance += 20; - } - if (hitChance > (defender instanceof Npc ? 40 : 50)) { - int maxProb = 5; // 5% - int nearMaxProb = 7; // 7% - int avProb = 73; // 73% - int lowHit = 10; // 15% - - // Probablities are shifted up/down based on armour - int shiftValue = (int) Math.round(defender.getArmourPoints() * 0.02D); - maxProb -= shiftValue; - nearMaxProb -= (int) Math.round(shiftValue * 1.5); - avProb -= (int) Math.round(shiftValue * 2.0); - lowHit += (int) Math.round(shiftValue * 3.5); - - int hitRange = DataConversions.random(0, 100); - - if (hitRange >= (100 - maxProb)) { - return max; - } else if (hitRange >= (100 - nearMaxProb)) { - return DataConversions.roundUp(Math.abs((max - (max * (DataConversions.random(0, 10) * 0.01D))))); - } else if (hitRange >= (100 - avProb)) { - int newMax = (int) DataConversions.roundUp((max - (max * 0.1D))); - return DataConversions.roundUp(Math.abs((newMax - (newMax * (DataConversions.random(0, 50) * 0.01D))))); - } else { - int newMax = (int) DataConversions.roundUp((max - (max * 0.5D))); - return DataConversions.roundUp(Math.abs((newMax - (newMax * (DataConversions.random(0, 95) * 0.01D))))); - } - } - return 0; - } - - public static int calcFightHitWithNPC(Mob attacker, Mob defender) { - - int max = maxHit(attacker.getStrength(), attacker.getWeaponPowerPoints(), attacker.isPrayerActivated(1), attacker.isPrayerActivated(4), attacker.isPrayerActivated(10), styleBonus(attacker, 2)); - if (attacker instanceof Npc) { - Npc n = (Npc) attacker; - if (n.getID() == 3) // Chickens only doing 1 damage. - max = 1; - } - - //int newAtt = (int) (addPrayers(attacker.isPrayerActivated(2), attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) * (attacker.getAttack() / 0.7D) + ((DataConversions.random(0, 4) == 0 ? attacker.getWeaponPowerPoints() : attacker.getWeaponAimPoints()) / 3D) + (attacker.getCombatStyle() == 1 && DataConversions.random(0, 2) == 0 ? 4 : 0) + (styleBonus(attacker, 0) * 2)); - - int newAtt = (int) (addPrayers(attacker.isPrayerActivated(2), attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) - * (attacker.getAttack()) - + ((DataConversions.random(0, 4) == 0 ? attacker.getWeaponPowerPoints() : attacker.getWeaponAimPoints()) / 3D) - + (attacker.getCombatStyle() == 1 && DataConversions.random(0, 2) == 0 ? 4 : 0) - + (styleBonus(attacker, 0) * 2)); - - int newDef = (int) (addPrayers(defender.isPrayerActivated(0), defender.isPrayerActivated(3), defender.isPrayerActivated(9)) * defender.getDefense() + (defender.getArmourPoints() / 4D) + (defender.getStrength() / 4D) + (styleBonus(defender, 1) * 2)); - - /* - * if(defender instanceof Player) { if(defender.getCombatLevel() < 70 && - * defender.getCombatLevel() > 45) newDef = newDef + (int)(newDef * - * 0.25); else if(defender.getCombatLevel() > 25 && - * defender.getCombatLevel() < 45) newDef = newDef + (int)(newDef * - * 0.35); - * - * else if(defender.getCombatLevel() > 8 && defender.getCombatLevel() < - * 25) newDef = newDef + (int)(newDef * 0.45); - * - * else if(defender.getCombatLevel() > 1 && defender.getCombatLevel() < - * 8) newDef = newDef + (int)(newDef * 0.55); } + /** + * Cubic P2P boundaries. MinX, MinY - MaxX, MaxY */ - if (attacker instanceof Player) { - //newDef += newDef / 8; - newDef -= newDef / 8; + public static final java.awt.Point[][] F2PWILD_LOCS = { { + new java.awt.Point(48, 96), new java.awt.Point(335, 142) } }; + public static final java.awt.Point[][] P2P_LOCS = { + { new java.awt.Point(436, 432), new java.awt.Point(719, 906) }, + { new java.awt.Point(48, 96), new java.awt.Point(335, 142) }, + { new java.awt.Point(343, 567), new java.awt.Point(457, 432) }, + { new java.awt.Point(203, 3206), new java.awt.Point(233, 3265) }, + { new java.awt.Point(397, 525), new java.awt.Point(441, 579), }, + { new java.awt.Point(431, 0), new java.awt.Point(1007, 1007) } }; + public static final int[] potions1Dose = { 224, 476, 479, 482, 485, 488, + 491, 494, 497, 500, 568, 571 }; + public static final int[] potions2Dose = { 223, 475, 478, 481, 484, 487, + 490, 493, 496, 499, 567, 570 }; + public static final int[] potions3Dose = { 222, 474, 477, 480, 483, 486, + 489, 492, 495, 498, 566, 569 }; + public static final int[] potionsUnfinished = { 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463 }; + + private static Random r = new Random(); + public static final int[] runeIDs = { 31, 32, 33, 34, 35, 36, 37, 38, 40, + 41, 42, 46, 619, 825 }; + public static final int[] safePacketIDs = { 70, 123, 128, 255 }; + public static final String[] statArray = { "attack", "defense", "strength", + "hits", "ranged", "prayer", "magic", "cooking", "woodcut", + "fletching", "fishing", "firemaking", "crafting", "smithing", + "mining", "herblaw", "agility", "thieving" }; + + public static final int[] woodcuttingAxeIDs = { 405, 204, 203, 428, 88, 12, + 87 }; + + public static final int[] xbowIDs = { 59, 60 }; + + public static ArrayList dray2edge = new ArrayList(); + /** + * Array of items that cannot be telegrabbed. + */ + public static int[] telegrabBlocked = { 828, 831, 832, 1289, 422, 1315, + 1314, 1316, 971 }; + + static { + dray2edge.add(new Point(114, 638)); + dray2edge.add(new Point(120, 621)); + dray2edge.add(new Point(131, 612)); + dray2edge.add(new Point(159, 596)); + dray2edge.add(new Point(195, 583)); + dray2edge.add(new Point(201, 562)); + dray2edge.add(new Point(200, 540)); + dray2edge.add(new Point(227, 501)); + dray2edge.add(new Point(225, 460)); + dray2edge.add(new Point(206, 448)); } - int hitChance = DataConversions.random(0, 100) + (newAtt - newDef); - //Added this - if (attacker instanceof Player) - hitChance += (int)(DataConversions.random(0, attacker.getAttack()) + 1) / 1.33; - - if (attacker instanceof Npc) { - hitChance -= 5; - } - if (hitChance > (defender instanceof Npc ? 40 : 50)) { - int maxProb = 5; // 5% - int nearMaxProb = 10; // 10% - int avProb = 80; // 70% - int lowHit = 10; // 15% - - // Probablities are shifted up/down based on armour - int shiftValue = (int) Math.round(defender.getArmourPoints() * 0.02D); - maxProb -= shiftValue; - nearMaxProb -= (int) Math.round(shiftValue * 1.5); - avProb -= (int) Math.round(shiftValue * 2.0); - lowHit += (int) Math.round(shiftValue * 3.5); - - int hitRange = DataConversions.random(0, 100); - - if (hitRange >= (100 - maxProb)) { - return max; - } else if (hitRange >= (100 - nearMaxProb)) { - return DataConversions.roundUp(Math.abs((max - (max * (DataConversions.random(0, 10) * 0.01D))))); - } else if (hitRange >= (100 - avProb)) { - int newMax = (int) DataConversions.roundUp((max - (max * 0.1D))); - return DataConversions.roundUp(Math.abs((newMax - (newMax * (DataConversions.random(0, 50) * 0.01D))))); - } else { - int newMax = (int) DataConversions.roundUp((max - (max * 0.5D))); - return DataConversions.roundUp(Math.abs((newMax - (newMax * (DataConversions.random(0, 95) * 0.01D))))); - } - } - return 0; - } - - public static int calcGodSpells(Mob attacker, Mob defender) { - if (attacker instanceof Player) { - Player owner = (Player) attacker; - int newAtt = (int) ((owner.getMagicPoints()) + owner.getCurStat(6)); - int newDef = (int) ((addPrayers(defender.isPrayerActivated(0), defender.isPrayerActivated(3), defender.isPrayerActivated(9)) * defender.getDefense() / 4D) + (defender.getArmourPoints() / 4D)); - int hitChance = DataConversions.random(0, 150 + (newAtt - newDef)); - // int hitChance = (int)(50D + (double)owner.getMagicPoints() - - // newDef); - - if (hitChance > (defender instanceof Npc ? 50 : 60)) { - // int max = owner.isCharged() ? Rand(15, 25) : Rand(0, 10); - int max; - if (owner.isCharged()) { - max = Rand(14, 25); - - } else { - max = Rand(0, 10); + /** + * Adds the prayers together to calculate what perecntage the stat should be + * increased + */ + public static double addPrayers(boolean first, boolean second, boolean third) { + if (third) { + return 1.15D; } - int maxProb = 5; // 5% - int nearMaxProb = 10; // 10% - int avProb = 80; // 80% - int lowHit = 5; // 5% - - // Probablities are shifted up/down based on armour - int shiftValue = (int) Math.round(defender.getArmourPoints() * 0.02D); - maxProb -= shiftValue; - nearMaxProb -= (int) Math.round(shiftValue * 1.5); - avProb -= (int) Math.round(shiftValue * 2.0); - lowHit += (int) Math.round(shiftValue * 3.5); - - int hitRange = DataConversions.random(0, 100); - - if (hitRange >= (100 - maxProb)) { - return max; - } else if (hitRange >= (100 - nearMaxProb)) { - return DataConversions.roundUp(Math.abs((max - (max * (DataConversions.random(0, 10) * 0.01D))))); - } else if (hitRange >= (100 - avProb)) { - int newMax = (int) DataConversions.roundUp((max - (max * 0.1D))); - return DataConversions.roundUp(Math.abs((newMax - (newMax * (DataConversions.random(0, 50) * 0.01D))))); - } else { - int newMax = (int) DataConversions.roundUp((max - (max * 0.5D))); - return DataConversions.roundUp(Math.abs((newMax - (newMax * (DataConversions.random(0, 95) * 0.01D))))); + if (second) { + return 1.1D; } - } - } - return 0; - } - - /** - * Calculates what one mob should hit on another with range - */ - public static int calcRangeHit(int rangeLvl, int rangeEquip, int armourEquip, int arrowID) { - int armourRatio = (int) (60D + ((double) ((rangeEquip * 3D) - armourEquip) / 300D) * 40D); - - if (DataConversions.random(0, 100) > armourRatio && DataConversions.random(0, 1) == 0) { - return 0; + if (first) { + return 1.05D; + } + return 1.0D; } - int max = (int) (((double) rangeLvl * 0.15D) + 0.85D + arrowPower(arrowID)); - int peak = (int) (((double) max / 100D) * (double) armourRatio); - int dip = (int) (((double) peak / 3D) * 2D); - return DataConversions.randomWeighted(0, dip, peak, max); - } - - /** - * Calculates what a spell should hit based on its strength and the magic - * equipment stats of the caster - */ - public static int calcSpellHit(int spellStr, int magicEquip) { - int mageRatio = (int) (45D + (double) magicEquip); - int max = spellStr; - int peak = (int) (((double) spellStr / 100D) * (double) mageRatio); - int dip = (int) ((peak / 3D) * 2D); - return DataConversions.randomWeighted(0, dip, peak, max); - } - - /** - * Should the spell cast or fail? - */ - public static boolean castSpell(SpellDef def, int magicLevel, int magicEquip) { - int levelDiff = magicLevel - def.getReqLevel(); - - if (magicEquip >= 30 && levelDiff >= 5) - return true; - if (magicEquip >= 25 && levelDiff >= 6) - return true; - if (magicEquip >= 20 && levelDiff >= 7) - return true; - if (magicEquip >= 15 && levelDiff >= 8) - return true; - if (magicEquip >= 10 && levelDiff >= 9) - return true; - if (levelDiff < 0) { - return false; + /** + * Returns a power to assosiate with each arrow + */ + private static double arrowPower(int arrowID) { + switch (arrowID) { + case 11: // bronze arrows + case 574: // poison bronze arrows + case 190: // crossbow bolts + case 592: // poison cross bow bolts + case 1013: // bronze throwing dart + case 1122: // poison bronze throwing dart + return 0; + case 638:// iron arrows + case 639:// poison iron arrows + case 1015: // iron throwing dart + case 1123:// poison iron throwing dart + return 0.5; + case 640:// steel arrows + case 641:// poison steel arrows + case 1024: // steel throwing dart + case 1124: // poison steel throwing dart + case 1076:// bronze throwing dart + case 1128:// poison bronze throwing knife + case 827:// bronze spear + case 1135:// poison bronze spear + return 1; + case 642:// mith arrows + case 643:// poison mith arrows + case 786:// pearle crossbow bolts + case 1068:// mith throwing dart + case 1125: // poison mith throwing dart + case 1075:// iron throwing dart + case 1129:// poison iron throwing knife + case 1088:// iron spear + case 1136:// poison iron spear + return 1.5; + case 644:// addy arrows + case 645:// poison addy arrows + case 1069:// addy throwing dart + case 1126:// poison addy throwing dart + case 1077:// steel throwing knife + case 1130:// poison steel throwing knife + case 1089:// steel spear + case 1137:// poison steel spear + return 1.75; + case 1081:// black throwing knife + case 1132:// poison black throwing knife + return 2; + case 646:// rune arrows + case 647:// poison rune arrows + case 1070:// rune throwing dart + case 1127:// poison rune throwing dart + case 1078:// mith throwing knife + case 1131:// poison mith throwing knife + case 1090:// mith spear + case 1138:// poison mith spear + return 5; + case 723:// ice arrows + case 1079:// addy throwing knife + case 1133:// poison addy throwing knife + case 1091:// addy spear + case 1139:// poison addy spear + return 6; + case 1080:// rune throwing knife + case 1134:// poison rune throwing knife + case 1092:// rune spear + case 1140:// poison rune spear + return 7; + case 785:// lit arrow (not stackable, why not?) + return 10; + default: + return 0; + } } - if (levelDiff >= 10) { - return true; - } - return DataConversions.random(0, (levelDiff + 2) * 2) != 0; - } - /** - * Calculate how much experience a Mob gives - */ - public static int combatExperience(Mob mob) { - double exp = ((mob.getCombatLevel() * 2) + 10) * 1.5D; - return (int) (mob instanceof Player ? (exp / 4D) : exp); - } - - /* - * Should the pot crack? - */ - public static boolean crackPot(int requiredLvl, int craftingLvl) { - int levelDiff = craftingLvl - requiredLvl; - if (levelDiff < 0) { - return true; - } - if (levelDiff >= 20) { - return false; - } - return DataConversions.random(0, levelDiff + 1) == 0; - } - - /** - * Should the web be cut? - */ - public static boolean cutWeb() { - return DataConversions.random(0, 4) != 0; - } - - public static boolean doorAtFacing(Entity e, int x, int y, int dir) { - if (dir >= 0 && e instanceof GameObject) { - GameObject obj = (GameObject) e; - return obj.getType() == 1 && obj.getDirection() == dir && obj.isOn(x, y); - } - return false; - } - - /** - * Check what level the given experience corresponds to - */ - public static int experienceToLevel(int exp) { - for (int level = 0; level < 98; level++) { - if (exp >= experienceArray[level]) { - continue; - } - return (level + 1); - } - return 99; - } - - /** - * Decide if we fall off the obstacle or not - */ - public static int failObstacle(Player player, int reqLvl) { - int levelDiff = player.getCurStat(16) - reqLvl; - if (levelDiff < 0) - return 1; - - if (levelDiff >= (reqLvl * 2)) - return -1; - - if (DataConversions.random(0, levelDiff + 1) == 0) - return DataConversions.roundUp(player.getMaxStat(3) * DataConversions.random(0.02, 0.04)); - else - return -1; - } - - public static int firemakingExp(int level, int baseExp) { - return DataConversions.roundUp(baseExp + (level * 1.75D)); - } - - /** - * Generates a session id - */ - public static long generateSessionKey(byte userByte) { - return DataConversions.getRandom().nextLong(); - } - - /** - * Gets the type of bar we have - */ - public static int getBarType(int barID) { - switch (barID) { - case 169: - return 0; - case 170: - return 1; - case 171: - return 2; - case 173: - return 3; - case 174: - return 4; - case 408: - return 5; + public static int bitToDoorDir(int bit) { + switch (bit) { + case 1: + return 0; + case 2: + return 1; + case 4: + return -1; + case 8: + return -1; } return -1; - } - - /** - * Calculate a mobs combat level based on their stats - */ - public static int getCombatlevel(int[] stats) { - return getCombatLevel(stats[0], stats[1], stats[2], stats[3], stats[6], stats[5], stats[4]); - } - - /** - * Calculate a mobs combat level based on their stats - */ - public static int getCombatLevel(int att, int def, int str, int hits, int magic, int pray, int range) { - double attack = att + str; - double defense = def + hits; - double mage = pray + magic; - mage /= 8D; - - if (attack < ((double) range * 1.5D)) { - return (int) ((defense / 4D) + ((double) range * 0.375D) + mage); - } else { - return (int) ((attack / 4D) + (defense / 4D) + mage); } - } - /** - * gets the new sprite direction to face - * - */ - public static int getDirection(Mob you, Mob them) { - - if (you.getX() == them.getX() + 1 && you.getY() == them.getY() + 1) // bottom - // left - return 3; - else if (you.getX() == them.getX() + 1 && you.getY() == them.getY() - 1) // top - // left - return 1; - else if (you.getX() == them.getX() - 1 && you.getY() == them.getY() - 1) // right - // up - return 7; - else if (you.getX() == them.getX() - 1 && you.getY() == them.getY() + 1) // right/down - return 5; - else if (you.getX() == them.getX() - 1) // face right - return 6; - else if (you.getX() == them.getX() + 1) // face left - return 2; - else if (you.getY() == them.getY() + 1) // face down - return 4; - else if (you.getY() == them.getY() - 1) // face up - return 0; - - return -1; - } - - /** - * Gets the empty jug ID - */ - public static int getEmptyJug(int fullJug) { - switch (fullJug) { - case 50: - return 21; - case 141: - return 140; - case 342: - return 341; + public static int bitToObjectDir(int bit) { + switch (bit) { + case 1: + return 6; + case 2: + return 0; + case 4: + return 2; + case 8: + return 4; + } + return -1; } - return -1; - } - /** - * Decide what fish, if any, we should get from the water - */ - public static ObjectFishDef getFish(int waterId, int fishingLevel, int click) { - ArrayList fish = new ArrayList(); - for (ObjectFishDef def : EntityHandler.getObjectFishingDef(waterId, click).getFishDefs()) { - if (fishingLevel >= def.getReqLevel()) { - fish.add(def); - } - } - if (fish.size() <= 0) { - return null; - } - ObjectFishDef thisFish = fish.get(DataConversions.random(0, fish.size() - 1)); - int levelDiff = fishingLevel - thisFish.getReqLevel(); - if (levelDiff < 0) { - return null; - } - return DataConversions.percentChance(offsetToPercent(levelDiff)) ? thisFish : null; - } - - /** - * Returns a gem ID - */ - public static int getGem() { - int rand = DataConversions.random(0, 100); - if (rand < 10) { - return 157; - } else if (rand < 30) { - return 158; - } else if (rand < 60) { - return 159; - } else { - return 160; - } - } - - /** - * Check what height we are currently at on the map - */ - public static int getHeight(int y) { - return (int) (y / 944); - } - - /** - * Check what height we are currently at on the map - */ - public static int getHeight(Point location) { - return getHeight(location.getY()); - } - - public static int getItemPos(Shop shop, int id) { - for (int i = 0; i < shop.getItems().size(); i++) { - if (shop.getItems().get(i).getID() == id) - return i; - } - return -1; - } - - public static List getKeyChestLoot() { - List[] possibleLoots = (List[]) EntityHandler.getKeyChestLoots(); - return possibleLoots[DataConversions.random(0, possibleLoots.length - 1)]; - } - - /** - * Should we get a log from the tree? - */ - public static boolean getLog(ObjectWoodcuttingDef def, int woodcutLevel, int axeId) { - int levelDiff = woodcutLevel - def.getReqLevel(); - if (levelDiff < 0) { - return false; - } - switch (axeId) { - case 87: - levelDiff += 0; - break; - case 12: - levelDiff += 2; - break; - case 428: - levelDiff += 4; - break; - case 88: - levelDiff += 6; - break; - case 203: - levelDiff += 8; - break; - case 204: - levelDiff += 10; - break; - case 405: - levelDiff += 12; - break; - } - if (def.getReqLevel() == 1 && levelDiff >= 40) { - return true; - } - return DataConversions.percentChance(offsetToPercent(levelDiff)); - } - - /* - * public static int calcFightHitWithNPC(Mob attacker, Mob defender) { int - * newAtt = (int)((addPrayers(attacker.isPrayerActivated(2), - * attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) * - * attacker.getAttack()) + (attacker.getWeaponAimPoints() / 4D) + - * styleBonus(attacker, 0)); int newDef = - * (int)((addPrayers(defender.isPrayerActivated(0), - * defender.isPrayerActivated(3), defender.isPrayerActivated(9)) * - * defender.getDefense()) + (defender.getArmourPoints() / 4D) + - * styleBonus(attacker, 1)); - * - * int hitChance = DataConversions.random(0, 100) + (newAtt - newDef); - * - * if(hitChance > (defender instanceof Npc ? 50 : 60)) { int max = - * maxHit(attacker.getStrength(), attacker.getWeaponPowerPoints(), - * attacker.isPrayerActivated(1), attacker.isPrayerActivated(4), - * attacker.isPrayerActivated(10), styleBonus(attacker, 2)); - * - * int maxProb = 5; // 5% int nearMaxProb = 10; // 10% int avProb = 80; // - * 80% int lowHit = 5; // 5% - * - * // Probablities are shifted up/down based on armour int shiftValue = - * (int)Math.round(defender.getArmourPoints() * 0.02D); maxProb -= - * shiftValue; nearMaxProb -= (int)Math.round(shiftValue * 1.5); avProb -= - * (int)Math.round(shiftValue * 2.0); lowHit += (int)Math.round(shiftValue * - * 3.5); - * - * int hitRange = DataConversions.random(0, 100); - * - * if(hitRange >= (100 - maxProb)) { return max; } else if(hitRange >= (100 - * - nearMaxProb)) { return DataConversions.roundUp(Math.abs((max - (max * - * (DataConversions.random(0, 10) * 0.01D))))); } else if(hitRange >= (100 - - * avProb)) { int newMax = (int)DataConversions.roundUp((max - (max * - * 0.1D))); return DataConversions.roundUp(Math.abs((newMax - (newMax * - * (DataConversions.random(0, 50) * 0.01D))))); } else { int newMax = - * (int)DataConversions.roundUp((max - (max * 0.5D))); return - * DataConversions.roundUp(Math.abs((newMax - (newMax * - * (DataConversions.random(0, 95) * 0.01D))))); } } return 0; } - */ - - public static String getLvlDiffColour(int lvlDiff) { - if (lvlDiff < -9) { - return "@red@"; - } else if (lvlDiff < -6) { - return "@or3@"; - } else if (lvlDiff < -3) { - return "@or2@"; - } else if (lvlDiff < 0) { - return "@or1@"; - } else if (lvlDiff > 9) { - return "@gre@"; - } else if (lvlDiff > 6) { - return "@gr3@"; - } else if (lvlDiff > 3) { - return "@gr2@"; - } else if (lvlDiff > 0) { - return "@gr1@"; - } - return "@whi@"; - } - - public static int getNewY(int currentY, boolean up) { - int height = getHeight(currentY); - int newHeight; - if (up) { - if (height == 3) { - newHeight = 0; - } else if (height >= 2) { - return currentY; - } else { - newHeight = height + 1; - } - } else { - if (height == 0) { - newHeight = 3; - } else if (height >= 3) { - return currentY; - } else { - newHeight = height - 1; - } - } - return (newHeight * 944) + (currentY % 944); - } - - /** - * Should we can get an ore from the rock? - */ - public static boolean getOre(ObjectMiningDef def, int miningLevel, int axeId) { - - int levelDiff = miningLevel - def.getReqLevel(); - if (levelDiff > 50) - return Formulae.Rand(0, 9) != 1; - if (levelDiff < 0) { - return false; - } - int bonus = 0; - switch (axeId) { - case 156: - bonus = 0; - break; - case 1258: - bonus = 2; - break; - case 1259: - bonus = 6; - break; - case 1260: - bonus = 8; - break; - case 1261: - bonus = 10; - break; - case 1262: - bonus = 12; - break; - } - return DataConversions.percentChance(offsetToPercent(levelDiff + bonus)); - } - - public static int getPotionDose(int id) { - if (DataConversions.inArray(potions1Dose, id)) { - return 1; - } - if (DataConversions.inArray(potions2Dose, id)) { - return 2; - } - if (DataConversions.inArray(potions3Dose, id)) { - return 3; - } - return 0; - } - - /** - * @author xEnt - * - * This method will calculate the new price for all items in the - * shop there are 3 different types of calculations. 1. Buy price - - * if the item is sold in the shop by default, use the base quantity - * for the calculations in the new price. - * - * 2. Buy price - if a player has sold an item to a general store, - * leaving it to have no base quantity and player driven, we perform - * some secondary calculations. - * - * 3. Sell price (this works like the second buy price, calculates - * depending on a static number of stock and does not use any type - * of base quantity calculations, may do a second one in future. - * - * @param i - * - the selected Shop item, represented as an InvItem - * @param shop - * - the shop model object - * @param buy - * - if the item is for sale, or being sold - * @return the item's calculated price of value - */ - public static int getPrice(InvItem i, Shop shop, boolean buy) { - if (buy) - return i.getDef().getBasePrice(); - else - return i.getDef().getBasePrice() / 2; - /* - * final double GENERAL_STORE_BUY_MODIFIER = 0.685; - * - * int newPrice = -1; // the newly given price. boolean playerSoldItem = - * false; // If true, there is no base quantity (a // player has sold - * this item to general // store) int curAmount = i.getAmount(); // - * current quantity the selected item has int maxStockAmount = - * shop.getEquilibrium(i.getID()); // the base // quantity of // the - * selected // shop item (if // has one) - * - * if (maxStockAmount == 0 && shop.isGeneral()) playerSoldItem = true; - * // This item is an item that has no base // quantity, was sold by a - * player in general // store - * - * if (buy) { // Decide if this item is being brought if (maxStockAmount - * == 0 && !shop.isGeneral()) // this should not // happen return - * 999999999; // rofl error price if (playerSoldItem) { // General - * store, no maximum quantity for a // player sold item. (requires - * different // calculations) // cost 15% more buying a 3rd party item - * from a general store int basePrice = shop.isGeneral() ? - * i.getDef().basePrice + (int) (i.getDef().basePrice * 0.15) : - * i.getDef().basePrice; if (basePrice > 10000) // forget any items that - * are worth past // 10k return basePrice; if (curAmount > 28) // after - * 28 quantity from a player sold // item, stick to a static price - * newPrice = basePrice - (int) (basePrice * - * GENERAL_STORE_BUY_MODIFIER); else { // do calculations to decide a - * price depending on the // quantity newPrice = basePrice - (int) - * (curAmount * 5); if (newPrice < basePrice - (int) (basePrice * - * GENERAL_STORE_BUY_MODIFIER)) newPrice = basePrice - (int) (basePrice - * * GENERAL_STORE_BUY_MODIFIER); } } else { // Has a base quantity if - * (curAmount >= maxStockAmount) // leave base price is full // stock is - * avaliable newPrice = i.getDef().basePrice; else // 75-100% quantity - * is in stock if (curAmount > maxStockAmount * 0.75 && curAmount < - * maxStockAmount) newPrice = i.getDef().basePrice + (int) - * (i.getDef().basePrice * getShopPercentage( i, 0, true)); else // - * 50-75% quantity is in stock if (curAmount > maxStockAmount * 0.50 && - * curAmount <= maxStockAmount * 0.75) newPrice = i.getDef().basePrice + - * (int) (i.getDef().basePrice * getShopPercentage( i, 1, true)); else - * // 25-50% quantity is in stock if (curAmount > maxStockAmount * 0.25 - * && curAmount <= maxStockAmount * 0.50) newPrice = - * i.getDef().basePrice + (int) (i.getDef().basePrice * - * getShopPercentage( i, 2, true)); else // 0-25% quantity is in stock - * if (curAmount > maxStockAmount * 0.0 && curAmount <= maxStockAmount * - * 0.25) newPrice = i.getDef().basePrice + (int) (i.getDef().basePrice * - * getShopPercentage( i, 3, true)); } if (newPrice == -1) return - * 99999999; // error? return newPrice; } else { // Sell if (i.getID() - * == 117) Logging.debug("Current stock: " + curAmount); int base = - * i.getDef().basePrice - (int) (i.getDef().basePrice / 2.5); // Sell - * price is 125% // lower than base // price to begin // with if - * (shop.isGeneral()) // 3rd party item (player sold) base = base - - * (int) (base * 0.10); // 10% less value, if general // store. - * - * if (curAmount < 1) return base; - * - * int price; // new price if (curAmount > 12) { price = base - (int) - * (base * 0.75); // 75% loss (believe it or // not, thats how it was) } - * else { price = base; - * - * if (curAmount > 1) price = base - (int) (curAmount * (base * 0.045)); - * if (price < base - (int) (base * 0.75)) base = base - (int) (base * - * 0.75); } if (price < 1) // should not happen return 0; // error price - * else return price; } + /** + * Decide if the food we are cooking should be burned or not */ - } - - public static int getRangeDirection(Mob you, Mob them) { - if (you.getX() > them.getX() && you.getY() == them.getY()) // face right - return 6; - else if (you.getX() < them.getX() && you.getY() == them.getY()) // face - // left - return 2; - else if (you.getY() < them.getY() && you.getX() == them.getX()) // face - // down - return 4; - else if (you.getY() > them.getY() && you.getX() == them.getX()) // face - // up - return 0; - else if (you.getX() <= them.getX() && you.getY() <= them.getY()) // bottom - // left - return 3; - else if (you.getX() <= them.getX() && you.getY() >= them.getY()) // top - // left - return 1; - else if (you.getX() >= them.getX() && you.getY() >= them.getY()) // right - // up - return 7; - else if (you.getX() >= them.getX() && you.getY() <= them.getY()) // right/down - return 5; - - return -1; - } - - // This is needed for the above method - public static double getShopPercentage(InvItem item, int pos, boolean buy) { - int[] prices = { 0, 10, 100, 1000, 10000 }; // base prices of the items. - double[][] percentages = { { 0.5, 1.0, 1.5, 2.0 }, // in between 0 and - // 10GP. - { 0.1, 0.3, 0.45, 0.6 }, // 10-100gp - { 0.1, 0.2, 0.3, 0.4 }, // 100-1000gp - { 0.5, 0.1, 0.15, 0.2 }, // 1000-10000gp - }; - int key = -1; - for (int i = 0; i < prices.length - 1; i++) - if (item.getDef().basePrice > prices[i] && item.getDef().basePrice < prices[i + 1]) - key = i; - if (key == -1) - return -1; - return percentages[key][pos]; - } - - /** - * Gets the smithing exp for the given amount of the right bars - */ - public static int getSmithingExp(int barID, int barCount) { - int[] exps = { 13, 25, 37, 50, 83, 74 }; - int type = getBarType(barID); - if (type < 0) { - return 0; - } - return exps[type] * barCount; - } - - public static int getStat(String stat) { - for (int i = 0; i < statArray.length; i++) { - if (statArray[i].equalsIgnoreCase(stat)) - return i; - } - - return -1; - } - - /** - * Given a stat string get its index returns -1 on failure - */ - public static int getStatIndex(String stat) { - for (int index = 0; index < statArray.length; index++) { - if (stat.equalsIgnoreCase(statArray[index])) { - return index; - } - } - return -1; - } - - public static boolean isP2P(Object... objs) { - return isP2P(false, objs); - } - - /** - * Performs coordinate checks on the locations in the P2P_LOCS array to - * decide whether items/object/npc's/general x,y coordinates are in P2P area - * - * @param objs - * - ItemLoc, GameObjectLoc, NPCLoc or an Integer. - * @return - true if inside P2P area, otherwise false. - */ - public static boolean isP2P(boolean f2pwildy, Object... objs) { - int x = -1; - int y = -1; - if (objs.length == 1) { - Object obj = objs[0]; - if (obj instanceof GameObjectLoc) { - x = ((GameObjectLoc) obj).x; - y = ((GameObjectLoc) obj).y; - } else if ((obj instanceof ItemLoc)) { - x = ((ItemLoc) obj).x; - y = ((ItemLoc) obj).y; - } else if (obj instanceof NPCLoc) { - x = ((NPCLoc) obj).startX; - y = ((NPCLoc) obj).startY; - } - } else { - if (objs[0] instanceof Integer && objs[1] instanceof Integer) { - x = (Integer) objs[0]; - y = (Integer) objs[1]; - } - } - - if (x == -1) - return false; - if(!f2pwildy) { - for (int i = 0; i < P2P_LOCS.length; i++) { - for (int ele = 0; ele < 4; ele++) { - if (x >= P2P_LOCS[i][0].getX() && x <= P2P_LOCS[i][1].getX() && y >= P2P_LOCS[i][0].getY() + ((ele) * 944) && y <= P2P_LOCS[i][1].getY() + ((ele) * 944)) + public static boolean burnFood(int foodId, int cookingLevel) { + int levelDiff = cookingLevel + - EntityHandler.getItemCookingDef(foodId).getReqLevel(); + if (levelDiff < 0) { return true; } - } - } else { - for (int i = 0; i < F2PWILD_LOCS.length; i++) { - for (int ele = 0; ele < 4; ele++) { - if (x >= F2PWILD_LOCS[i][0].getX() && x <= F2PWILD_LOCS[i][1].getX() && y >= F2PWILD_LOCS[i][0].getY() + ((ele) * 944) && y <= F2PWILD_LOCS[i][1].getY() + ((ele) * 944)) + if (levelDiff >= 20) { + return false; + } + return DataConversions.random(0, levelDiff + 1) == 0; + } + + /** + * Calulates what one mob should hit on another with meelee + */ + public static int calcFightHit(Mob attacker, Mob defender) { + int max = maxHit(attacker.getStrength(), + attacker.getWeaponPowerPoints(), attacker.isPrayerActivated(1), + attacker.isPrayerActivated(4), attacker.isPrayerActivated(10), + styleBonus(attacker, 2)); + int newAtt = (int) (addPrayers(attacker.isPrayerActivated(2), + attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) + * (attacker.getAttack() / 0.8D) + + ((DataConversions.random(0, 4) == 0 ? attacker + .getWeaponPowerPoints() : attacker.getWeaponAimPoints()) / 2.5D) + + (attacker.getCombatStyle() == 1 + && DataConversions.random(0, 2) == 0 ? 4 : 0) + + (DataConversions.random(0, 100) <= 10 ? (attacker + .getStrength() / 5D) : 0) + (styleBonus(attacker, 0) * 2)); + int newDef = (int) (addPrayers(defender.isPrayerActivated(0), + defender.isPrayerActivated(3), defender.isPrayerActivated(9)) + * ((DataConversions.random(0, 100) <= 5 ? 0 : defender + .getDefense()) * 1.1D) + + ((DataConversions.random(0, 100) <= 5 ? 0 : defender + .getArmourPoints()) / 2.75D) + + (defender.getStrength() / 4D) + (styleBonus(defender, 1) * 2)); + + int hitChance = DataConversions.random(0, 100) + (newAtt - newDef); + if (attacker instanceof Npc) { + hitChance -= 5; + } + if (DataConversions.random(0, 100) <= 10) { + hitChance += 20; + } + if (hitChance > (defender instanceof Npc ? 40 : 50)) { + int maxProb = 5; // 5% + int nearMaxProb = 7; // 7% + int avProb = 73; // 73% + int lowHit = 10; // 15% + + // Probablities are shifted up/down based on armour + int shiftValue = (int) Math + .round(defender.getArmourPoints() * 0.02D); + maxProb -= shiftValue; + nearMaxProb -= (int) Math.round(shiftValue * 1.5); + avProb -= (int) Math.round(shiftValue * 2.0); + lowHit += (int) Math.round(shiftValue * 3.5); + + int hitRange = DataConversions.random(0, 100); + + if (hitRange >= (100 - maxProb)) { + return max; + } else if (hitRange >= (100 - nearMaxProb)) { + return DataConversions + .roundUp(Math.abs((max - (max * (DataConversions + .random(0, 10) * 0.01D))))); + } else if (hitRange >= (100 - avProb)) { + int newMax = (int) DataConversions + .roundUp((max - (max * 0.1D))); + return DataConversions + .roundUp(Math.abs((newMax - (newMax * (DataConversions + .random(0, 50) * 0.01D))))); + } else { + int newMax = (int) DataConversions + .roundUp((max - (max * 0.5D))); + return DataConversions + .roundUp(Math.abs((newMax - (newMax * (DataConversions + .random(0, 95) * 0.01D))))); + } + } + return 0; + } + + public static int calcFightHitWithNPC(Mob attacker, Mob defender) { + + int max = maxHit(attacker.getStrength(), + attacker.getWeaponPowerPoints(), attacker.isPrayerActivated(1), + attacker.isPrayerActivated(4), attacker.isPrayerActivated(10), + styleBonus(attacker, 2)); + if (attacker instanceof Npc) { + Npc n = (Npc) attacker; + if (n.getID() == 3) // Chickens only doing 1 damage. + max = 1; + } + + // int newAtt = (int) (addPrayers(attacker.isPrayerActivated(2), + // attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) * + // (attacker.getAttack() / 0.7D) + ((DataConversions.random(0, 4) == 0 ? + // attacker.getWeaponPowerPoints() : attacker.getWeaponAimPoints()) / + // 3D) + (attacker.getCombatStyle() == 1 && DataConversions.random(0, 2) + // == 0 ? 4 : 0) + (styleBonus(attacker, 0) * 2)); + + int newAtt = (int) (addPrayers(attacker.isPrayerActivated(2), + attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) + * (attacker.getAttack()) + + ((DataConversions.random(0, 4) == 0 ? attacker + .getWeaponPowerPoints() : attacker.getWeaponAimPoints()) / 3D) + + (attacker.getCombatStyle() == 1 + && DataConversions.random(0, 2) == 0 ? 4 : 0) + (styleBonus( + attacker, 0) * 2)); + + int newDef = (int) (addPrayers(defender.isPrayerActivated(0), + defender.isPrayerActivated(3), defender.isPrayerActivated(9)) + * defender.getDefense() + + (defender.getArmourPoints() / 4D) + + (defender.getStrength() / 4D) + (styleBonus(defender, 1) * 2)); + + /* + * if(defender instanceof Player) { if(defender.getCombatLevel() < 70 && + * defender.getCombatLevel() > 45) newDef = newDef + (int)(newDef * + * 0.25); else if(defender.getCombatLevel() > 25 && + * defender.getCombatLevel() < 45) newDef = newDef + (int)(newDef * + * 0.35); + * + * else if(defender.getCombatLevel() > 8 && defender.getCombatLevel() < + * 25) newDef = newDef + (int)(newDef * 0.45); + * + * else if(defender.getCombatLevel() > 1 && defender.getCombatLevel() < + * 8) newDef = newDef + (int)(newDef * 0.55); } + */ + if (attacker instanceof Player) { + // newDef += newDef / 8; + newDef -= newDef / 8; + } + + int hitChance = DataConversions.random(0, 100) + (newAtt - newDef); + // Added this + if (attacker instanceof Player) + hitChance += (int) (DataConversions.random(0, attacker.getAttack()) + 1) / 1.33; + + if (attacker instanceof Npc) { + hitChance -= 5; + } + if (hitChance > (defender instanceof Npc ? 40 : 50)) { + int maxProb = 5; // 5% + int nearMaxProb = 10; // 10% + int avProb = 80; // 70% + int lowHit = 10; // 15% + + // Probablities are shifted up/down based on armour + int shiftValue = (int) Math + .round(defender.getArmourPoints() * 0.02D); + maxProb -= shiftValue; + nearMaxProb -= (int) Math.round(shiftValue * 1.5); + avProb -= (int) Math.round(shiftValue * 2.0); + lowHit += (int) Math.round(shiftValue * 3.5); + + int hitRange = DataConversions.random(0, 100); + + if (hitRange >= (100 - maxProb)) { + return max; + } else if (hitRange >= (100 - nearMaxProb)) { + return DataConversions + .roundUp(Math.abs((max - (max * (DataConversions + .random(0, 10) * 0.01D))))); + } else if (hitRange >= (100 - avProb)) { + int newMax = (int) DataConversions + .roundUp((max - (max * 0.1D))); + return DataConversions + .roundUp(Math.abs((newMax - (newMax * (DataConversions + .random(0, 50) * 0.01D))))); + } else { + int newMax = (int) DataConversions + .roundUp((max - (max * 0.5D))); + return DataConversions + .roundUp(Math.abs((newMax - (newMax * (DataConversions + .random(0, 95) * 0.01D))))); + } + } + return 0; + } + + public static int calcGodSpells(Mob attacker, Mob defender) { + if (attacker instanceof Player) { + Player owner = (Player) attacker; + int newAtt = (int) ((owner.getMagicPoints()) + owner.getCurStat(6)); + int newDef = (int) ((addPrayers(defender.isPrayerActivated(0), + defender.isPrayerActivated(3), + defender.isPrayerActivated(9)) + * defender.getDefense() / 4D) + (defender.getArmourPoints() / 4D)); + int hitChance = DataConversions.random(0, 150 + (newAtt - newDef)); + // int hitChance = (int)(50D + (double)owner.getMagicPoints() - + // newDef); + + if (hitChance > (defender instanceof Npc ? 50 : 60)) { + // int max = owner.isCharged() ? Rand(15, 25) : Rand(0, 10); + int max; + if (owner.isCharged()) { + max = Rand(14, 25); + + } else { + max = Rand(0, 10); + } + int maxProb = 5; // 5% + int nearMaxProb = 10; // 10% + int avProb = 80; // 80% + int lowHit = 5; // 5% + + // Probablities are shifted up/down based on armour + int shiftValue = (int) Math + .round(defender.getArmourPoints() * 0.02D); + maxProb -= shiftValue; + nearMaxProb -= (int) Math.round(shiftValue * 1.5); + avProb -= (int) Math.round(shiftValue * 2.0); + lowHit += (int) Math.round(shiftValue * 3.5); + + int hitRange = DataConversions.random(0, 100); + + if (hitRange >= (100 - maxProb)) { + return max; + } else if (hitRange >= (100 - nearMaxProb)) { + return DataConversions + .roundUp(Math.abs((max - (max * (DataConversions + .random(0, 10) * 0.01D))))); + } else if (hitRange >= (100 - avProb)) { + int newMax = (int) DataConversions + .roundUp((max - (max * 0.1D))); + return DataConversions.roundUp(Math + .abs((newMax - (newMax * (DataConversions.random(0, + 50) * 0.01D))))); + } else { + int newMax = (int) DataConversions + .roundUp((max - (max * 0.5D))); + return DataConversions.roundUp(Math + .abs((newMax - (newMax * (DataConversions.random(0, + 95) * 0.01D))))); + } + } + } + return 0; + } + + /** + * Calculates what one mob should hit on another with range + */ + public static int calcRangeHit(int rangeLvl, int rangeEquip, + int armourEquip, int arrowID) { + int armourRatio = (int) (60D + ((double) ((rangeEquip * 3D) - armourEquip) / 300D) * 40D); + + if (DataConversions.random(0, 100) > armourRatio + && DataConversions.random(0, 1) == 0) { + return 0; + } + + int max = (int) (((double) rangeLvl * 0.15D) + 0.85D + arrowPower(arrowID)); + int peak = (int) (((double) max / 100D) * (double) armourRatio); + int dip = (int) (((double) peak / 3D) * 2D); + return DataConversions.randomWeighted(0, dip, peak, max); + } + + /** + * Calculates what a spell should hit based on its strength and the magic + * equipment stats of the caster + */ + public static int calcSpellHit(int spellStr, int magicEquip) { + int mageRatio = (int) (45D + (double) magicEquip); + int max = spellStr; + int peak = (int) (((double) spellStr / 100D) * (double) mageRatio); + int dip = (int) ((peak / 3D) * 2D); + return DataConversions.randomWeighted(0, dip, peak, max); + } + + /** + * Should the spell cast or fail? + */ + public static boolean castSpell(SpellDef def, int magicLevel, int magicEquip) { + int levelDiff = magicLevel - def.getReqLevel(); + + if (magicEquip >= 30 && levelDiff >= 5) + return true; + if (magicEquip >= 25 && levelDiff >= 6) + return true; + if (magicEquip >= 20 && levelDiff >= 7) + return true; + if (magicEquip >= 15 && levelDiff >= 8) + return true; + if (magicEquip >= 10 && levelDiff >= 9) + return true; + if (levelDiff < 0) { + return false; + } + if (levelDiff >= 10) { return true; } - } + return DataConversions.random(0, (levelDiff + 2) * 2) != 0; } - return false; - } - public static int levelToExperience(int level) { - if (level <= 1) - return 0; - - return experienceArray[level]; - } - - /** - * Should the fire light or fail? - */ - public static boolean lightLogs(FiremakingDef def, int firemakingLvl) { - int levelDiff = firemakingLvl - def.getRequiredLevel(); - if (levelDiff < 0) { - return false; + /** + * Calculate how much experience a Mob gives + */ + public static int combatExperience(Mob mob) { + double exp = ((mob.getCombatLevel() * 2) + 10) * 1.5D; + return (int) (mob instanceof Player ? (exp / 4D) : exp); } - if (levelDiff >= 20) { - return true; + + /* + * Should the pot crack? + */ + public static boolean crackPot(int requiredLvl, int craftingLvl) { + int levelDiff = craftingLvl - requiredLvl; + if (levelDiff < 0) { + return true; + } + if (levelDiff >= 20) { + return false; + } + return DataConversions.random(0, levelDiff + 1) == 0; } - return DataConversions.random(0, levelDiff + 1) != 0; - } - // maxHit - /** - * Should the arrow be dropped or disappear - */ - public static boolean looseArrow(int damage) { - return DataConversions.random(0, 6) == 0; - } - - /** - * Calculate the max hit possible with the given stats - */ - public static int maxHit(int strength, int weaponPower, boolean burst, boolean superhuman, boolean ultimate, int bonus) { - double newStrength = (double) ((strength * addPrayers(burst, superhuman, ultimate)) + bonus); - - int fin = (int) ((newStrength * ((((double) weaponPower * 0.00175D) + 0.1D)) + 1.05D) * 0.95D); - //if (fin > 31) - // fin = 31; - return fin; - - } - - /** - * Gets the min level required to smith a bar - */ - public static int minSmithingLevel(int barID) { - int[] levels = { 1, 15, 30, 50, 70, 85 }; - int type = getBarType(barID); - if (type < 0) { - return -1; + /** + * Should the web be cut? + */ + public static boolean cutWeb() { + return DataConversions.random(0, 4) != 0; } - return levels[type]; - } - public static boolean objectAtFacing(Entity e, int x, int y, int dir) { - if (dir >= 0 && e instanceof GameObject) { - GameObject obj = (GameObject) e; - return obj.getType() == 0 && obj.getDirection() == dir && obj.isOn(x, y); + public static boolean doorAtFacing(Entity e, int x, int y, int dir) { + if (dir >= 0 && e instanceof GameObject) { + GameObject obj = (GameObject) e; + return obj.getType() == 1 && obj.getDirection() == dir + && obj.isOn(x, y); + } + return false; } - return false; - } - private static int offsetToPercent(int levelDiff) { - return levelDiff > 40 ? 70 : 30 + levelDiff; - } - - /** - * Calulates what one mob should hit on another with meelee - */ - public static double parseDouble(double number) { - String numberString = String.valueOf(number); - return Double.valueOf(numberString.substring(0, numberString.indexOf(".") + 2)); - } - - public static int Rand(int low, int high) { - return low + r.nextInt(high - low); - } - - public static int styleBonus(Mob mob, int skill) { - int style = mob.getCombatStyle(); - if (style == 0) { - return 1; + /** + * Check what level the given experience corresponds to + */ + public static int experienceToLevel(int exp) { + for (int level = 0; level < 98; level++) { + if (exp >= experienceArray[level]) { + continue; + } + return (level + 1); + } + return 99; } - return (skill == 0 && style == 2) || (skill == 1 && style == 3) || (skill == 2 && style == 1) ? 3 : 0; - } - public static int[] rares = new int[]{828, 831, 832, 575, 576, 577, 578, 579, 580, 581, 971, 1316, 1315, 1314, 422, 1289, 1156, 677}; + + /** + * Decide if we fall off the obstacle or not + */ + public static int failObstacle(Player player, int reqLvl) { + int levelDiff = player.getCurStat(16) - reqLvl; + if (levelDiff < 0) + return 1; + + if (levelDiff >= (reqLvl * 2)) + return -1; + + if (DataConversions.random(0, levelDiff + 1) == 0) + return DataConversions.roundUp(player.getMaxStat(3) + * DataConversions.random(0.02, 0.04)); + else + return -1; + } + + public static int firemakingExp(int level, int baseExp) { + return DataConversions.roundUp(baseExp + (level * 1.75D)); + } + + /** + * Generates a session id + */ + public static long generateSessionKey(byte userByte) { + return DataConversions.getRandom().nextLong(); + } + + /** + * Gets the type of bar we have + */ + public static int getBarType(int barID) { + switch (barID) { + case 169: + return 0; + case 170: + return 1; + case 171: + return 2; + case 173: + return 3; + case 174: + return 4; + case 408: + return 5; + } + return -1; + } + + /** + * Calculate a mobs combat level based on their stats + */ + public static int getCombatlevel(int[] stats) { + return getCombatLevel(stats[0], stats[1], stats[2], stats[3], stats[6], + stats[5], stats[4]); + } + + /** + * Calculate a mobs combat level based on their stats + */ + public static int getCombatLevel(int att, int def, int str, int hits, + int magic, int pray, int range) { + double attack = att + str; + double defense = def + hits; + double mage = pray + magic; + mage /= 8D; + + if (attack < ((double) range * 1.5D)) { + return (int) ((defense / 4D) + ((double) range * 0.375D) + mage); + } else { + return (int) ((attack / 4D) + (defense / 4D) + mage); + } + } + + /** + * gets the new sprite direction to face + * + */ + public static int getDirection(Mob you, Mob them) { + + if (you.getX() == them.getX() + 1 && you.getY() == them.getY() + 1) // bottom + // left + return 3; + else if (you.getX() == them.getX() + 1 && you.getY() == them.getY() - 1) // top + // left + return 1; + else if (you.getX() == them.getX() - 1 && you.getY() == them.getY() - 1) // right + // up + return 7; + else if (you.getX() == them.getX() - 1 && you.getY() == them.getY() + 1) // right/down + return 5; + else if (you.getX() == them.getX() - 1) // face right + return 6; + else if (you.getX() == them.getX() + 1) // face left + return 2; + else if (you.getY() == them.getY() + 1) // face down + return 4; + else if (you.getY() == them.getY() - 1) // face up + return 0; + + return -1; + } + + /** + * Gets the empty jug ID + */ + public static int getEmptyJug(int fullJug) { + switch (fullJug) { + case 50: + return 21; + case 141: + return 140; + case 342: + return 341; + } + return -1; + } + + /** + * Decide what fish, if any, we should get from the water + */ + public static ObjectFishDef getFish(int waterId, int fishingLevel, int click) { + ArrayList fish = new ArrayList(); + for (ObjectFishDef def : EntityHandler.getObjectFishingDef(waterId, + click).getFishDefs()) { + if (fishingLevel >= def.getReqLevel()) { + fish.add(def); + } + } + if (fish.size() <= 0) { + return null; + } + ObjectFishDef thisFish = fish.get(DataConversions.random(0, + fish.size() - 1)); + int levelDiff = fishingLevel - thisFish.getReqLevel(); + if (levelDiff < 0) { + return null; + } + return DataConversions.percentChance(offsetToPercent(levelDiff)) ? thisFish + : null; + } + + /** + * Returns a gem ID + */ + public static int getGem() { + int rand = DataConversions.random(0, 100); + if (rand < 10) { + return 157; + } else if (rand < 30) { + return 158; + } else if (rand < 60) { + return 159; + } else { + return 160; + } + } + + /** + * Check what height we are currently at on the map + */ + public static int getHeight(int y) { + return (int) (y / 944); + } + + /** + * Check what height we are currently at on the map + */ + public static int getHeight(Point location) { + return getHeight(location.getY()); + } + + public static int getItemPos(Shop shop, int id) { + for (int i = 0; i < shop.getItems().size(); i++) { + if (shop.getItems().get(i).getID() == id) + return i; + } + return -1; + } + + public static List getKeyChestLoot() { + @SuppressWarnings("unchecked") + List[] possibleLoots = (List[]) EntityHandler + .getKeyChestLoots(); + return possibleLoots[DataConversions + .random(0, possibleLoots.length - 1)]; + } + + /** + * Should we get a log from the tree? + */ + public static boolean getLog(ObjectWoodcuttingDef def, int woodcutLevel, + int axeId) { + int levelDiff = woodcutLevel - def.getReqLevel(); + if (levelDiff < 0) { + return false; + } + switch (axeId) { + case 87: + levelDiff += 0; + break; + case 12: + levelDiff += 2; + break; + case 428: + levelDiff += 4; + break; + case 88: + levelDiff += 6; + break; + case 203: + levelDiff += 8; + break; + case 204: + levelDiff += 10; + break; + case 405: + levelDiff += 12; + break; + } + if (def.getReqLevel() == 1 && levelDiff >= 40) { + return true; + } + return DataConversions.percentChance(offsetToPercent(levelDiff)); + } + + /* + * public static int calcFightHitWithNPC(Mob attacker, Mob defender) { int + * newAtt = (int)((addPrayers(attacker.isPrayerActivated(2), + * attacker.isPrayerActivated(5), attacker.isPrayerActivated(11)) * + * attacker.getAttack()) + (attacker.getWeaponAimPoints() / 4D) + + * styleBonus(attacker, 0)); int newDef = + * (int)((addPrayers(defender.isPrayerActivated(0), + * defender.isPrayerActivated(3), defender.isPrayerActivated(9)) * + * defender.getDefense()) + (defender.getArmourPoints() / 4D) + + * styleBonus(attacker, 1)); + * + * int hitChance = DataConversions.random(0, 100) + (newAtt - newDef); + * + * if(hitChance > (defender instanceof Npc ? 50 : 60)) { int max = + * maxHit(attacker.getStrength(), attacker.getWeaponPowerPoints(), + * attacker.isPrayerActivated(1), attacker.isPrayerActivated(4), + * attacker.isPrayerActivated(10), styleBonus(attacker, 2)); + * + * int maxProb = 5; // 5% int nearMaxProb = 10; // 10% int avProb = 80; // + * 80% int lowHit = 5; // 5% + * + * // Probablities are shifted up/down based on armour int shiftValue = + * (int)Math.round(defender.getArmourPoints() * 0.02D); maxProb -= + * shiftValue; nearMaxProb -= (int)Math.round(shiftValue * 1.5); avProb -= + * (int)Math.round(shiftValue * 2.0); lowHit += (int)Math.round(shiftValue * + * 3.5); + * + * int hitRange = DataConversions.random(0, 100); + * + * if(hitRange >= (100 - maxProb)) { return max; } else if(hitRange >= (100 + * - nearMaxProb)) { return DataConversions.roundUp(Math.abs((max - (max * + * (DataConversions.random(0, 10) * 0.01D))))); } else if(hitRange >= (100 - + * avProb)) { int newMax = (int)DataConversions.roundUp((max - (max * + * 0.1D))); return DataConversions.roundUp(Math.abs((newMax - (newMax * + * (DataConversions.random(0, 50) * 0.01D))))); } else { int newMax = + * (int)DataConversions.roundUp((max - (max * 0.5D))); return + * DataConversions.roundUp(Math.abs((newMax - (newMax * + * (DataConversions.random(0, 95) * 0.01D))))); } } return 0; } + */ + + public static String getLvlDiffColour(int lvlDiff) { + if (lvlDiff < -9) { + return "@red@"; + } else if (lvlDiff < -6) { + return "@or3@"; + } else if (lvlDiff < -3) { + return "@or2@"; + } else if (lvlDiff < 0) { + return "@or1@"; + } else if (lvlDiff > 9) { + return "@gre@"; + } else if (lvlDiff > 6) { + return "@gr3@"; + } else if (lvlDiff > 3) { + return "@gr2@"; + } else if (lvlDiff > 0) { + return "@gr1@"; + } + return "@whi@"; + } + + public static int getNewY(int currentY, boolean up) { + int height = getHeight(currentY); + int newHeight; + if (up) { + if (height == 3) { + newHeight = 0; + } else if (height >= 2) { + return currentY; + } else { + newHeight = height + 1; + } + } else { + if (height == 0) { + newHeight = 3; + } else if (height >= 3) { + return currentY; + } else { + newHeight = height - 1; + } + } + return (newHeight * 944) + (currentY % 944); + } + + /** + * Should we can get an ore from the rock? + */ + public static boolean getOre(ObjectMiningDef def, int miningLevel, int axeId) { + + int levelDiff = miningLevel - def.getReqLevel(); + if (levelDiff > 50) + return Formulae.Rand(0, 9) != 1; + if (levelDiff < 0) { + return false; + } + int bonus = 0; + switch (axeId) { + case 156: + bonus = 0; + break; + case 1258: + bonus = 2; + break; + case 1259: + bonus = 6; + break; + case 1260: + bonus = 8; + break; + case 1261: + bonus = 10; + break; + case 1262: + bonus = 12; + break; + } + return DataConversions + .percentChance(offsetToPercent(levelDiff + bonus)); + } + + public static int getPotionDose(int id) { + if (DataConversions.inArray(potions1Dose, id)) { + return 1; + } + if (DataConversions.inArray(potions2Dose, id)) { + return 2; + } + if (DataConversions.inArray(potions3Dose, id)) { + return 3; + } + return 0; + } + + /** + * @author xEnt + * + * This method will calculate the new price for all items in the + * shop there are 3 different types of calculations. 1. Buy price - + * if the item is sold in the shop by default, use the base quantity + * for the calculations in the new price. + * + * 2. Buy price - if a player has sold an item to a general store, + * leaving it to have no base quantity and player driven, we perform + * some secondary calculations. + * + * 3. Sell price (this works like the second buy price, calculates + * depending on a static number of stock and does not use any type + * of base quantity calculations, may do a second one in future. + * + * @param i + * - the selected Shop item, represented as an InvItem + * @param shop + * - the shop model object + * @param buy + * - if the item is for sale, or being sold + * @return the item's calculated price of value + */ + public static int getPrice(InvItem i, Shop shop, boolean buy) { + if (buy) + return i.getDef().getBasePrice(); + else + return i.getDef().getBasePrice() / 2; + /* + * final double GENERAL_STORE_BUY_MODIFIER = 0.685; + * + * int newPrice = -1; // the newly given price. boolean playerSoldItem = + * false; // If true, there is no base quantity (a // player has sold + * this item to general // store) int curAmount = i.getAmount(); // + * current quantity the selected item has int maxStockAmount = + * shop.getEquilibrium(i.getID()); // the base // quantity of // the + * selected // shop item (if // has one) + * + * if (maxStockAmount == 0 && shop.isGeneral()) playerSoldItem = true; + * // This item is an item that has no base // quantity, was sold by a + * player in general // store + * + * if (buy) { // Decide if this item is being brought if (maxStockAmount + * == 0 && !shop.isGeneral()) // this should not // happen return + * 999999999; // rofl error price if (playerSoldItem) { // General + * store, no maximum quantity for a // player sold item. (requires + * different // calculations) // cost 15% more buying a 3rd party item + * from a general store int basePrice = shop.isGeneral() ? + * i.getDef().basePrice + (int) (i.getDef().basePrice * 0.15) : + * i.getDef().basePrice; if (basePrice > 10000) // forget any items that + * are worth past // 10k return basePrice; if (curAmount > 28) // after + * 28 quantity from a player sold // item, stick to a static price + * newPrice = basePrice - (int) (basePrice * + * GENERAL_STORE_BUY_MODIFIER); else { // do calculations to decide a + * price depending on the // quantity newPrice = basePrice - (int) + * (curAmount * 5); if (newPrice < basePrice - (int) (basePrice * + * GENERAL_STORE_BUY_MODIFIER)) newPrice = basePrice - (int) (basePrice + * * GENERAL_STORE_BUY_MODIFIER); } } else { // Has a base quantity if + * (curAmount >= maxStockAmount) // leave base price is full // stock is + * avaliable newPrice = i.getDef().basePrice; else // 75-100% quantity + * is in stock if (curAmount > maxStockAmount * 0.75 && curAmount < + * maxStockAmount) newPrice = i.getDef().basePrice + (int) + * (i.getDef().basePrice * getShopPercentage( i, 0, true)); else // + * 50-75% quantity is in stock if (curAmount > maxStockAmount * 0.50 && + * curAmount <= maxStockAmount * 0.75) newPrice = i.getDef().basePrice + + * (int) (i.getDef().basePrice * getShopPercentage( i, 1, true)); else + * // 25-50% quantity is in stock if (curAmount > maxStockAmount * 0.25 + * && curAmount <= maxStockAmount * 0.50) newPrice = + * i.getDef().basePrice + (int) (i.getDef().basePrice * + * getShopPercentage( i, 2, true)); else // 0-25% quantity is in stock + * if (curAmount > maxStockAmount * 0.0 && curAmount <= maxStockAmount * + * 0.25) newPrice = i.getDef().basePrice + (int) (i.getDef().basePrice * + * getShopPercentage( i, 3, true)); } if (newPrice == -1) return + * 99999999; // error? return newPrice; } else { // Sell if (i.getID() + * == 117) Logging.debug("Current stock: " + curAmount); int base = + * i.getDef().basePrice - (int) (i.getDef().basePrice / 2.5); // Sell + * price is 125% // lower than base // price to begin // with if + * (shop.isGeneral()) // 3rd party item (player sold) base = base - + * (int) (base * 0.10); // 10% less value, if general // store. + * + * if (curAmount < 1) return base; + * + * int price; // new price if (curAmount > 12) { price = base - (int) + * (base * 0.75); // 75% loss (believe it or // not, thats how it was) } + * else { price = base; + * + * if (curAmount > 1) price = base - (int) (curAmount * (base * 0.045)); + * if (price < base - (int) (base * 0.75)) base = base - (int) (base * + * 0.75); } if (price < 1) // should not happen return 0; // error price + * else return price; } + */ + } + + public static int getRangeDirection(Mob you, Mob them) { + if (you.getX() > them.getX() && you.getY() == them.getY()) // face right + return 6; + else if (you.getX() < them.getX() && you.getY() == them.getY()) // face + // left + return 2; + else if (you.getY() < them.getY() && you.getX() == them.getX()) // face + // down + return 4; + else if (you.getY() > them.getY() && you.getX() == them.getX()) // face + // up + return 0; + else if (you.getX() <= them.getX() && you.getY() <= them.getY()) // bottom + // left + return 3; + else if (you.getX() <= them.getX() && you.getY() >= them.getY()) // top + // left + return 1; + else if (you.getX() >= them.getX() && you.getY() >= them.getY()) // right + // up + return 7; + else if (you.getX() >= them.getX() && you.getY() <= them.getY()) // right/down + return 5; + + return -1; + } + + // This is needed for the above method + public static double getShopPercentage(InvItem item, int pos, boolean buy) { + int[] prices = { 0, 10, 100, 1000, 10000 }; // base prices of the items. + double[][] percentages = { { 0.5, 1.0, 1.5, 2.0 }, // in between 0 and + // 10GP. + { 0.1, 0.3, 0.45, 0.6 }, // 10-100gp + { 0.1, 0.2, 0.3, 0.4 }, // 100-1000gp + { 0.5, 0.1, 0.15, 0.2 }, // 1000-10000gp + }; + int key = -1; + for (int i = 0; i < prices.length - 1; i++) + if (item.getDef().basePrice > prices[i] + && item.getDef().basePrice < prices[i + 1]) + key = i; + if (key == -1) + return -1; + return percentages[key][pos]; + } + + /** + * Gets the smithing exp for the given amount of the right bars + */ + public static int getSmithingExp(int barID, int barCount) { + int[] exps = { 13, 25, 37, 50, 83, 74 }; + int type = getBarType(barID); + if (type < 0) { + return 0; + } + return exps[type] * barCount; + } + + public static int getStat(String stat) { + for (int i = 0; i < statArray.length; i++) { + if (statArray[i].equalsIgnoreCase(stat)) + return i; + } + + return -1; + } + + /** + * Given a stat string get its index returns -1 on failure + */ + public static int getStatIndex(String stat) { + for (int index = 0; index < statArray.length; index++) { + if (stat.equalsIgnoreCase(statArray[index])) { + return index; + } + } + return -1; + } + + public static boolean isP2P(Object... objs) { + return isP2P(false, objs); + } + + /** + * Performs coordinate checks on the locations in the P2P_LOCS array to + * decide whether items/object/npc's/general x,y coordinates are in P2P area + * + * @param objs + * - ItemLoc, GameObjectLoc, NPCLoc or an Integer. + * @return - true if inside P2P area, otherwise false. + */ + public static boolean isP2P(boolean f2pwildy, Object... objs) { + int x = -1; + int y = -1; + if (objs.length == 1) { + Object obj = objs[0]; + if (obj instanceof GameObjectLoc) { + x = ((GameObjectLoc) obj).x; + y = ((GameObjectLoc) obj).y; + } else if ((obj instanceof ItemLoc)) { + x = ((ItemLoc) obj).x; + y = ((ItemLoc) obj).y; + } else if (obj instanceof NPCLoc) { + x = ((NPCLoc) obj).startX; + y = ((NPCLoc) obj).startY; + } + } else { + if (objs[0] instanceof Integer && objs[1] instanceof Integer) { + x = (Integer) objs[0]; + y = (Integer) objs[1]; + } + } + + if (x == -1) + return false; + if (!f2pwildy) { + for (int i = 0; i < P2P_LOCS.length; i++) { + for (int ele = 0; ele < 4; ele++) { + if (x >= P2P_LOCS[i][0].getX() + && x <= P2P_LOCS[i][1].getX() + && y >= P2P_LOCS[i][0].getY() + ((ele) * 944) + && y <= P2P_LOCS[i][1].getY() + ((ele) * 944)) + return true; + } + } + } else { + for (int i = 0; i < F2PWILD_LOCS.length; i++) { + for (int ele = 0; ele < 4; ele++) { + if (x >= F2PWILD_LOCS[i][0].getX() + && x <= F2PWILD_LOCS[i][1].getX() + && y >= F2PWILD_LOCS[i][0].getY() + ((ele) * 944) + && y <= F2PWILD_LOCS[i][1].getY() + ((ele) * 944)) + return true; + } + } + } + return false; + } + + public static int levelToExperience(int level) { + if (level <= 1) + return 0; + + return experienceArray[level]; + } + + /** + * Should the fire light or fail? + */ + public static boolean lightLogs(FiremakingDef def, int firemakingLvl) { + int levelDiff = firemakingLvl - def.getRequiredLevel(); + if (levelDiff < 0) { + return false; + } + if (levelDiff >= 20) { + return true; + } + return DataConversions.random(0, levelDiff + 1) != 0; + } + + // maxHit + /** + * Should the arrow be dropped or disappear + */ + public static boolean looseArrow(int damage) { + return DataConversions.random(0, 6) == 0; + } + + /** + * Calculate the max hit possible with the given stats + */ + public static int maxHit(int strength, int weaponPower, boolean burst, + boolean superhuman, boolean ultimate, int bonus) { + double newStrength = (double) ((strength * addPrayers(burst, + superhuman, ultimate)) + bonus); + + int fin = (int) ((newStrength + * ((((double) weaponPower * 0.00175D) + 0.1D)) + 1.05D) * 0.95D); + // if (fin > 31) + // fin = 31; + return fin; + + } + + /** + * Gets the min level required to smith a bar + */ + public static int minSmithingLevel(int barID) { + int[] levels = { 1, 15, 30, 50, 70, 85 }; + int type = getBarType(barID); + if (type < 0) { + return -1; + } + return levels[type]; + } + + public static boolean objectAtFacing(Entity e, int x, int y, int dir) { + if (dir >= 0 && e instanceof GameObject) { + GameObject obj = (GameObject) e; + return obj.getType() == 0 && obj.getDirection() == dir + && obj.isOn(x, y); + } + return false; + } + + private static int offsetToPercent(int levelDiff) { + return levelDiff > 40 ? 70 : 30 + levelDiff; + } + + /** + * Calulates what one mob should hit on another with meelee + */ + public static double parseDouble(double number) { + String numberString = String.valueOf(number); + return Double.valueOf(numberString.substring(0, + numberString.indexOf(".") + 2)); + } + + public static int Rand(int low, int high) { + return low + r.nextInt(high - low); + } + + public static int styleBonus(Mob mob, int skill) { + int style = mob.getCombatStyle(); + if (style == 0) { + return 1; + } + return (skill == 0 && style == 2) || (skill == 1 && style == 3) + || (skill == 2 && style == 1) ? 3 : 0; + } + + public static int[] rares = new int[] { 828, 831, 832, 575, 576, 577, 578, + 579, 580, 581, 971, 1316, 1315, 1314, 422, 1289, 1156, 677 }; + public static boolean isRareItem(int id) { - return DataConversions.inArray(rares,id); + return DataConversions.inArray(rares, id); } - public static int getBarIdFromItem(int itemID) { - if(DataConversions.inArray(BRONZE, itemID)) - return 169; - if(DataConversions.inArray(IRON, itemID)) - return 170; - if(DataConversions.inArray(STEEL, itemID)) - return 171; - if(DataConversions.inArray(MITH, itemID)) - return 173; - if(DataConversions.inArray(ADDY, itemID)) - return 174; - if(DataConversions.inArray(RUNE, itemID)) - return 408; - return -1; - } - public final static int[] IRON = {6,5,7,8,2,3,9,28, 1075,1, 71, 83, 77, 12, 1258, 89, 0, 670, 1063}; - public final static int[] RUNE = {112, 399, 400, 401, 404, 403, 402, 396, 1080, 397, 75, 398, 81, 405, 1262, 93, 98, 674, 1067}; - public final static int[] ADDY = {111, 107, 116, 120, 131, 127, 123, 65, 1079, 69, 74, 86, 80, 204, 1261, 92, 97, 673, 1066}; - public final static int[] MITH = {110, 106, 115, 119, 130, 126, 122, 64, 1078, 68, 73, 85, 79, 203, 1260, 91, 96, 672, 1065}; - public final static int[] STEEL = {109, 105, 114, 118, 129, 125, 121, 63, 1077, 67, 72, 84, 78, 88, 1259, 90, 95, 671, 1064}; - public final static int[] BRONZE = {108, 104, 113, 117, 128, 124, 206, 62, 1076, 66, 70, 82, 76, 87, 156, 87, 205, 669, 1062}; + public static int getBarIdFromItem(int itemID) { + if (DataConversions.inArray(BRONZE, itemID)) + return 169; + if (DataConversions.inArray(IRON, itemID)) + return 170; + if (DataConversions.inArray(STEEL, itemID)) + return 171; + if (DataConversions.inArray(MITH, itemID)) + return 173; + if (DataConversions.inArray(ADDY, itemID)) + return 174; + if (DataConversions.inArray(RUNE, itemID)) + return 408; + return -1; + } + + public final static int[] IRON = { 6, 5, 7, 8, 2, 3, 9, 28, 1075, 1, 71, + 83, 77, 12, 1258, 89, 0, 670, 1063 }; + public final static int[] RUNE = { 112, 399, 400, 401, 404, 403, 402, 396, + 1080, 397, 75, 398, 81, 405, 1262, 93, 98, 674, 1067 }; + public final static int[] ADDY = { 111, 107, 116, 120, 131, 127, 123, 65, + 1079, 69, 74, 86, 80, 204, 1261, 92, 97, 673, 1066 }; + public final static int[] MITH = { 110, 106, 115, 119, 130, 126, 122, 64, + 1078, 68, 73, 85, 79, 203, 1260, 91, 96, 672, 1065 }; + public final static int[] STEEL = { 109, 105, 114, 118, 129, 125, 121, 63, + 1077, 67, 72, 84, 78, 88, 1259, 90, 95, 671, 1064 }; + public final static int[] BRONZE = { 108, 104, 113, 117, 128, 124, 206, 62, + 1076, 66, 70, 82, 76, 87, 156, 87, 205, 669, 1062 }; } diff --git a/GameServer/src/org/moparscape/msc/gs/Instance.java b/GameServer/src/org/moparscape/msc/gs/Instance.java index eb3c231..b65d754 100644 --- a/GameServer/src/org/moparscape/msc/gs/Instance.java +++ b/GameServer/src/org/moparscape/msc/gs/Instance.java @@ -14,23 +14,23 @@ import org.moparscape.msc.gs.plugins.dependencies.PluginHandler; */ public class Instance { - public static Server getServer() { - return World.getWorld().getServer(); - } + public static Server getServer() { + return World.getWorld().getServer(); + } - public static World getWorld() { - return World.getWorld(); - } + public static World getWorld() { + return World.getWorld(); + } - public static DelayedEventHandler getDelayedEventHandler() { - return getWorld().getDelayedEventHandler(); - } + public static DelayedEventHandler getDelayedEventHandler() { + return getWorld().getDelayedEventHandler(); + } - public static PluginHandler getPluginHandler() { - return PluginHandler.getPluginHandler(); - } - - public static ReportHandlerQueries getReport() { - return DBConnection.getReport(); - } + public static PluginHandler getPluginHandler() { + return PluginHandler.getPluginHandler(); + } + + public static ReportHandlerQueries getReport() { + return DBConnection.getReport(); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/Server.java b/GameServer/src/org/moparscape/msc/gs/Server.java index 8b59af9..342d396 100644 --- a/GameServer/src/org/moparscape/msc/gs/Server.java +++ b/GameServer/src/org/moparscape/msc/gs/Server.java @@ -12,7 +12,6 @@ import org.apache.mina.transport.socket.nio.SocketAcceptor; import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; import org.apache.mina.transport.socket.nio.SocketSessionConfig; import org.moparscape.msc.config.Config; -import org.moparscape.msc.config.Constants; import org.moparscape.msc.gs.connection.RSCConnectionHandler; import org.moparscape.msc.gs.connection.filter.ConnectionFilter; import org.moparscape.msc.gs.core.GameEngine; @@ -40,7 +39,7 @@ public class Server { configFile = f.getName(); } } - + Config.initConfig(configFile); world = Instance.getWorld(); world.wl.loadObjects(); diff --git a/GameServer/src/org/moparscape/msc/gs/builders/GameObjectPositionPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/GameObjectPositionPacketBuilder.java index 975a522..f958708 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/GameObjectPositionPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/GameObjectPositionPacketBuilder.java @@ -8,49 +8,52 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.StatefulEntityCollection; - public class GameObjectPositionPacketBuilder { - private Player playerToUpdate; + private Player playerToUpdate; - public RSCPacket getPacket() { - StatefulEntityCollection watchedObjects = playerToUpdate.getWatchedObjects(); - if (watchedObjects.changed()) { - Collection newObjects = watchedObjects.getNewEntities(); - Collection knownObjets = watchedObjects.getKnownEntities(); - RSCPacketBuilder packet = new RSCPacketBuilder(); - packet.setID(27); - for (GameObject o : knownObjets) { - if (o.getType() != 0) { - continue; + public RSCPacket getPacket() { + StatefulEntityCollection watchedObjects = playerToUpdate + .getWatchedObjects(); + if (watchedObjects.changed()) { + Collection newObjects = watchedObjects.getNewEntities(); + Collection knownObjets = watchedObjects + .getKnownEntities(); + RSCPacketBuilder packet = new RSCPacketBuilder(); + packet.setID(27); + for (GameObject o : knownObjets) { + if (o.getType() != 0) { + continue; + } + // We should remove ones miles away differently I think + if (watchedObjects.isRemoving(o)) { + byte[] offsets = DataConversions.getObjectPositionOffsets( + o.getLocation(), playerToUpdate.getLocation()); + packet.addShort(60000); + packet.addByte(offsets[0]); + packet.addByte(offsets[1]); + packet.addByte((byte) o.getDirection()); + } + } + for (GameObject o : newObjects) { + if (o.getType() != 0) { + continue; + } + byte[] offsets = DataConversions.getObjectPositionOffsets( + o.getLocation(), playerToUpdate.getLocation()); + packet.addShort(o.getID()); + packet.addByte(offsets[0]); + packet.addByte(offsets[1]); + packet.addByte((byte) o.getDirection()); + } + return packet.toPacket(); } - // We should remove ones miles away differently I think - if (watchedObjects.isRemoving(o)) { - byte[] offsets = DataConversions.getObjectPositionOffsets(o.getLocation(), playerToUpdate.getLocation()); - packet.addShort(60000); - packet.addByte(offsets[0]); - packet.addByte(offsets[1]); - packet.addByte((byte) o.getDirection()); - } - } - for (GameObject o : newObjects) { - if (o.getType() != 0) { - continue; - } - byte[] offsets = DataConversions.getObjectPositionOffsets(o.getLocation(), playerToUpdate.getLocation()); - packet.addShort(o.getID()); - packet.addByte(offsets[0]); - packet.addByte(offsets[1]); - packet.addByte((byte) o.getDirection()); - } - return packet.toPacket(); + return null; } - return null; - } - /** - * Sets the player to update - */ - public void setPlayer(Player p) { - playerToUpdate = p; - } + /** + * Sets the player to update + */ + public void setPlayer(Player p) { + playerToUpdate = p; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/ItemPositionPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/ItemPositionPacketBuilder.java index 91d05db..299635f 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/ItemPositionPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/ItemPositionPacketBuilder.java @@ -8,49 +8,51 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.StatefulEntityCollection; - public class ItemPositionPacketBuilder { - private Player playerToUpdate; + private Player playerToUpdate; - public RSCPacket getPacket() { - StatefulEntityCollection watchedItems = playerToUpdate.getWatchedItems(); - if (watchedItems.changed()) { - Collection newItems = watchedItems.getNewEntities(); - Collection knownItems = watchedItems.getKnownEntities(); - RSCPacketBuilder packet = new RSCPacketBuilder(); - packet.setID(109); + public RSCPacket getPacket() { + StatefulEntityCollection watchedItems = playerToUpdate + .getWatchedItems(); + if (watchedItems.changed()) { + Collection newItems = watchedItems.getNewEntities(); + Collection knownItems = watchedItems.getKnownEntities(); + RSCPacketBuilder packet = new RSCPacketBuilder(); + packet.setID(109); - for (Item i : knownItems) { - // nextTo - if (watchedItems.isRemoving(i)) { - byte[] offsets = DataConversions.getObjectPositionOffsets(i.getLocation(), playerToUpdate.getLocation()); - // if(it's miles away) { - // packet.addByte((byte)255); - // packet.addByte((byte)sectionX); - // packet.addByte((byte)sectionY); - // } - // else { - packet.addShort(i.getID() + 32768); - packet.addByte(offsets[0]); - packet.addByte(offsets[1]); - // } + for (Item i : knownItems) { + // nextTo + if (watchedItems.isRemoving(i)) { + byte[] offsets = DataConversions.getObjectPositionOffsets( + i.getLocation(), playerToUpdate.getLocation()); + // if(it's miles away) { + // packet.addByte((byte)255); + // packet.addByte((byte)sectionX); + // packet.addByte((byte)sectionY); + // } + // else { + packet.addShort(i.getID() + 32768); + packet.addByte(offsets[0]); + packet.addByte(offsets[1]); + // } + } + } + for (Item i : newItems) { + byte[] offsets = DataConversions.getObjectPositionOffsets( + i.getLocation(), playerToUpdate.getLocation()); + packet.addShort(i.getID()); + packet.addByte(offsets[0]); + packet.addByte(offsets[1]); + } + return packet.toPacket(); } - } - for (Item i : newItems) { - byte[] offsets = DataConversions.getObjectPositionOffsets(i.getLocation(), playerToUpdate.getLocation()); - packet.addShort(i.getID()); - packet.addByte(offsets[0]); - packet.addByte(offsets[1]); - } - return packet.toPacket(); + return null; } - return null; - } - /** - * Sets the player to update - */ - public void setPlayer(Player p) { - playerToUpdate = p; - } + /** + * Sets the player to update + */ + public void setPlayer(Player p) { + playerToUpdate = p; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/LSPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/LSPacketBuilder.java index 5433ffa..902a7f4 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/LSPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/LSPacketBuilder.java @@ -6,59 +6,60 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.tools.DataConversions; public class LSPacketBuilder extends StaticPacketBuilder { - /** - * ID of the packet - */ - private int pID = 0; - /** - * UID of the packet - */ - private long uID = 0; + /** + * ID of the packet + */ + private int pID = 0; + /** + * UID of the packet + */ + private long uID = 0; - /** - * Sets the handler for this packet. - * - * @param handler - * The handler of the packet - */ - public LSPacketBuilder setHandler(LoginConnector connector, PacketHandler handler) { - uID = DataConversions.getRandom().nextLong(); - connector.setHandler(uID, handler); - return this; - } + /** + * Sets the handler for this packet. + * + * @param handler + * The handler of the packet + */ + public LSPacketBuilder setHandler(LoginConnector connector, + PacketHandler handler) { + uID = DataConversions.getRandom().nextLong(); + connector.setHandler(uID, handler); + return this; + } - /** - * Sets the ID for this packet. - * - * @param id - * The ID of the packet - */ - public LSPacketBuilder setID(int pID) { - this.pID = pID; - return this; - } + /** + * Sets the ID for this packet. + * + * @param id + * The ID of the packet + */ + public LSPacketBuilder setID(int pID) { + this.pID = pID; + return this; + } - /** - * Sets the uID for this packet. - * - * @param id - * The uID of the packet - */ - public LSPacketBuilder setUID(long uID) { - this.uID = uID; - return this; - } + /** + * Sets the uID for this packet. + * + * @param id + * The uID of the packet + */ + public LSPacketBuilder setUID(long uID) { + this.uID = uID; + return this; + } - /** - * Returns a LSPacket object for the data contained in this - * builder. - * - * @return A LSPacket object - */ - public LSPacket toPacket() { - byte[] data = new byte[curLength]; - System.arraycopy(payload, 0, data, 0, curLength); - return new LSPacket(null, pID, uID, data, bare); - } + /** + * Returns a LSPacket object for the data contained in this + * builder. + * + * @return A LSPacket object + */ + public LSPacket toPacket() { + byte[] data = new byte[curLength]; + System.arraycopy(payload, 0, data, 0, curLength); + return new LSPacket(null, pID, uID, data, bare); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/builders/MiscPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/MiscPacketBuilder.java index 38f0198..4b2dec7 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/MiscPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/MiscPacketBuilder.java @@ -17,719 +17,718 @@ import org.moparscape.msc.gs.model.Shop; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.quest.Quest; - public class MiscPacketBuilder { - /** - * List of packets waiting to be sent to the user - */ - private java.util.List packets = new java.util.ArrayList(); - /** - * The player we are creating packets for - */ - private Player player; // getArmourPoints - /** - * The World instance - */ - private World world = Instance.getWorld(); + /** + * List of packets waiting to be sent to the user + */ + private java.util.List packets = new java.util.ArrayList(); + /** + * The player we are creating packets for + */ + private Player player; // getArmourPoints - /** - * Constructs a new MiscPacketBuilder - */ - public MiscPacketBuilder(Player player) { - this.player = player; - } - - /** - * Clears old packets that have already been sent - */ - public void clearPackets() { - packets.clear(); - } - - /** - * Gets a List of new packets since the last update - */ - public List getPackets() { - return packets; - } - - /** - * Hides the bank windows - */ - public void hideBank() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(171); - packets.add(s.toPacket()); - } - - /** - * Hides a question menu - */ - public void hideMenu() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(127); - packets.add(s.toPacket()); - } - - // rade - /** - * Hides the shop window - */ - public void hideShop() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(220); - packets.add(s.toPacket()); - } - - /** - * Sends a message box - */ - public void sendAlert(String message, boolean big) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(big ? 64 : 148); - s.addBytes(message.getBytes()); - packets.add(s.toPacket()); - } - - public void sendAppearanceScreen() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(207); - packets.add(s.toPacket()); - } - - /** - * Deny logging out - */ - public void sendCantLogout() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(136); - packets.add(s.toPacket()); - } - - /** - * Sends the players combat style - */ - public void sendCombatStyle() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(129); - s.addByte((byte) player.getCombatStyle()); - packets.add(s.toPacket()); - } - - /** - * Alert the client that they just died - */ - public void sendDied() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(165); - packets.add(s.toPacket()); - } - - public void sendDuelAccept() { - Player with = player.getWishToDuel(); - if (with == null) { // This shouldn't happen - return; - } - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(147); - s.addLong(with.getUsernameHash()); - s.addByte((byte) with.getDuelOffer().size()); - for (InvItem item : with.getDuelOffer()) { - s.addShort(item.getID()); - s.addInt(item.getAmount()); - } - s.addByte((byte) player.getDuelOffer().size()); - for (InvItem item : player.getDuelOffer()) { - s.addShort(item.getID()); - s.addInt(item.getAmount()); + /** + * Constructs a new MiscPacketBuilder + */ + public MiscPacketBuilder(Player player) { + this.player = player; } - s.addByte((byte) (player.getDuelSetting(0) ? 1 : 0)); // duelCantRetreat - // = data[i7++] - // & 0xff; - s.addByte((byte) (player.getDuelSetting(1) ? 1 : 0)); // duelUseMagic = - // data[i7++] & - // 0xff; - s.addByte((byte) (player.getDuelSetting(2) ? 1 : 0)); // duelUsePrayer = - // data[i7++] & - // 0xff; - s.addByte((byte) (player.getDuelSetting(3) ? 1 : 0)); // duelUseWeapons - // = data[i7++] - // & 0xff; - - packets.add(s.toPacket()); - } - - public void sendDuelAcceptUpdate() { - Player with = player.getWishToDuel(); - if (with == null) { // This shouldn't happen - return; + /** + * Clears old packets that have already been sent + */ + public void clearPackets() { + packets.clear(); } - RSCPacketBuilder s1 = new RSCPacketBuilder(); - s1.setID(97); - s1.addByte((byte) (player.isDuelOfferAccepted() ? 1 : 0)); - packets.add(s1.toPacket()); - RSCPacketBuilder s2 = new RSCPacketBuilder(); - s2.setID(65); - s2.addByte((byte) (with.isDuelOfferAccepted() ? 1 : 0)); - packets.add(s2.toPacket()); - } - - public void sendDuelItems() { - Player with = player.getWishToDuel(); - if (with == null) { // This shouldn't happen - return; + /** + * Gets a List of new packets since the last update + */ + public List getPackets() { + return packets; } - ArrayList items = with.getDuelOffer(); - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(63); - s.addByte((byte) items.size()); - for (InvItem item : items) { - s.addShort(item.getID()); - s.addInt(item.getAmount()); + + /** + * Hides the bank windows + */ + public void hideBank() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(171); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - public void sendDuelSettingUpdate() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(198); - s.addByte((byte) (player.getDuelSetting(0) ? 1 : 0)); - s.addByte((byte) (player.getDuelSetting(1) ? 1 : 0)); - s.addByte((byte) (player.getDuelSetting(2) ? 1 : 0)); - s.addByte((byte) (player.getDuelSetting(3) ? 1 : 0)); - packets.add(s.toPacket()); - }// sendSound - - public void sendDuelWindowClose() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(160); - packets.add(s.toPacket()); - } - - public void sendDuelWindowOpen() { - Player with = player.getWishToDuel(); - if (with == null) { // This shouldn't happen - return; + /** + * Hides a question menu + */ + public void hideMenu() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(127); + packets.add(s.toPacket()); } - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(229); - s.addShort(with.getIndex()); - packets.add(s.toPacket()); - } - /** - * Enter Sleep - */ - public void sendEnterSleep() { - player.isSleeping = true; - byte[] image = GameEngine.getCaptcha().generateCaptcha(player); - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(206); - s.addBytes(image, 0, image.length); - packets.add(s.toPacket()); - } - - /** - * Updates the equipment status - */ - public void sendEquipmentStats() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(177); - s.addShort(player.getArmourPoints()); - s.addShort(player.getWeaponAimPoints()); - s.addShort(player.getWeaponPowerPoints()); - s.addShort(player.getMagicPoints()); - s.addShort(player.getPrayerPoints()); - s.addShort(player.getRangePoints()); - packets.add(s.toPacket()); - } - - /** - * Updates the fatigue percentage - */ - public void sendFatigue() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(126); - s.addShort(player.getFatigue()); - packets.add(s.toPacket()); - } - - /** - * Sends the whole friendlist - */ - public void sendFriendList() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(249); - s.addByte((byte) player.getFriendList().size()); - for (Entry friend : player.getFriendList()) { - int world = friend.getValue(); - s.addLong(friend.getKey()); - s.addByte((byte) (world == Config.SERVER_NUM ? 99 : world)); + // rade + /** + * Hides the shop window + */ + public void hideShop() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(220); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - /** - * Updates a friends login status - */ - public void sendFriendUpdate(long usernameHash, int world) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(25); - s.addLong(usernameHash); - s.addByte((byte) (world == Config.SERVER_NUM ? 99 : world)); - packets.add(s.toPacket()); - } - - /** - * Updates game settings, ie sound effects etc - */ - public void sendGameSettings() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(152); - s.addByte((byte) (player.getGameSetting(0) ? 1 : 0)); - s.addByte((byte) (player.getGameSetting(2) ? 1 : 0)); - s.addByte((byte) (player.getGameSetting(3) ? 1 : 0)); - s.addByte((byte) (player.getGameSetting(4) ? 1 : 0)); - s.addByte((byte) (player.getGameSetting(5) ? 1 : 0)); - s.addByte((byte) (player.getGameSetting(6) ? 1 : 0)); - packets.add(s.toPacket()); - } - - /** - * Sends the whole ignore list - */ - public void sendIgnoreList() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(2); - s.addByte((byte) player.getIgnoreList().size()); - for (Long usernameHash : player.getIgnoreList()) { - s.addLong(usernameHash.longValue()); + /** + * Sends a message box + */ + public void sendAlert(String message, boolean big) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(big ? 64 : 148); + s.addBytes(message.getBytes()); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - /** - * Incorrect sleep word! - */ - public void sendIncorrectSleepword() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(225); - packets.add(s.toPacket()); - } - - public void sendInfo2() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(211); - packets.add(s.toPacket()); - } - - public void sendInventory() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(114); - s.addByte((byte) player.getInventory().size()); - for (InvItem item : player.getInventory().getItems()) { - s.addShort(item.getID() + (item.isWielded() ? 32768 : 0)); - if (item.getDef().isStackable()) { - s.addInt(item.getAmount()); - } + public void sendAppearanceScreen() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(207); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - /** - * Displays the login box and last IP and login date - */ - public void sendLoginBox() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(248); - s.addShort(player.getDaysSinceLastLogin()); - s.addShort(player.getDaysSubscriptionLeft()); - s.addBytes(player.getLastIP().getBytes()); - packets.add(s.toPacket()); - } + /** + * Deny logging out + */ + public void sendCantLogout() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(136); + packets.add(s.toPacket()); + } - /** - * Confirm logout allowed - */ - public RSCPacket sendLogout() { + /** + * Sends the players combat style + */ + public void sendCombatStyle() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(129); + s.addByte((byte) player.getCombatStyle()); + packets.add(s.toPacket()); + } + + /** + * Alert the client that they just died + */ + public void sendDied() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(165); + packets.add(s.toPacket()); + } + + public void sendDuelAccept() { + Player with = player.getWishToDuel(); + if (with == null) { // This shouldn't happen + return; + } + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(147); + s.addLong(with.getUsernameHash()); + s.addByte((byte) with.getDuelOffer().size()); + for (InvItem item : with.getDuelOffer()) { + s.addShort(item.getID()); + s.addInt(item.getAmount()); + } + s.addByte((byte) player.getDuelOffer().size()); + for (InvItem item : player.getDuelOffer()) { + s.addShort(item.getID()); + s.addInt(item.getAmount()); + } + + s.addByte((byte) (player.getDuelSetting(0) ? 1 : 0)); // duelCantRetreat + // = data[i7++] + // & 0xff; + s.addByte((byte) (player.getDuelSetting(1) ? 1 : 0)); // duelUseMagic = + // data[i7++] & + // 0xff; + s.addByte((byte) (player.getDuelSetting(2) ? 1 : 0)); // duelUsePrayer = + // data[i7++] & + // 0xff; + s.addByte((byte) (player.getDuelSetting(3) ? 1 : 0)); // duelUseWeapons + // = data[i7++] + // & 0xff; + + packets.add(s.toPacket()); + } + + public void sendDuelAcceptUpdate() { + Player with = player.getWishToDuel(); + if (with == null) { // This shouldn't happen + return; + } + RSCPacketBuilder s1 = new RSCPacketBuilder(); + s1.setID(97); + s1.addByte((byte) (player.isDuelOfferAccepted() ? 1 : 0)); + packets.add(s1.toPacket()); + + RSCPacketBuilder s2 = new RSCPacketBuilder(); + s2.setID(65); + s2.addByte((byte) (with.isDuelOfferAccepted() ? 1 : 0)); + packets.add(s2.toPacket()); + } + + public void sendDuelItems() { + Player with = player.getWishToDuel(); + if (with == null) { // This shouldn't happen + return; + } + ArrayList items = with.getDuelOffer(); + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(63); + s.addByte((byte) items.size()); + for (InvItem item : items) { + s.addShort(item.getID()); + s.addInt(item.getAmount()); + } + packets.add(s.toPacket()); + } + + public void sendDuelSettingUpdate() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(198); + s.addByte((byte) (player.getDuelSetting(0) ? 1 : 0)); + s.addByte((byte) (player.getDuelSetting(1) ? 1 : 0)); + s.addByte((byte) (player.getDuelSetting(2) ? 1 : 0)); + s.addByte((byte) (player.getDuelSetting(3) ? 1 : 0)); + packets.add(s.toPacket()); + }// sendSound + + public void sendDuelWindowClose() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(160); + packets.add(s.toPacket()); + } + + public void sendDuelWindowOpen() { + Player with = player.getWishToDuel(); + if (with == null) { // This shouldn't happen + return; + } + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(229); + s.addShort(with.getIndex()); + packets.add(s.toPacket()); + } + + /** + * Enter Sleep + */ + public void sendEnterSleep() { + player.setSleeping(true); + byte[] image = GameEngine.getCaptcha().generateCaptcha(player); + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(206); + s.addBytes(image, 0, image.length); + packets.add(s.toPacket()); + } + + /** + * Updates the equipment status + */ + public void sendEquipmentStats() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(177); + s.addShort(player.getArmourPoints()); + s.addShort(player.getWeaponAimPoints()); + s.addShort(player.getWeaponPowerPoints()); + s.addShort(player.getMagicPoints()); + s.addShort(player.getPrayerPoints()); + s.addShort(player.getRangePoints()); + packets.add(s.toPacket()); + } + + /** + * Updates the fatigue percentage + */ + public void sendFatigue() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(126); + s.addShort(player.getFatigue()); + packets.add(s.toPacket()); + } + + /** + * Sends the whole friendlist + */ + public void sendFriendList() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(249); + s.addByte((byte) player.getFriendList().size()); + for (Entry friend : player.getFriendList()) { + int world = friend.getValue(); + s.addLong(friend.getKey()); + s.addByte((byte) (world == Config.SERVER_NUM ? 99 : world)); + } + packets.add(s.toPacket()); + } + + /** + * Updates a friends login status + */ + public void sendFriendUpdate(long usernameHash, int world) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(25); + s.addLong(usernameHash); + s.addByte((byte) (world == Config.SERVER_NUM ? 99 : world)); + packets.add(s.toPacket()); + } + + /** + * Updates game settings, ie sound effects etc + */ + public void sendGameSettings() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(152); + s.addByte((byte) (player.getGameSetting(0) ? 1 : 0)); + s.addByte((byte) (player.getGameSetting(2) ? 1 : 0)); + s.addByte((byte) (player.getGameSetting(3) ? 1 : 0)); + s.addByte((byte) (player.getGameSetting(4) ? 1 : 0)); + s.addByte((byte) (player.getGameSetting(5) ? 1 : 0)); + s.addByte((byte) (player.getGameSetting(6) ? 1 : 0)); + packets.add(s.toPacket()); + } + + /** + * Sends the whole ignore list + */ + public void sendIgnoreList() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(2); + s.addByte((byte) player.getIgnoreList().size()); + for (Long usernameHash : player.getIgnoreList()) { + s.addLong(usernameHash.longValue()); + } + packets.add(s.toPacket()); + } + + /** + * Incorrect sleep word! + */ + public void sendIncorrectSleepword() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(225); + packets.add(s.toPacket()); + } + + public void sendInfo2() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(211); + packets.add(s.toPacket()); + } + + public void sendInventory() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(114); + s.addByte((byte) player.getInventory().size()); + for (InvItem item : player.getInventory().getItems()) { + s.addShort(item.getID() + (item.isWielded() ? 32768 : 0)); + if (item.getDef().isStackable()) { + s.addInt(item.getAmount()); + } + } + packets.add(s.toPacket()); + } + + /** + * Displays the login box and last IP and login date + */ + public void sendLoginBox() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(248); + s.addShort(player.getDaysSinceLastLogin()); + s.addShort(player.getDaysSubscriptionLeft()); + s.addBytes(player.getLastIP().getBytes()); + packets.add(s.toPacket()); + } + + /** + * Confirm logout allowed + */ + public RSCPacket sendLogout() { RSCPacketBuilder s = new RSCPacketBuilder(); s.setID(222); RSCPacket packet = s.toPacket(); packets.add(packet); return packet; - } - - /** - * Shows a question menu - */ - public void sendMenu(String[] options) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(223); - s.addByte((byte) options.length); - for (String option : options) { - s.addByte((byte) option.length()); - s.addBytes(option.getBytes()); } - packets.add(s.toPacket()); - } - public void sendMessage(String message) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(48); - s.addBytes(message.getBytes()); - packets.add(s.toPacket()); - } - - public void sendOnlinePlayers() { - this.sendMessage("@yel@Players Online: @whi@" + (int)(Instance.getWorld().getPlayers().size() * 1.1) + " @yel@Accepted Connections: @whi@" + Constants.GameServer.ACCEPTED_CONNECTIONS); - } - - /** - * Sends the prayer list of activated/deactivated prayers - */ - public void sendPrayers() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(209); - for (int x = 0; x < 14; x++) { - s.addByte((byte) (player.isPrayerActivated(x) ? 1 : 0)); - } - packets.add(s.toPacket()); - } - - - - /** - * Updates privacy settings, ie pm block etc - */ - public void sendPrivacySettings() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(158); - s.addByte((byte) (player.getPrivacySetting(0) ? 1 : 0)); - s.addByte((byte) (player.getPrivacySetting(1) ? 1 : 0)); - s.addByte((byte) (player.getPrivacySetting(2) ? 1 : 0)); - s.addByte((byte) (player.getPrivacySetting(3) ? 1 : 0)); - packets.add(s.toPacket()); - } - - /** - * Send a private message - */ - public void sendPrivateMessage(long usernameHash, byte[] message) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(170); - s.addLong(usernameHash); - s.addBytes(message); - packets.add(s.toPacket()); - } - - /** - * Sends base quest information - */ - public void sendQuestData() { - /* - * RSCPacketBuilder s = new RSCPacketBuilder(); s.setID(233); - * s.addByte((byte)player.getQuestPoints()); int size = - * world.getQuestManager().getQuests().size(); s.addByte((byte)size); - * for (int i = 0; i < size; i++) { Quest quest = - * world.getQuestManager().getQuests().get(i); - * s.addByte((byte)quest.getUniqueID()); Integer objectInteger = - * player.getQuestStages().get(quest.getUniqueID()); if - * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2); - * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else - * s.addByte((byte) 0); } - * - * packets.add(s.toPacket()); + /** + * Shows a question menu */ - } - - // ATTACKER - /** - * Sends this player's quest info - */ - public void sendQuestInfo() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(233); - s.addByte((byte) player.getQuestPoints()); - int size = world.getQuestManager().getQuests().size(); - s.addByte((byte) size); - for (int i = 0; i < size; i++) { - Quest quest = world.getQuestManager().getQuests().get(i); - s.addByte((byte) quest.getUniqueID()); - Integer objectInteger = player.getQuestStages().get(quest.getUniqueID()); - if (objectInteger.intValue() == Quest.COMPLETE) - s.addByte((byte) 2); - else if (objectInteger.intValue() >= 1) - s.addByte((byte) 1); - else - s.addByte((byte) 0); + public void sendMenu(String[] options) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(223); + s.addByte((byte) options.length); + for (String option : options) { + s.addByte((byte) option.length()); + s.addBytes(option.getBytes()); + } + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - /* - * RSCPacketBuilder s = new RSCPacketBuilder(); // setID(183) - * s.setID(233); s.addByte((byte)player.getQuestPoints()); HashMap qs = - * player.getQuestStages(); Set set = qs.entrySet(); Iterator i = - * set.iterator(); int idx = 0; - * - * while (i.hasNext()) { Map.Entry qe = (Map.Entry) i.next(); Integer - * objectInteger = (Integer) qe.getValue(); s.addByte() if - * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2); - * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else - * s.addByte((byte) 0); } - * - * packets.add(s.toPacket()); + public void sendMessage(String message) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(48); + s.addBytes(message.getBytes()); + packets.add(s.toPacket()); + } + + public void sendOnlinePlayers() { + this.sendMessage("@yel@Players Online: @whi@" + + (int) (Instance.getWorld().getPlayers().size() * 1.1) + + " @yel@Accepted Connections: @whi@" + + Constants.GameServer.ACCEPTED_CONNECTIONS); + } + + /** + * Sends the prayer list of activated/deactivated prayers */ - } - - public void sendRemoveItem(int slot) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(191); - s.addByte((byte) slot); - packets.add(s.toPacket()); - } - - /** - * Tells the client to save a screenshot - */ - public void sendScreenshot() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(181); - packets.add(s.toPacket()); - } - - public void sendServerInfo() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(110); - s.addLong(Config.START_TIME); - s.addBytes(Config.SERVER_LOCATION.getBytes()); - packets.add(s.toPacket()); - } - - /** - * Sends a sound effect - */ - public void sendSound(String soundName) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(11); - s.addBytes(soundName.getBytes()); - packets.add(s.toPacket()); - } - - /** - * Updates just one stat - */ - public void sendStat(int stat) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(208); - s.addByte((byte) stat); - s.addByte((byte) player.getCurStat(stat)); - s.addByte((byte) player.getMaxStat(stat)); - s.addInt(player.getExp(stat)); - packets.add(s.toPacket()); - } - - /** - * Updates the users stats - */ - public void sendStats() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(180); - for (int lvl : player.getCurStats()) - s.addByte((byte) lvl); - for (int lvl : player.getMaxStats()) - s.addByte((byte) lvl); - for (int exp : player.getExps()) - s.addInt(exp); - packets.add(s.toPacket()); - } - - public void sendTeleBubble(int x, int y, boolean grab) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(23); - s.addByte((byte) (grab ? 1 : 0)); - s.addByte((byte) (x - player.getX())); - s.addByte((byte) (y - player.getY())); - packets.add(s.toPacket()); - } - - public void sendTradeAccept() { - Player with = player.getWishToTrade(); - if (with == null) { // This shouldn't happen - return; + public void sendPrayers() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(209); + for (int x = 0; x < 14; x++) { + s.addByte((byte) (player.isPrayerActivated(x) ? 1 : 0)); + } + packets.add(s.toPacket()); } - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(251); - s.addLong(with.getUsernameHash()); - s.addByte((byte) with.getTradeOffer().size()); - for (InvItem item : with.getTradeOffer()) { - s.addShort(item.getID()); - s.addInt(item.getAmount()); + + /** + * Updates privacy settings, ie pm block etc + */ + public void sendPrivacySettings() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(158); + s.addByte((byte) (player.getPrivacySetting(0) ? 1 : 0)); + s.addByte((byte) (player.getPrivacySetting(1) ? 1 : 0)); + s.addByte((byte) (player.getPrivacySetting(2) ? 1 : 0)); + s.addByte((byte) (player.getPrivacySetting(3) ? 1 : 0)); + packets.add(s.toPacket()); } - s.addByte((byte) player.getTradeOffer().size()); - for (InvItem item : player.getTradeOffer()) { - s.addShort(item.getID()); - s.addInt(item.getAmount()); + + /** + * Send a private message + */ + public void sendPrivateMessage(long usernameHash, byte[] message) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(170); + s.addLong(usernameHash); + s.addBytes(message); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - public void sendTradeAcceptUpdate() { - Player with = player.getWishToTrade(); - if (with == null) { // This shouldn't happen - return; + /** + * Sends base quest information + */ + public void sendQuestData() { + /* + * RSCPacketBuilder s = new RSCPacketBuilder(); s.setID(233); + * s.addByte((byte)player.getQuestPoints()); int size = + * world.getQuestManager().getQuests().size(); s.addByte((byte)size); + * for (int i = 0; i < size; i++) { Quest quest = + * world.getQuestManager().getQuests().get(i); + * s.addByte((byte)quest.getUniqueID()); Integer objectInteger = + * player.getQuestStages().get(quest.getUniqueID()); if + * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2); + * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else + * s.addByte((byte) 0); } + * + * packets.add(s.toPacket()); + */ } - RSCPacketBuilder s1 = new RSCPacketBuilder(); - s1.setID(18); - s1.addByte((byte) (player.isTradeOfferAccepted() ? 1 : 0)); - packets.add(s1.toPacket()); - RSCPacketBuilder s2 = new RSCPacketBuilder(); - s2.setID(92); - s2.addByte((byte) (with.isTradeOfferAccepted() ? 1 : 0)); - packets.add(s2.toPacket()); - } + // ATTACKER + /** + * Sends this player's quest info + */ + public void sendQuestInfo() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(233); + s.addByte((byte) player.getQuestPoints()); + int size = World.getQuestManager().getQuests().size(); + s.addByte((byte) size); + for (int i = 0; i < size; i++) { + Quest quest = World.getQuestManager().getQuests().get(i); + s.addByte((byte) quest.getUniqueID()); + Integer objectInteger = player.getQuestStages().get( + quest.getUniqueID()); + if (objectInteger.intValue() == Quest.COMPLETE) + s.addByte((byte) 2); + else if (objectInteger.intValue() >= 1) + s.addByte((byte) 1); + else + s.addByte((byte) 0); + } - public void sendTradeItems() { - Player with = player.getWishToTrade(); - if (with == null) { // This shouldn't happen - return; + packets.add(s.toPacket()); + /* + * RSCPacketBuilder s = new RSCPacketBuilder(); // setID(183) + * s.setID(233); s.addByte((byte)player.getQuestPoints()); HashMap qs = + * player.getQuestStages(); Set set = qs.entrySet(); Iterator i = + * set.iterator(); int idx = 0; + * + * while (i.hasNext()) { Map.Entry qe = (Map.Entry) i.next(); Integer + * objectInteger = (Integer) qe.getValue(); s.addByte() if + * (objectInteger.intValue() == Quest.COMPLETE) s.addByte((byte) 2); + * else if (objectInteger.intValue() >= 1) s.addByte((byte) 1); else + * s.addByte((byte) 0); } + * + * packets.add(s.toPacket()); + */ } - ArrayList items = with.getTradeOffer(); - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(250); - s.addByte((byte) items.size()); - for (InvItem item : items) { - s.addShort(item.getID()); - s.addInt(item.getAmount()); + + public void sendRemoveItem(int slot) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(191); + s.addByte((byte) slot); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - public void sendTradeWindowClose() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(187); - packets.add(s.toPacket()); - } - - public void sendTradeWindowOpen() { - Player with = player.getWishToTrade(); - if (with == null) { // This shouldn't happen - return; + /** + * Tells the client to save a screenshot + */ + public void sendScreenshot() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(181); + packets.add(s.toPacket()); } - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(4); - s.addShort(with.getIndex()); - packets.add(s.toPacket()); - } - public void sendUpdateItem(int slot) { - InvItem item = player.getInventory().get(slot); - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(228); - s.addByte((byte) slot); - s.addShort(item.getID() + (item.isWielded() ? 32768 : 0)); - if (item.getDef().isStackable()) { - s.addInt(item.getAmount()); + public void sendServerInfo() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(110); + s.addLong(Config.START_TIME); + s.addBytes(Config.SERVER_LOCATION.getBytes()); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - public void sendWakeUp(boolean heh) { - if(heh) { - player.setFatigue(0); - player.getActionSender().sendFatigue(); - player.getActionSender().sendMessage("You wake up - feeling refreshed"); + /** + * Sends a sound effect + */ + public void sendSound(String soundName) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(11); + s.addBytes(soundName.getBytes()); + packets.add(s.toPacket()); } - player.isSleeping = false; - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(224); - packets.add(s.toPacket()); - } - /* public void sendWakeUp1() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(224); - packets.add(s.toPacket()); - } - - public void sendWakeUp2() { - player.isSleeping = false; - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(224); - packets.add(s.toPacket()); - }*/ - - /** - * Sent when the user changes coords incase they moved up/down a level - */ - public void sendWorldInfo() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(131); - s.addShort(player.getIndex()); - s.addShort(2304); - s.addShort(1776); - s.addShort(Formulae.getHeight(player.getLocation())); - s.addShort(944); - packets.add(s.toPacket()); - } - - /** - * Show the bank window - */ - public void showBank() { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(93); - s.addByte((byte) player.getBank().size()); - s.addByte((byte) Bank.MAX_SIZE); - for (InvItem i : player.getBank().getItems()) { - s.addShort(i.getID()); - s.addInt(i.getAmount()); + /** + * Updates just one stat + */ + public void sendStat(int stat) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(208); + s.addByte((byte) stat); + s.addByte((byte) player.getCurStat(stat)); + s.addByte((byte) player.getMaxStat(stat)); + s.addInt(player.getExp(stat)); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - /** - * Show the bank window - */ - public void showShop(Shop shop) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(253); - s.addByte((byte) shop.size()); - s.addByte((byte) (shop.isGeneral() ? 1 : 0)); - s.addByte((byte) shop.getSellModifier()); - s.addByte((byte) shop.getBuyModifier()); - for (InvItem i : shop.getItems()) { - s.addShort(i.getID()); - s.addShort(i.getAmount()); - s.addInt(Formulae.getPrice(shop.getItems().get(Formulae.getItemPos(shop, i.getID())), shop, true)); - s.addInt(Formulae.getPrice(shop.getItems().get(Formulae.getItemPos(shop, i.getID())), shop, false)); + /** + * Updates the users stats + */ + public void sendStats() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(180); + for (int lvl : player.getCurStats()) + s.addByte((byte) lvl); + for (int lvl : player.getMaxStats()) + s.addByte((byte) lvl); + for (int exp : player.getExps()) + s.addInt(exp); + packets.add(s.toPacket()); } - packets.add(s.toPacket()); - } - /** - * Sends a system update message - */ - public void startShutdown(int seconds) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(172); - s.addShort((int) (((double) seconds / 32D) * 50)); - packets.add(s.toPacket()); - } - /** - * Updates the id and amount of an item in the bank - */ - public void updateBankItem(int slot, int newId, int amount) { - RSCPacketBuilder s = new RSCPacketBuilder(); - s.setID(139); - s.addByte((byte) slot); - s.addShort(newId); - s.addInt(amount); - packets.add(s.toPacket()); - } - public void addPacket(RSCPacket packet) { - packets.add(packet); - } + public void sendTeleBubble(int x, int y, boolean grab) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(23); + s.addByte((byte) (grab ? 1 : 0)); + s.addByte((byte) (x - player.getX())); + s.addByte((byte) (y - player.getY())); + packets.add(s.toPacket()); + } + + public void sendTradeAccept() { + Player with = player.getWishToTrade(); + if (with == null) { // This shouldn't happen + return; + } + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(251); + s.addLong(with.getUsernameHash()); + s.addByte((byte) with.getTradeOffer().size()); + for (InvItem item : with.getTradeOffer()) { + s.addShort(item.getID()); + s.addInt(item.getAmount()); + } + s.addByte((byte) player.getTradeOffer().size()); + for (InvItem item : player.getTradeOffer()) { + s.addShort(item.getID()); + s.addInt(item.getAmount()); + } + packets.add(s.toPacket()); + } + + public void sendTradeAcceptUpdate() { + Player with = player.getWishToTrade(); + if (with == null) { // This shouldn't happen + return; + } + RSCPacketBuilder s1 = new RSCPacketBuilder(); + s1.setID(18); + s1.addByte((byte) (player.isTradeOfferAccepted() ? 1 : 0)); + packets.add(s1.toPacket()); + + RSCPacketBuilder s2 = new RSCPacketBuilder(); + s2.setID(92); + s2.addByte((byte) (with.isTradeOfferAccepted() ? 1 : 0)); + packets.add(s2.toPacket()); + } + + public void sendTradeItems() { + Player with = player.getWishToTrade(); + if (with == null) { // This shouldn't happen + return; + } + ArrayList items = with.getTradeOffer(); + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(250); + s.addByte((byte) items.size()); + for (InvItem item : items) { + s.addShort(item.getID()); + s.addInt(item.getAmount()); + } + packets.add(s.toPacket()); + } + + public void sendTradeWindowClose() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(187); + packets.add(s.toPacket()); + } + + public void sendTradeWindowOpen() { + Player with = player.getWishToTrade(); + if (with == null) { // This shouldn't happen + return; + } + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(4); + s.addShort(with.getIndex()); + packets.add(s.toPacket()); + } + + public void sendUpdateItem(int slot) { + InvItem item = player.getInventory().get(slot); + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(228); + s.addByte((byte) slot); + s.addShort(item.getID() + (item.isWielded() ? 32768 : 0)); + if (item.getDef().isStackable()) { + s.addInt(item.getAmount()); + } + packets.add(s.toPacket()); + } + + public void sendWakeUp(boolean heh) { + if (heh) { + player.setFatigue(0); + player.getActionSender().sendFatigue(); + player.getActionSender().sendMessage( + "You wake up - feeling refreshed"); + } + player.setSleeping(false); + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(224); + packets.add(s.toPacket()); + } + + /* + * public void sendWakeUp1() { RSCPacketBuilder s = new RSCPacketBuilder(); + * s.setID(224); packets.add(s.toPacket()); } + * + * public void sendWakeUp2() { player.isSleeping = false; RSCPacketBuilder s + * = new RSCPacketBuilder(); s.setID(224); packets.add(s.toPacket()); } + */ + + /** + * Sent when the user changes coords incase they moved up/down a level + */ + public void sendWorldInfo() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(131); + s.addShort(player.getIndex()); + s.addShort(2304); + s.addShort(1776); + s.addShort(Formulae.getHeight(player.getLocation())); + s.addShort(944); + packets.add(s.toPacket()); + } + + /** + * Show the bank window + */ + public void showBank() { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(93); + s.addByte((byte) player.getBank().size()); + s.addByte((byte) Bank.MAX_SIZE); + for (InvItem i : player.getBank().getItems()) { + s.addShort(i.getID()); + s.addInt(i.getAmount()); + } + packets.add(s.toPacket()); + } + + /** + * Show the bank window + */ + public void showShop(Shop shop) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(253); + s.addByte((byte) shop.size()); + s.addByte((byte) (shop.isGeneral() ? 1 : 0)); + s.addByte((byte) shop.getSellModifier()); + s.addByte((byte) shop.getBuyModifier()); + for (InvItem i : shop.getItems()) { + s.addShort(i.getID()); + s.addShort(i.getAmount()); + s.addInt(Formulae.getPrice( + shop.getItems().get(Formulae.getItemPos(shop, i.getID())), + shop, true)); + s.addInt(Formulae.getPrice( + shop.getItems().get(Formulae.getItemPos(shop, i.getID())), + shop, false)); + } + packets.add(s.toPacket()); + } + + /** + * Sends a system update message + */ + public void startShutdown(int seconds) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(172); + s.addShort((int) (((double) seconds / 32D) * 50)); + packets.add(s.toPacket()); + } + + /** + * Updates the id and amount of an item in the bank + */ + public void updateBankItem(int slot, int newId, int amount) { + RSCPacketBuilder s = new RSCPacketBuilder(); + s.setID(139); + s.addByte((byte) slot); + s.addShort(newId); + s.addInt(amount); + packets.add(s.toPacket()); + } + + public void addPacket(RSCPacket packet) { + packets.add(packet); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/NpcPositionPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/NpcPositionPacketBuilder.java index 766a992..203dda2 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/NpcPositionPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/NpcPositionPacketBuilder.java @@ -8,54 +8,52 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.StatefulEntityCollection; - public class NpcPositionPacketBuilder { - private Player playerToUpdate; + private Player playerToUpdate; - public RSCPacket getPacket() { - StatefulEntityCollection watchedNpcs = playerToUpdate.getWatchedNpcs(); - Collection newNpcs = watchedNpcs.getNewEntities(); - Collection knownNpcs = watchedNpcs.getKnownEntities(); - - RSCPacketBuilder packet = new RSCPacketBuilder(); - packet.setID(77); - packet.addBits(knownNpcs.size(), 8); - for (Npc n : knownNpcs) { - packet.addBits(n.getIndex(), 16); - if (watchedNpcs.isRemoving(n)) { - packet.addBits(1, 1); - packet.addBits(1, 1); - packet.addBits(12, 4); - } - else if (n.hasMoved()) { - packet.addBits(1, 1); - packet.addBits(0, 1); - packet.addBits(n.getSprite(), 3); - } - else if (n.spriteChanged()) { - packet.addBits(1, 1); - packet.addBits(1, 1); - packet.addBits(n.getSprite(), 4); - } - else { - packet.addBits(0, 1); - } - } - for (Npc n : newNpcs) { - byte[] offsets = DataConversions.getMobPositionOffsets(n.getLocation(), playerToUpdate.getLocation()); - packet.addBits(n.getIndex(), 16); - packet.addBits(offsets[0], 5); - packet.addBits(offsets[1], 5); - packet.addBits(n.getSprite(), 4); - packet.addBits(n.getID(), 10); + public RSCPacket getPacket() { + StatefulEntityCollection watchedNpcs = playerToUpdate + .getWatchedNpcs(); + Collection newNpcs = watchedNpcs.getNewEntities(); + Collection knownNpcs = watchedNpcs.getKnownEntities(); + + RSCPacketBuilder packet = new RSCPacketBuilder(); + packet.setID(77); + packet.addBits(knownNpcs.size(), 8); + for (Npc n : knownNpcs) { + packet.addBits(n.getIndex(), 16); + if (watchedNpcs.isRemoving(n)) { + packet.addBits(1, 1); + packet.addBits(1, 1); + packet.addBits(12, 4); + } else if (n.hasMoved()) { + packet.addBits(1, 1); + packet.addBits(0, 1); + packet.addBits(n.getSprite(), 3); + } else if (n.spriteChanged()) { + packet.addBits(1, 1); + packet.addBits(1, 1); + packet.addBits(n.getSprite(), 4); + } else { + packet.addBits(0, 1); + } } - return packet.toPacket(); - } + for (Npc n : newNpcs) { + byte[] offsets = DataConversions.getMobPositionOffsets( + n.getLocation(), playerToUpdate.getLocation()); + packet.addBits(n.getIndex(), 16); + packet.addBits(offsets[0], 5); + packet.addBits(offsets[1], 5); + packet.addBits(n.getSprite(), 4); + packet.addBits(n.getID(), 10); + } + return packet.toPacket(); + } - /** - * Sets the player to update - */ - public void setPlayer(Player p) { - playerToUpdate = p; - } + /** + * Sets the player to update + */ + public void setPlayer(Player p) { + playerToUpdate = p; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/NpcUpdatePacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/NpcUpdatePacketBuilder.java index 31551e0..52c49e5 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/NpcUpdatePacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/NpcUpdatePacketBuilder.java @@ -8,66 +8,70 @@ import org.moparscape.msc.gs.model.ChatMessage; import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; - public class NpcUpdatePacketBuilder { - private Player playerToUpdate; + private Player playerToUpdate; - public RSCPacket getPacket() { - List npcsNeedingHitsUpdate = playerToUpdate.getNpcsRequiringHitsUpdate(); - List npcMessagesNeedingDisplayed = playerToUpdate.getNpcMessagesNeedingDisplayed(); + public RSCPacket getPacket() { + List npcsNeedingHitsUpdate = playerToUpdate + .getNpcsRequiringHitsUpdate(); + List npcMessagesNeedingDisplayed = playerToUpdate + .getNpcMessagesNeedingDisplayed(); - int updateSize = npcMessagesNeedingDisplayed.size() + npcsNeedingHitsUpdate.size(); - if (updateSize > 0) { - try { - RSCPacketBuilder updates = new RSCPacketBuilder(); - updates.setID(190); - updates.addShort(updateSize); - for (ChatMessage cm : npcMessagesNeedingDisplayed) { + int updateSize = npcMessagesNeedingDisplayed.size() + + npcsNeedingHitsUpdate.size(); + if (updateSize > 0) { + try { + RSCPacketBuilder updates = new RSCPacketBuilder(); + updates.setID(190); + updates.addShort(updateSize); + for (ChatMessage cm : npcMessagesNeedingDisplayed) { updates.addShort(cm.getSender().getIndex()); updates.addByte((byte) 1); updates.addShort(cm.getRecipient().getIndex()); updates.addByte((byte) cm.getLength()); updates.addBytes(cm.getMessage()); // show text above heads of players around - if (cm.getRecipient() != null && cm.getRecipient() instanceof Player) { - RSCPacketBuilder updatez = new RSCPacketBuilder(); - updatez.setID(190); - updatez.addShort(1); - updatez.addShort(cm.getSender().getIndex()); - updatez.addByte((byte) 1); - updatez.addShort(-1); - updatez.addByte((byte) cm.getLength()); - updatez.addBytes(cm.getMessage()); - for (Player pl : playerToUpdate.getViewArea().getPlayersInView()) { - if (pl.equals(playerToUpdate) || pl == playerToUpdate) - continue; - pl.getActionSender().addPacket(updatez.toPacket()); - } - } - } - for (Npc n : npcsNeedingHitsUpdate) { - updates.addShort(n.getIndex()); - updates.addByte((byte) 2); - updates.addByte((byte) n.getLastDamage()); - updates.addByte((byte) n.getHits()); - updates.addByte((byte) n.getDef().getHits()); - } - return updates.toPacket(); - } - catch(ConcurrentModificationException e) { - return null; - /** - * Should fix the GS packet queue from piling up - */ - } + if (cm.getRecipient() != null + && cm.getRecipient() instanceof Player) { + RSCPacketBuilder updatez = new RSCPacketBuilder(); + updatez.setID(190); + updatez.addShort(1); + updatez.addShort(cm.getSender().getIndex()); + updatez.addByte((byte) 1); + updatez.addShort(-1); + updatez.addByte((byte) cm.getLength()); + updatez.addBytes(cm.getMessage()); + for (Player pl : playerToUpdate.getViewArea() + .getPlayersInView()) { + if (pl.equals(playerToUpdate) + || pl == playerToUpdate) + continue; + pl.getActionSender().addPacket(updatez.toPacket()); + } + } + } + for (Npc n : npcsNeedingHitsUpdate) { + updates.addShort(n.getIndex()); + updates.addByte((byte) 2); + updates.addByte((byte) n.getLastDamage()); + updates.addByte((byte) n.getHits()); + updates.addByte((byte) n.getDef().getHits()); + } + return updates.toPacket(); + } catch (ConcurrentModificationException e) { + return null; + /** + * Should fix the GS packet queue from piling up + */ + } + } + return null; } - return null; - } - /** - * Sets the player to update - */ - public void setPlayer(Player p) { - playerToUpdate = p; - } + /** + * Sets the player to update + */ + public void setPlayer(Player p) { + playerToUpdate = p; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/PlayerPositionPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/PlayerPositionPacketBuilder.java index 06066bc..10a0db5 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/PlayerPositionPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/PlayerPositionPacketBuilder.java @@ -7,13 +7,13 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.StatefulEntityCollection; - public class PlayerPositionPacketBuilder { private Player playerToUpdate; public RSCPacket getPacket() { - StatefulEntityCollection watchedPlayers = playerToUpdate.getWatchedPlayers(); + StatefulEntityCollection watchedPlayers = playerToUpdate + .getWatchedPlayers(); Collection newPlayers = watchedPlayers.getNewEntities(); Collection knownPlayers = watchedPlayers.getKnownEntities(); RSCPacketBuilder packet = new RSCPacketBuilder(); @@ -43,7 +43,8 @@ public class PlayerPositionPacketBuilder { } } for (Player p : newPlayers) { - byte[] offsets = DataConversions.getMobPositionOffsets(p.getLocation(), playerToUpdate.getLocation()); + byte[] offsets = DataConversions.getMobPositionOffsets( + p.getLocation(), playerToUpdate.getLocation()); packet.addBits(p.getIndex(), 16); packet.addBits(offsets[0], 5); packet.addBits(offsets[1], 5); @@ -51,7 +52,6 @@ public class PlayerPositionPacketBuilder { packet.addBits(0, 1); } RSCPacket pkt = packet.toPacket(); - Player p = playerToUpdate; return pkt; } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/PlayerUpdatePacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/PlayerUpdatePacketBuilder.java index f0cfb70..85b9a0f 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/PlayerUpdatePacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/PlayerUpdatePacketBuilder.java @@ -11,20 +11,28 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.PlayerAppearance; import org.moparscape.msc.gs.model.Projectile; - public class PlayerUpdatePacketBuilder { private Player playerToUpdate; public RSCPacket getPacket() { - List bubblesNeedingDisplayed = playerToUpdate.getBubblesNeedingDisplayed(); - List chatMessagesNeedingDisplayed = playerToUpdate.getChatMessagesNeedingDisplayed(); - List playersNeedingHitsUpdate = playerToUpdate.getPlayersRequiringHitsUpdate(); + List bubblesNeedingDisplayed = playerToUpdate + .getBubblesNeedingDisplayed(); + List chatMessagesNeedingDisplayed = playerToUpdate + .getChatMessagesNeedingDisplayed(); + List playersNeedingHitsUpdate = playerToUpdate + .getPlayersRequiringHitsUpdate(); - List projectilesNeedingDisplayed = playerToUpdate.getProjectilesNeedingDisplayed(); - List playersNeedingAppearanceUpdate = playerToUpdate.getPlayersRequiringAppearanceUpdate(); + List projectilesNeedingDisplayed = playerToUpdate + .getProjectilesNeedingDisplayed(); + List playersNeedingAppearanceUpdate = playerToUpdate + .getPlayersRequiringAppearanceUpdate(); - int updateSize = bubblesNeedingDisplayed.size() + chatMessagesNeedingDisplayed.size() + playersNeedingHitsUpdate.size() + projectilesNeedingDisplayed.size() + playersNeedingAppearanceUpdate.size(); + int updateSize = bubblesNeedingDisplayed.size() + + chatMessagesNeedingDisplayed.size() + + playersNeedingHitsUpdate.size() + + projectilesNeedingDisplayed.size() + + playersNeedingAppearanceUpdate.size(); if (updateSize > 0) { RSCPacketBuilder updates = new RSCPacketBuilder(); updates.setID(53); @@ -89,7 +97,8 @@ public class PlayerUpdatePacketBuilder { updates.addByte(appearance.getSkinColour()); updates.addByte((byte) p.getCombatLevel()); updates.addByte((byte) (p.isSkulled() ? 1 : 0)); - updates.addByte((byte) (p.isAdmin() ? 3 : (p.isMod() ? 2 : (p.isPMod() ? 1 : 0)))); + updates.addByte((byte) (p.isAdmin() ? 3 : (p.isMod() ? 2 : (p + .isPMod() ? 1 : 0)))); } return updates.toPacket(); } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/RSCPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/RSCPacketBuilder.java index e44fabe..be55a84 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/RSCPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/RSCPacketBuilder.java @@ -3,32 +3,32 @@ package org.moparscape.msc.gs.builders; import org.moparscape.msc.gs.connection.RSCPacket; public class RSCPacketBuilder extends StaticPacketBuilder { - /** - * ID of the packet - */ - private int pID = 0; + /** + * ID of the packet + */ + private int pID = 0; - /** - * Sets the ID for this packet. - * - * @param id - * The ID of the packet - */ - public RSCPacketBuilder setID(int pID) { - this.pID = pID; - return this; - } + /** + * Sets the ID for this packet. + * + * @param id + * The ID of the packet + */ + public RSCPacketBuilder setID(int pID) { + this.pID = pID; + return this; + } - /** - * Returns a RSCPacket object for the data contained in this - * builder. - * - * @return A RSCPacket object - */ - public RSCPacket toPacket() { - byte[] data = new byte[curLength]; - System.arraycopy(payload, 0, data, 0, curLength); - return new RSCPacket(null, pID, data, bare); - } + /** + * Returns a RSCPacket object for the data contained in this + * builder. + * + * @return A RSCPacket object + */ + public RSCPacket toPacket() { + byte[] data = new byte[curLength]; + System.arraycopy(payload, 0, data, 0, curLength); + return new RSCPacket(null, pID, data, bare); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/builders/StaticPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/StaticPacketBuilder.java index cb679e4..f6dafd2 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/StaticPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/StaticPacketBuilder.java @@ -8,247 +8,252 @@ import org.moparscape.msc.gs.util.Logger; * RSCPacket objects. */ public class StaticPacketBuilder { - /** - * Bitmasks for addBits() - */ - protected 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 }; - /** - * Default capacity - */ - protected static final int DEFAULT_SIZE = 32; - /** - * Whether this packet does not use the standard packet header - */ - protected boolean bare = false; - /** - * Current index into the buffer by bits - */ - protected int bitPosition = 0; - /** - * Current number of bytes used in the buffer - */ - protected int curLength; + /** + * Bitmasks for addBits() + */ + protected 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 }; + /** + * Default capacity + */ + protected static final int DEFAULT_SIZE = 32; + /** + * Whether this packet does not use the standard packet header + */ + protected boolean bare = false; + /** + * Current index into the buffer by bits + */ + protected int bitPosition = 0; + /** + * Current number of bytes used in the buffer + */ + protected int curLength; - /** - * The payload buffer - */ - protected byte[] payload; + /** + * The payload buffer + */ + protected byte[] payload; - /** - * Constructs a packet builder with no data and an initial capacity of - * DEFAULT_SIZE. - * - * @see DEFAULT_SIZE - */ - public StaticPacketBuilder() { - this(DEFAULT_SIZE); - } - - /** - * 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]; - } - - /** - * TODO needs a proper description. - */ - public StaticPacketBuilder addBits(int value, int numBits) { - 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; + /** + * Constructs a packet builder with no data and an initial capacity of + * DEFAULT_SIZE. + * + * @see DEFAULT_SIZE + */ + public StaticPacketBuilder() { + this(DEFAULT_SIZE); } - 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); + + /** + * 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]; } - 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); - } + /** + * TODO needs a proper description. + */ + public StaticPacketBuilder addBits(int value, int numBits) { + 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]; - /** - * 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 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; - } - - /** - * 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; - } - - /** - * 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; - } - - /** - * 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; - } - - /** - * 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; + 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; } - int oldLength = curLength; - if (oldLength > payload.length) { - oldLength = payload.length; - } - byte[] newPayload = new byte[newCapacity]; - try { - System.arraycopy(payload, 0, newPayload, 0, oldLength); - } catch (Exception e) { - Logger.error(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; - } + /** + * 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); + } - /** - * 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); + /** + * 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 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; + } + + /** + * 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; + } + + /** + * 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; + } + + /** + * 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; + } + + /** + * 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; + } + int oldLength = curLength; + if (oldLength > payload.length) { + oldLength = payload.length; + } + byte[] newPayload = new byte[newCapacity]; + try { + System.arraycopy(payload, 0, newPayload, 0, oldLength); + } catch (Exception e) { + Logger.error(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; + } + + /** + * 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, data, bare); - } + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/WallObjectPositionPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/WallObjectPositionPacketBuilder.java index e2cdab9..d70d046 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/WallObjectPositionPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/WallObjectPositionPacketBuilder.java @@ -8,49 +8,52 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.StatefulEntityCollection; - public class WallObjectPositionPacketBuilder { - private Player playerToUpdate; + private Player playerToUpdate; - public RSCPacket getPacket() { - StatefulEntityCollection watchedObjects = playerToUpdate.getWatchedObjects(); - if (watchedObjects.changed()) { - Collection newObjects = watchedObjects.getNewEntities(); - Collection knownObjets = watchedObjects.getKnownEntities(); - RSCPacketBuilder packet = new RSCPacketBuilder(); - packet.setID(95); - for (GameObject o : knownObjets) { - if (o.getType() != 1) { - continue; + public RSCPacket getPacket() { + StatefulEntityCollection watchedObjects = playerToUpdate + .getWatchedObjects(); + if (watchedObjects.changed()) { + Collection newObjects = watchedObjects.getNewEntities(); + Collection knownObjets = watchedObjects + .getKnownEntities(); + RSCPacketBuilder packet = new RSCPacketBuilder(); + packet.setID(95); + for (GameObject o : knownObjets) { + if (o.getType() != 1) { + continue; + } + // We should remove ones miles away differently I think + if (watchedObjects.isRemoving(o)) { + byte[] offsets = DataConversions.getObjectPositionOffsets( + o.getLocation(), playerToUpdate.getLocation()); + packet.addShort(60000); + packet.addByte(offsets[0]); + packet.addByte(offsets[1]); + packet.addByte((byte) o.getDirection()); + } + } + for (GameObject o : newObjects) { + if (o.getType() != 1) { + continue; + } + byte[] offsets = DataConversions.getObjectPositionOffsets( + o.getLocation(), playerToUpdate.getLocation()); + packet.addShort(o.getID()); + packet.addByte(offsets[0]); + packet.addByte(offsets[1]); + packet.addByte((byte) o.getDirection()); + } + return packet.toPacket(); } - // We should remove ones miles away differently I think - if (watchedObjects.isRemoving(o)) { - byte[] offsets = DataConversions.getObjectPositionOffsets(o.getLocation(), playerToUpdate.getLocation()); - packet.addShort(60000); - packet.addByte(offsets[0]); - packet.addByte(offsets[1]); - packet.addByte((byte) o.getDirection()); - } - } - for (GameObject o : newObjects) { - if (o.getType() != 1) { - continue; - } - byte[] offsets = DataConversions.getObjectPositionOffsets(o.getLocation(), playerToUpdate.getLocation()); - packet.addShort(o.getID()); - packet.addByte(offsets[0]); - packet.addByte(offsets[1]); - packet.addByte((byte) o.getDirection()); - } - return packet.toPacket(); + return null; } - return null; - } - /** - * Sets the player to update - */ - public void setPlayer(Player p) { - playerToUpdate = p; - } + /** + * Sets the player to update + */ + public void setPlayer(Player p) { + playerToUpdate = p; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/builders/ls/MiscPacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/ls/MiscPacketBuilder.java index 2a00874..2578025 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/ls/MiscPacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/ls/MiscPacketBuilder.java @@ -20,7 +20,6 @@ import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.EntityList; import org.moparscape.msc.gs.util.Logger; - public class MiscPacketBuilder { /** * Connector instance @@ -184,11 +183,10 @@ public class MiscPacketBuilder { + DataConversions.hashToUsername(user)); int world = p.readShort(); - Point location = Point.location(p.readShort(), p - .readShort()); + Point location = Point.location(p.readShort(), + p.readShort()); long loginDate = p.readLong(); - int lastMoved = (int) ((GameEngine.getTime() - p - .readLong()) / 1000); + int lastMoved = (int) ((GameEngine.getTime() - p.readLong()) / 1000); boolean chatBlock = p.readByte() == 1; int fatigue = p.readShort(); String state = p.readString(); @@ -208,8 +206,7 @@ public class MiscPacketBuilder { + "@whi@. Fatigue is at @or1@" + fatigue + "@whi@.", false); } else { - mod - .getActionSender() + mod.getActionSender() .sendMessage( "Invalid player, maybe they aren't currently online?"); } @@ -251,8 +248,8 @@ public class MiscPacketBuilder { s.addLong(to); s.addInt(item); s.addLong(amount); - s.addInt(x); - s.addInt(y); + s.addInt(x); + s.addInt(y); s.addInt(type); s.addLong((GameEngine.getTime() / 1000)); packets.add(s.toPacket()); diff --git a/GameServer/src/org/moparscape/msc/gs/builders/ls/SavePacketBuilder.java b/GameServer/src/org/moparscape/msc/gs/builders/ls/SavePacketBuilder.java index db11aa6..a7d958b 100644 --- a/GameServer/src/org/moparscape/msc/gs/builders/ls/SavePacketBuilder.java +++ b/GameServer/src/org/moparscape/msc/gs/builders/ls/SavePacketBuilder.java @@ -16,16 +16,14 @@ public class SavePacketBuilder { private Player player; public LSPacket getPacket() { - + LSPacketBuilder packet = new LSPacketBuilder(); packet.setID(20); packet.addLong(player.getUsernameHash()); packet.addInt(player.getOwner()); - packet - .addLong(player.getLastLogin() == 0L - && player.isChangingAppearance() ? 0 : player - .getCurrentLogin()); + packet.addLong(player.getLastLogin() == 0L + && player.isChangingAppearance() ? 0 : player.getCurrentLogin()); packet.addLong(DataConversions.IPToLong(player.getCurrentIP())); packet.addShort(player.getCombatLevel()); packet.addShort(player.getSkillTotal()); @@ -66,6 +64,7 @@ public class SavePacketBuilder { } packet.addShort(player.getQuestPoints()); + @SuppressWarnings("unchecked") java.util.HashMap questStage = (java.util.HashMap) player .getQuestStages().clone(); @@ -76,7 +75,7 @@ public class SavePacketBuilder { packet.addShort(i); packet.addShort(questStage.get(i)); } - packet.addLong(player.getEventCD()); + packet.addLong(player.getEventCD()); return packet.toPacket(); } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/LSCodecFactory.java b/GameServer/src/org/moparscape/msc/gs/connection/LSCodecFactory.java index febf3a6..d7ed92a 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/LSCodecFactory.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/LSCodecFactory.java @@ -8,30 +8,30 @@ import org.apache.mina.filter.codec.ProtocolEncoder; * Provides access to the protocol encoders and decoders for the LS protocol. */ public class LSCodecFactory implements ProtocolCodecFactory { - /** - * The protocol decoder in use - */ - private static ProtocolDecoder decoder = new LSProtocolDecoder(); - /** - * The protocol encoder in use - */ - private static ProtocolEncoder encoder = new LSProtocolEncoder(); + /** + * The protocol decoder in use + */ + private static ProtocolDecoder decoder = new LSProtocolDecoder(); + /** + * The protocol encoder in use + */ + private static ProtocolEncoder encoder = new LSProtocolEncoder(); - /** - * Provides the decoder to use to format outgoing data. - * - * @return A protocol decoder - */ - public ProtocolDecoder getDecoder() { - return decoder; - } + /** + * Provides the decoder to use to format outgoing data. + * + * @return A protocol decoder + */ + public ProtocolDecoder getDecoder() { + return decoder; + } - /** - * Provides the encoder to use to parse incoming data. - * - * @return A protocol encoder - */ - public ProtocolEncoder getEncoder() { - return encoder; - } + /** + * Provides the encoder to use to parse incoming data. + * + * @return A protocol encoder + */ + public ProtocolEncoder getEncoder() { + return encoder; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/LSConnectionHandler.java b/GameServer/src/org/moparscape/msc/gs/connection/LSConnectionHandler.java index 00d3ea6..4bff80b 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/LSConnectionHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/LSConnectionHandler.java @@ -9,106 +9,106 @@ import org.moparscape.msc.gs.Server; import org.moparscape.msc.gs.core.LoginConnector; import org.moparscape.msc.gs.util.Logger; - /** * Handles the protocol events fired from MINA. */ public class LSConnectionHandler implements IoHandler { - /** - * A reference to the login connector - */ - private LoginConnector connector; + /** + * A reference to the login connector + */ + private LoginConnector connector; - /** - * Creates a new connection handler for the given login connector. - * - * @param connector - * The connector in use - */ - public LSConnectionHandler(LoginConnector connector) { - this.connector = connector; - } - - /** - * Invoked whenever an exception is thrown by MINA or this IoHandler. - * - * @param session - * The associated session - * @param cause - * The exception thrown - */ - public void exceptionCaught(IoSession session, Throwable cause) { - } - - /** - * Invoked whenever a packet is ready to be added to the queue. - * - * @param session - * The IO session on which the packet was received - * @param message - * The packet - */ - public void messageReceived(IoSession session, Object message) { - if (session.isClosing()) { - return; + /** + * Creates a new connection handler for the given login connector. + * + * @param connector + * The connector in use + */ + public LSConnectionHandler(LoginConnector connector) { + this.connector = connector; } - LSPacket p = (LSPacket) message; - connector.getPacketQueue().add(p); - } - /** - * Invoked whenever a packet is sent. - * - * @param session - * The associated session - * @param message - * The packet sent - */ - public void messageSent(IoSession session, Object message) { - } - - /** - * Invoked whenever an IO session is closed. This must handle unregistering - * the disconnecting player from the engine. - * - * @param session - * The IO session which has been closed - */ - public void sessionClosed(IoSession session) { - Server server = Instance.getServer(); - if (server != null && server.running()) { - Logger.error(new Exception("Lost connection the login server!")); + /** + * Invoked whenever an exception is thrown by MINA or this IoHandler. + * + * @param session + * The associated session + * @param cause + * The exception thrown + */ + public void exceptionCaught(IoSession session, Throwable cause) { } - } - /** - * Invoked whenever an IO session is created. - * - * @param session - * The session opened - */ - public void sessionCreated(IoSession session) { - session.getFilterChain().addFirst("protocolFilter", new ProtocolCodecFilter(new LSCodecFactory())); - // Logger.event("Connection to LOGIN_SERVER created"); - } + /** + * Invoked whenever a packet is ready to be added to the queue. + * + * @param session + * The IO session on which the packet was received + * @param message + * The packet + */ + public void messageReceived(IoSession session, Object message) { + if (session.isClosing()) { + return; + } + LSPacket p = (LSPacket) message; + connector.getPacketQueue().add(p); + } - /** - * Invoked when the idle status of a session changes. - * - * @param session - * The session in question - * @param status - * The new idle status - */ - public void sessionIdle(IoSession session, IdleStatus status) { - } + /** + * Invoked whenever a packet is sent. + * + * @param session + * The associated session + * @param message + * The packet sent + */ + public void messageSent(IoSession session, Object message) { + } - /** - * Invoked when a new session is opened. - * - * @param session - * The session opened - */ - public void sessionOpened(IoSession session) { - } + /** + * Invoked whenever an IO session is closed. This must handle unregistering + * the disconnecting player from the engine. + * + * @param session + * The IO session which has been closed + */ + public void sessionClosed(IoSession session) { + Server server = Instance.getServer(); + if (server != null && server.running()) { + Logger.error(new Exception("Lost connection the login server!")); + } + } + + /** + * Invoked whenever an IO session is created. + * + * @param session + * The session opened + */ + public void sessionCreated(IoSession session) { + session.getFilterChain().addFirst("protocolFilter", + new ProtocolCodecFilter(new LSCodecFactory())); + // Logger.event("Connection to LOGIN_SERVER created"); + } + + /** + * Invoked when the idle status of a session changes. + * + * @param session + * The session in question + * @param status + * The new idle status + */ + public void sessionIdle(IoSession session, IdleStatus status) { + } + + /** + * Invoked when a new session is opened. + * + * @param session + * The session opened + */ + public void sessionOpened(IoSession session) { + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/LSPacket.java b/GameServer/src/org/moparscape/msc/gs/connection/LSPacket.java index 97cc741..bcec615 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/LSPacket.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/LSPacket.java @@ -6,50 +6,51 @@ import org.apache.mina.common.IoSession; * An immutable packet object. */ public final class LSPacket extends Packet { - /** - * The ID of the packet - */ - private int pID; - /** - * The uID of the packet - */ - private long uID; + /** + * The ID of the packet + */ + private int pID; + /** + * The uID of the packet + */ + private long uID; - public LSPacket(IoSession session, int pID, long uID, byte[] pData) { - this(session, pID, uID, pData, false); - } + public LSPacket(IoSession session, int pID, long uID, byte[] pData) { + this(session, pID, uID, pData, false); + } - public LSPacket(IoSession session, int pID, long uID, byte[] pData, boolean bare) { - super(session, pData, bare); - this.pID = pID; - this.uID = uID; - } + public LSPacket(IoSession session, int pID, long uID, byte[] pData, + boolean bare) { + super(session, pData, bare); + this.pID = pID; + this.uID = uID; + } - /** - * Returns the packet ID. - * - * @return The packet ID - */ - public int getID() { - return pID; - } + /** + * Returns the packet ID. + * + * @return The packet ID + */ + public int getID() { + return pID; + } - /** - * Returns the unique ID. - * - * @return The unique ID - */ - public long getUID() { - return uID; - } + /** + * Returns the unique ID. + * + * @return The unique ID + */ + public long getUID() { + return uID; + } - /** - * Returns this packet in string form. - * - * @return A String representing this packet - */ - public String toString() { - return super.toString() + " pid = " + pID + " uid = " + uID; - } + /** + * Returns this packet in string form. + * + * @return A String representing this packet + */ + public String toString() { + return super.toString() + " pid = " + pID + " uid = " + uID; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolDecoder.java b/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolDecoder.java index f2e7f16..da0406f 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolDecoder.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolDecoder.java @@ -10,48 +10,49 @@ import org.apache.mina.filter.codec.ProtocolDecoderOutput; * outputs it as a LSPacket object. */ public class LSProtocolDecoder extends CumulativeProtocolDecoder { - /** - * 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 - */ - public void dispose(IoSession session) throws Exception { - super.dispose(session); - } - - /** - * Parses the data in the provided byte buffer and writes it to - * out as a LSPacket. - * - * @param session - * The IoSession the data was read from - * @param in - * The buffer - * @param out - * The decoder output stream to which to write the - * LSPacket - * @return Whether enough data was available to create a packet - */ - protected boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) { - if (in.remaining() >= 13) { - int length = in.getInt(); - if (length <= in.remaining()) { - byte[] payload = new byte[length - 9]; - - int id = in.getUnsigned(); - long uid = in.getLong(); - in.get(payload); - - out.write(new LSPacket(session, id, uid, payload)); - return true; - } else { - in.rewind(); - return false; - } + /** + * 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 + */ + public void dispose(IoSession session) throws Exception { + super.dispose(session); + } + + /** + * Parses the data in the provided byte buffer and writes it to + * out as a LSPacket. + * + * @param session + * The IoSession the data was read from + * @param in + * The buffer + * @param out + * The decoder output stream to which to write the + * LSPacket + * @return Whether enough data was available to create a packet + */ + protected boolean doDecode(IoSession session, ByteBuffer in, + ProtocolDecoderOutput out) { + if (in.remaining() >= 13) { + int length = in.getInt(); + if (length <= in.remaining()) { + byte[] payload = new byte[length - 9]; + + int id = in.getUnsigned(); + long uid = in.getLong(); + in.get(payload); + + out.write(new LSPacket(session, id, uid, payload)); + return true; + } else { + in.rewind(); + return false; + } + } + return false; } - return false; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolEncoder.java b/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolEncoder.java index bea314f..001319a 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolEncoder.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/LSProtocolEncoder.java @@ -6,54 +6,55 @@ import org.apache.mina.filter.codec.ProtocolEncoder; import org.apache.mina.filter.codec.ProtocolEncoderOutput; import org.moparscape.msc.gs.util.Logger; - /** * Encodes the high level LSPacket class into the proper protocol * data required for transmission. */ public class LSProtocolEncoder implements ProtocolEncoder { - /** - * Releases all resources used by this encoder. - * - * @param session - * The IO session - */ - public void dispose(IoSession session) { - } - - /** - * Converts a LSPacket object into the raw data needed for - * transmission. - * - * @param session - * The IO session associated with the packet - * @param message - * A LSPacket to encode - * @param out - * The output stream to which to write the data - */ - public void encode(IoSession session, Object message, ProtocolEncoderOutput out) { - if (!(message instanceof LSPacket)) { - Logger.error(new Exception("Wrong packet type! " + message.toString())); - return; + /** + * Releases all resources used by this encoder. + * + * @param session + * The IO session + */ + public void dispose(IoSession session) { } - LSPacket p = (LSPacket) message; - byte[] data = p.getData(); - int packetLength = data.length; - ByteBuffer buffer; - if (!p.isBare()) { - buffer = ByteBuffer.allocate(data.length + 13); - packetLength += 9; - buffer.putInt(packetLength); - buffer.put((byte) p.getID()); - buffer.putLong(p.getUID()); + /** + * Converts a LSPacket object into the raw data needed for + * transmission. + * + * @param session + * The IO session associated with the packet + * @param message + * A LSPacket to encode + * @param out + * The output stream to which to write the data + */ + public void encode(IoSession session, Object message, + ProtocolEncoderOutput out) { + if (!(message instanceof LSPacket)) { + Logger.error(new Exception("Wrong packet type! " + + message.toString())); + return; + } + LSPacket p = (LSPacket) message; + byte[] data = p.getData(); + int packetLength = data.length; + ByteBuffer buffer; + if (!p.isBare()) { + buffer = ByteBuffer.allocate(data.length + 13); + packetLength += 9; - } else { - buffer = ByteBuffer.allocate(data.length); + buffer.putInt(packetLength); + buffer.put((byte) p.getID()); + buffer.putLong(p.getUID()); + + } else { + buffer = ByteBuffer.allocate(data.length); + } + buffer.put(data, 0, data.length); + buffer.flip(); + out.write(buffer); } - buffer.put(data, 0, data.length); - buffer.flip(); - out.write(buffer); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/Packet.java b/GameServer/src/org/moparscape/msc/gs/connection/Packet.java index 7f53f7e..f09decb 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/Packet.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/Packet.java @@ -6,253 +6,262 @@ import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.core.GameEngine; import org.moparscape.msc.gs.util.Logger; - /** * An immutable packet object. */ public class Packet { - /** - * Whether this packet is without the standard packet header - */ - protected boolean bare; - /** - * The current index into the payload buffer for reading - */ - protected int caret = 0; - /** - * The payload - */ - protected byte[] pData; - /** - * The length of the payload - */ - protected int pLength; - /** - * The associated IO session - */ - protected IoSession session; - /** - * The time this packet was created - */ - protected long time; + /** + * Whether this packet is without the standard packet header + */ + protected boolean bare; + /** + * The current index into the payload buffer for reading + */ + protected int caret = 0; + /** + * The payload + */ + protected byte[] pData; + /** + * The length of the payload + */ + protected int pLength; + /** + * The associated IO session + */ + protected IoSession session; + /** + * The time this packet was created + */ + protected long time; - /** - * 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 pData - * The payload the packet - */ - public Packet(IoSession session, byte[] pData) { - this(session, pData, false); - } - - /** - * Creates a new packet with the specified parameters. - * - * @param session - * The session to associate with 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, byte[] pData, boolean bare) { - this.session = session; - this.pData = pData; - this.pLength = pData.length; - this.bare = bare; - time = GameEngine.getTime(); - } - - /** - * Returns the time the packet was created. - * - * @ return the time the packet was created - */ - public long getCreated() { - return time; - } - - /** - * Returns the entire payload data of this packet. - * - * @return The payload byte array - */ - public byte[] getData() { - return pData; - } - - /** - * Returns the length of the payload of this packet. - * - * @return The length of the packet's payload - */ - public int getLength() { - return pLength; - } - - /** - * 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]; + /** + * 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 pData + * The payload the packet + */ + public Packet(IoSession session, byte[] pData) { + this(session, pData, false); } - caret += data.length; - return data; - } - - /** - * 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 String printData() { - if (pLength == 0) { - return ""; + /** + * Creates a new packet with the specified parameters. + * + * @param session + * The session to associate with 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, byte[] pData, boolean bare) { + this.session = session; + this.pData = pData; + this.pLength = pData.length; + this.bare = bare; + time = GameEngine.getTime(); } - String data = ""; - for (int i = 0; i < pLength; i++) { - data += " " + pData[i]; + + /** + * Returns the time the packet was created. + * + * @ return the time the packet was created + */ + public long getCreated() { + return time; } - return data.substring(1); - } - /** - * Reads the next byte from the payload. - * - * @return A byte - */ - public byte readByte() { - return pData[caret++]; - } - - /** - * Returns length of payload data of this packet. - * - * @return The payload byte array - */ - public byte[] readBytes(int length) { - byte[] data = new byte[length]; - try { - for (int i = 0; i < length; i++) { - data[i] = pData[i + caret]; - } - } catch (Exception e) { - Logger.error(e.getMessage()); + /** + * Returns the entire payload data of this packet. + * + * @return The payload byte array + */ + public byte[] getData() { + return pData; } - caret += length; - return data; - } - /** - * Reads the next int from the payload. - * - * @return An int - */ - public int readInt() { - try { - return ((pData[caret++] & 0xff) << 24) | ((pData[caret++] & 0xff) << 16) | ((pData[caret++] & 0xff) << 8) | (pData[caret++] & 0xff); - } catch (Exception e) { - Logger.error(e.getMessage()); - return 0; + /** + * Returns the length of the payload of this packet. + * + * @return The length of the packet's payload + */ + public int getLength() { + return pLength; } - } - /** - * Reads the next long from the payload. - * - * @return A long - */ - public long readLong() { - try { - return (long) ((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) | ((long) (pData[caret++] & 0xff)); - } catch (Exception e) { - Logger.error(e.getMessage()); - return 0; + /** + * 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 short from the payload. - * - * @return A short - */ - public short readShort() { - try { - return (short) ((short) ((pData[caret++] & 0xff) << 8) | (short) (pData[caret++] & 0xff)); - } catch (Exception e) { - // Logger.error(e.getMessage()); - return 0; + /** + * Returns the IO session associated with the packet, if any. + * + * @return The IoSession object, or null if none. + */ + public IoSession getSession() { + return session; } - } - /** - * Reads the string which is formed by the unread portion of the payload. - * - * @return A String - */ - public String readString() { - return readString(pLength - caret); - } + /** + * 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; + } - /** - * 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) { + public String printData() { + if (pLength == 0) { + return ""; + } + String data = ""; + for (int i = 0; i < pLength; i++) { + data += " " + pData[i]; + } + return data.substring(1); + } + + /** + * Reads the next byte from the payload. + * + * @return A byte + */ + public byte readByte() { + return pData[caret++]; + } + + /** + * Returns length of payload data of this packet. + * + * @return The payload byte array + */ + public byte[] readBytes(int length) { + byte[] data = new byte[length]; + try { + for (int i = 0; i < length; i++) { + data[i] = pData[i + caret]; + } + } catch (Exception e) { + Logger.error(e.getMessage()); + } + caret += length; + return data; + } + + /** + * Reads the next int from the payload. + * + * @return An int + */ + public int readInt() { + try { + return ((pData[caret++] & 0xff) << 24) + | ((pData[caret++] & 0xff) << 16) + | ((pData[caret++] & 0xff) << 8) | (pData[caret++] & 0xff); + } catch (Exception e) { + Logger.error(e.getMessage()); + return 0; + } + } + + /** + * Reads the next long from the payload. + * + * @return A long + */ + public long readLong() { + try { + return (long) ((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) + | ((long) (pData[caret++] & 0xff)); + } catch (Exception e) { + Logger.error(e.getMessage()); + return 0; + } + } + + /** + * Reads the next short from the payload. + * + * @return A short + */ + public short readShort() { + try { + return (short) ((short) ((pData[caret++] & 0xff) << 8) | (short) (pData[caret++] & 0xff)); + } catch (Exception e) { + // Logger.error(e.getMessage()); + return 0; + } + } + + /** + * Reads the string which is formed by the unread portion of the payload. + * + * @return A String + */ + public String readString() { + return readString(pLength - 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; - } + } - public int remaining() { - return pData.length - caret; - } + public int remaining() { + return pData.length - caret; + } - /** - * 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; - } + /** + * 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; + } - /** - * Returns this packet in string form. - * - * @return A String representing this packet - */ - public String toString() { - String origin = session == null ? "this" : ((InetSocketAddress) session.getRemoteAddress()).getAddress().getHostAddress(); - return "origin = " + origin + " length = " + pLength; - } + /** + * Returns this packet in string form. + * + * @return A String representing this packet + */ + public String toString() { + String origin = session == null ? "this" : ((InetSocketAddress) session + .getRemoteAddress()).getAddress().getHostAddress(); + return "origin = " + origin + " length = " + pLength; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/PacketQueue.java b/GameServer/src/org/moparscape/msc/gs/connection/PacketQueue.java index 6aa6ad8..71a0014 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/PacketQueue.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/PacketQueue.java @@ -7,38 +7,39 @@ import java.util.List; * Synchronized packet queue */ public class PacketQueue { - /** - * The list of packets in the queue - */ - private ArrayList packets = new ArrayList(); + /** + * The list of packets in the queue + */ + private ArrayList packets = new ArrayList(); - /** - * Adds a packet to the queue - */ - public void add(T p) { - //Logging.debug("[DEBUG] Packet Q: " + packets.size()); - synchronized (packets) { - packets.add(p); + /** + * Adds a packet to the queue + */ + public void add(T p) { + // Logging.debug("[DEBUG] Packet Q: " + packets.size()); + synchronized (packets) { + packets.add(p); + } } - } - /** - * Returns the packets currently in the list and removes them from the - * backing store - */ - public List getPackets() { - List tmpList; - synchronized (packets) { - tmpList = (List) packets.clone(); - packets.clear(); + /** + * Returns the packets currently in the list and removes them from the + * backing store + */ + @SuppressWarnings("unchecked") + public List getPackets() { + List tmpList; + synchronized (packets) { + tmpList = (List) packets.clone(); + packets.clear(); + } + return tmpList; } - return tmpList; - } - /** - * Returns if there is packets to process - */ - public boolean hasPackets() { - return !packets.isEmpty(); - } + /** + * Returns if there is packets to process + */ + public boolean hasPackets() { + return !packets.isEmpty(); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/RSCCodecFactory.java b/GameServer/src/org/moparscape/msc/gs/connection/RSCCodecFactory.java index 3620a93..7ffa2e4 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/RSCCodecFactory.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/RSCCodecFactory.java @@ -8,30 +8,30 @@ import org.apache.mina.filter.codec.ProtocolEncoder; * Provides access to the protocol encoders and decoders for the RSC protocol. */ public class RSCCodecFactory implements ProtocolCodecFactory { - /** - * The protocol decoder in use - */ - private static ProtocolDecoder decoder = new RSCProtocolDecoder(); - /** - * The protocol encoder in use - */ - private static ProtocolEncoder encoder = new RSCProtocolEncoder(); + /** + * The protocol decoder in use + */ + private static ProtocolDecoder decoder = new RSCProtocolDecoder(); + /** + * The protocol encoder in use + */ + private static ProtocolEncoder encoder = new RSCProtocolEncoder(); - /** - * Provides the decoder to use to format outgoing data. - * - * @return A protocol decoder - */ - public ProtocolDecoder getDecoder() { - return decoder; - } + /** + * Provides the decoder to use to format outgoing data. + * + * @return A protocol decoder + */ + public ProtocolDecoder getDecoder() { + return decoder; + } - /** - * Provides the encoder to use to parse incoming data. - * - * @return A protocol encoder - */ - public ProtocolEncoder getEncoder() { - return encoder; - } + /** + * Provides the encoder to use to parse incoming data. + * + * @return A protocol encoder + */ + public ProtocolEncoder getEncoder() { + return encoder; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/RSCConnectionHandler.java b/GameServer/src/org/moparscape/msc/gs/connection/RSCConnectionHandler.java index 0f06069..6b858c3 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/RSCConnectionHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/RSCConnectionHandler.java @@ -1,302 +1,220 @@ package org.moparscape.msc.gs.connection; -import java.net.InetAddress; import java.net.InetSocketAddress; -import java.util.Map; 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 org.moparscape.msc.config.Constants; -import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.core.GameEngine; import org.moparscape.msc.gs.model.Player; -import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.util.Logger; - /** * Handles the protocol events fired from MINA. */ public class RSCConnectionHandler implements IoHandler { - /** - * World instance - */ - - // sudo - private static final World world = Instance.getWorld(); - private long allowedInterval; - /* - - private int attackers = 0; - - private Map clients; - private Set connectedAddresses; - private Map counts; - private long lastAttack = 0; - */ - /** - * A reference to the game engine's packet queue - */ - - private PacketQueue packets; - - private Map written; - - /** - * Creates a new connection handler for the given engine. - * - * @param engine - * The engine in use - */ - public RSCConnectionHandler(GameEngine engine) { - packets = (PacketQueue) engine.getPacketQueue(); - this.allowedInterval = allowedInterval; - /* - clients = Collections.synchronizedMap(new HashMap()); - counts = Collections.synchronizedMap(new HashMap()); - written = Collections.synchronizedMap(new HashMap()); - connectedAddresses = new HashSet(); - */ - } - - /* - public void connectionOk(IoSession io) { - counts.remove(getAddress(io)); - } - - public void delayClient(IoSession session, int delay) { - long d = System.currentTimeMillis() - delay; - clients.put(getAddress(session), d); - } - */ - /** - * Invoked whenever an exception is thrown by MINA or this IoHandler. - * - * @param session - * The associated session - * @param cause - * The exception thrown - */ - public void exceptionCaught(IoSession session, Throwable cause) { - Player p = (Player) session.getAttachment(); - // if(p.getUsername().equalsIgnoreCase("xent")) { - - // } - if(p != null) - p.getActionSender().sendLogout(); - session.close(); - /* - * Logging.debug("---MINA Error from: " + p.getUsername() + - * " -------"); cause.printStackTrace();Logging.debug( - * "------------------------------------------------------------"); + /** + * World instance */ - cause.printStackTrace(); - } - 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 (if - * false, adds to a IPSec filter & writes IP to log. - */ - /* - public boolean isConnectionOk(IoSession session) { - final InetAddress addr = getAddress(session); - final String ip = addr.toString().replaceAll("/", ""); - // ip = ip.replaceAll("/",""); - long now = System.currentTimeMillis(); - int c = 0; - if (counts.containsKey(addr) && clients.containsKey(addr)) { - try { - c = counts.get(addr); - } catch (Exception e) { - Logging.debug("Error: " + e); - } - if (c >= 5) { - if (!written.containsKey(addr)) { - attackers++; - // if(now - lastAttack > 60000) - // { - // for(Player p : world.getPlayers()) - // { - // p.save(); - // p.getActionSender().sendLogout(); - // } - // Instance.getServer().getLoginConnector().getActionSender().saveProfiles(); - // } - try { - /* - * Logging.debug("ATTACKER IP: " + ip); - * BufferedWriter bf2 = new BufferedWriter(new - * FileWriter( "ddos.log", true)); - * bf2.write("sudo /sbin/route add " + - * addr.getHostAddress() + " gw 127.0.0.1"); - * bf2.newLine(); bf2.close(); - * / - written.put(addr, 1); - Instance.getDelayedEventHandler().add(new DelayedEvent(null, 3600000) { - public void run() { - written.remove(addr); - counts.remove(addr); - try { - Runtime.getRuntime().exec("sudo /sbin/route delete " + ip); - } catch (Exception err) { - Logging.debug(err); - } - } - }); - try { - Runtime.getRuntime().exec("sudo /sbin/route add " + ip + " gw 127.0.0.1"); - } catch (Exception err) { - Logging.debug(err); - } - - // try { Runtime.getRuntime().exec(ip + ".bat"); } - // catch (Exception err) { Logging.debug(err); } - lastAttack = now; - } catch (Exception e) { - System.err.println(e); - } - } - return false; - } - } - if (clients.containsKey(addr)) { - long lastConnTime = clients.get(addr); - if (now - lastConnTime < 2000) { - if (!counts.containsKey(addr)) - counts.put(addr, 0); - else - c = counts.get(addr) + 1; - counts.put(addr, c); - return false; - } else { - clients.put(addr, now); - if (counts.containsKey(addr)) - counts.remove(addr); - return true; - } - } else { - clients.put(addr, now); - return true; - } - } - */ - /** - * Invoked whenever a packet is ready to be added to the queue. - * - * @param session - * The IO session on which the packet was received - * @param message - * The packet - */ - public void messageReceived(IoSession session, Object message) { - Player player = (Player) session.getAttachment(); - if (session.isClosing() || player.destroyed()) { - return; - } - RSCPacket p = (RSCPacket) message; - - /* if(p.getID() == 57 || p.getID() == 73 || p.getID() == 40 || p.getID() - == 51 || p.getID() == 128 || p.getID() == 206 || p.getID() == 71 || - p.getID() == 55)*/ - - if(p.getID() == 55) - player.addInterval(); - - - player.addPacket(p); - packets.add(p); - } - - /** - * Invoked whenever a packet is sent. - * - * @param session - * The associated session - * @param message - * The packet sent - */ - public void messageSent(IoSession session, Object message) { - } - - /** - * Invoked whenever an IO session is closed. This must handle unregistering - * the disconnecting player from the engine. - * - * @param session - * The IO session which has been closed - */ - public void sessionClosed(IoSession session) { - Player player = (Player) session.getAttachment(); - if (!player.destroyed()) { - player.destroy(false); - } - } - - public void sessionCreated(IoSession session) { /* - if (!isConnectionOk(session)) { - session.close(); - return; - } else { - connectionOk(session); + * + * private int attackers = 0; + * + * private Map clients; private Set + * connectedAddresses; private Map counts; private + * long lastAttack = 0; + */ + /** + * A reference to the game engine's packet queue + */ + + private PacketQueue packets; + + /** + * Creates a new connection handler for the given engine. + * + * @param engine + * The engine in use + */ + public RSCConnectionHandler(GameEngine engine) { + packets = (PacketQueue) engine.getPacketQueue(); + /* + * clients = Collections.synchronizedMap(new HashMap()); counts = Collections.synchronizedMap(new + * HashMap()); written = + * Collections.synchronizedMap(new HashMap()); + * connectedAddresses = new HashSet(); + */ } - */ - session.getFilterChain().addFirst("protocolFilter", new ProtocolCodecFilter(new RSCCodecFactory())); - // Logger.event("Connection from: " + - // ((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress()); - Logger.println("Connection from: " + ((InetSocketAddress) session.getRemoteAddress()).getAddress().getHostAddress()); - } - /** - * Invoked when the idle status of a session changes. - * - * @param session - * The session in question - * @param status - * The new idle status - */ - public void sessionIdle(IoSession session, IdleStatus status) { - Player player = (Player) session.getAttachment(); - if (!player.destroyed()) { - player.destroy(false); + /* + * public void connectionOk(IoSession io) { counts.remove(getAddress(io)); } + * + * public void delayClient(IoSession session, int delay) { long d = + * System.currentTimeMillis() - delay; clients.put(getAddress(session), d); + * } + */ + /** + * Invoked whenever an exception is thrown by MINA or this IoHandler. + * + * @param session + * The associated session + * @param cause + * The exception thrown + */ + public void exceptionCaught(IoSession session, Throwable cause) { + Player p = (Player) session.getAttachment(); + // if(p.getUsername().equalsIgnoreCase("xent")) { + + // } + if (p != null) + p.getActionSender().sendLogout(); + session.close(); + /* + * Logging.debug("---MINA Error from: " + p.getUsername() + " -------"); + * cause.printStackTrace();Logging.debug( + * "------------------------------------------------------------"); + */ + cause.printStackTrace(); } - session.close(); - } - /** - * Invoked when a new session is opened. - * - * @param session - * The session opened - */ - public void sessionOpened(IoSession session) { - Constants.GameServer.ACCEPTED_CONNECTIONS++; - session.setAttachment(new Player(session)); - session.setIdleTime(IdleStatus.BOTH_IDLE, 30); - session.setWriteTimeout(30); - } + /** + * 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 (if + * false, adds to a IPSec filter & writes IP to log. + */ + /* + * public boolean isConnectionOk(IoSession session) { final InetAddress addr + * = getAddress(session); final String ip = addr.toString().replaceAll("/", + * ""); // ip = ip.replaceAll("/",""); long now = + * System.currentTimeMillis(); int c = 0; if (counts.containsKey(addr) && + * clients.containsKey(addr)) { try { c = counts.get(addr); } catch + * (Exception e) { Logging.debug("Error: " + e); } if (c >= 5) { if + * (!written.containsKey(addr)) { attackers++; // if(now - lastAttack > + * 60000) // { // for(Player p : world.getPlayers()) // { // p.save(); // + * p.getActionSender().sendLogout(); // } // + * Instance.getServer().getLoginConnector + * ().getActionSender().saveProfiles(); // } try { /* + * Logging.debug("ATTACKER IP: " + ip); BufferedWriter bf2 = new + * BufferedWriter(new FileWriter( "ddos.log", true)); + * bf2.write("sudo /sbin/route add " + addr.getHostAddress() + + * " gw 127.0.0.1"); bf2.newLine(); bf2.close(); / written.put(addr, 1); + * Instance.getDelayedEventHandler().add(new DelayedEvent(null, 3600000) { + * public void run() { written.remove(addr); counts.remove(addr); try { + * Runtime.getRuntime().exec("sudo /sbin/route delete " + ip); } catch + * (Exception err) { Logging.debug(err); } } }); try { + * Runtime.getRuntime().exec("sudo /sbin/route add " + ip + + * " gw 127.0.0.1"); } catch (Exception err) { Logging.debug(err); } + * + * // try { Runtime.getRuntime().exec(ip + ".bat"); } // catch (Exception + * err) { Logging.debug(err); } lastAttack = now; } catch (Exception e) { + * System.err.println(e); } } return false; } } if + * (clients.containsKey(addr)) { long lastConnTime = clients.get(addr); if + * (now - lastConnTime < 2000) { if (!counts.containsKey(addr)) + * counts.put(addr, 0); else c = counts.get(addr) + 1; counts.put(addr, c); + * return false; } else { clients.put(addr, now); if + * (counts.containsKey(addr)) counts.remove(addr); return true; } } else { + * clients.put(addr, now); return true; } } + */ + /** + * Invoked whenever a packet is ready to be added to the queue. + * + * @param session + * The IO session on which the packet was received + * @param message + * The packet + */ + public void messageReceived(IoSession session, Object message) { + Player player = (Player) session.getAttachment(); + if (session.isClosing() || player.destroyed()) { + return; + } + RSCPacket p = (RSCPacket) message; - /** - * 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; - } + /* + * if(p.getID() == 57 || p.getID() == 73 || p.getID() == 40 || p.getID() + * == 51 || p.getID() == 128 || p.getID() == 206 || p.getID() == 71 || + * p.getID() == 55) + */ + + if (p.getID() == 55) + player.addInterval(); + + player.addPacket(p); + packets.add(p); + } + + /** + * Invoked whenever a packet is sent. + * + * @param session + * The associated session + * @param message + * The packet sent + */ + public void messageSent(IoSession session, Object message) { + } + + /** + * Invoked whenever an IO session is closed. This must handle unregistering + * the disconnecting player from the engine. + * + * @param session + * The IO session which has been closed + */ + public void sessionClosed(IoSession session) { + Player player = (Player) session.getAttachment(); + if (!player.destroyed()) { + player.destroy(false); + } + } + + public void sessionCreated(IoSession session) { + /* + * if (!isConnectionOk(session)) { session.close(); return; } else { + * connectionOk(session); } + */ + session.getFilterChain().addFirst("protocolFilter", + new ProtocolCodecFilter(new RSCCodecFactory())); + // Logger.event("Connection from: " + + // ((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress()); + Logger.println("Connection from: " + + ((InetSocketAddress) session.getRemoteAddress()).getAddress() + .getHostAddress()); + } + + /** + * Invoked when the idle status of a session changes. + * + * @param session + * The session in question + * @param status + * The new idle status + */ + public void sessionIdle(IoSession session, IdleStatus status) { + Player player = (Player) session.getAttachment(); + if (!player.destroyed()) { + player.destroy(false); + } + session.close(); + } + + /** + * Invoked when a new session is opened. + * + * @param session + * The session opened + */ + public void sessionOpened(IoSession session) { + Constants.GameServer.ACCEPTED_CONNECTIONS++; + session.setAttachment(new Player(session)); + session.setIdleTime(IdleStatus.BOTH_IDLE, 30); + session.setWriteTimeout(30); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/RSCPacket.java b/GameServer/src/org/moparscape/msc/gs/connection/RSCPacket.java index ac7ffed..4c3f126 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/RSCPacket.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/RSCPacket.java @@ -6,36 +6,36 @@ import org.apache.mina.common.IoSession; * An immutable packet object. */ public final class RSCPacket extends Packet { - /** - * The ID of the packet - */ - private int pID; + /** + * The ID of the packet + */ + private int pID; - public RSCPacket(IoSession session, int pID, byte[] pData) { - this(session, pID, pData, false); - } + public RSCPacket(IoSession session, int pID, byte[] pData) { + this(session, pID, pData, false); + } - public RSCPacket(IoSession session, int pID, byte[] pData, boolean bare) { - super(session, pData, bare); - this.pID = pID; - } + public RSCPacket(IoSession session, int pID, byte[] pData, boolean bare) { + super(session, pData, bare); + this.pID = pID; + } - /** - * Returns the packet ID. - * - * @return The packet ID - */ - public int getID() { - return pID; - } + /** + * Returns the packet ID. + * + * @return The packet ID + */ + public int getID() { + return pID; + } - /** - * Returns this packet in string form. - * - * @return A String representing this packet - */ - public String toString() { - return super.toString() + " pid = " + pID; - } + /** + * Returns this packet in string form. + * + * @return A String representing this packet + */ + public String toString() { + return super.toString() + " pid = " + pID; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolDecoder.java b/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolDecoder.java index 9171d62..b9e1916 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolDecoder.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolDecoder.java @@ -6,64 +6,65 @@ import org.apache.mina.filter.codec.CumulativeProtocolDecoder; import org.apache.mina.filter.codec.ProtocolDecoderOutput; import org.moparscape.msc.gs.util.Logger; - /** * A decoder for the RSC protocol. Parses the incoming data from an IoSession * and outputs it as a RSCPacket object. */ public class RSCProtocolDecoder extends CumulativeProtocolDecoder { - /** - * 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 - */ - public void dispose(IoSession session) throws Exception { - super.dispose(session); - } - - /** - * Parses the data in the provided byte buffer and writes it to - * out as a RSCPacket. - * - * @param session - * The IoSession the data was read from - * @param in - * The buffer - * @param out - * The decoder output stream to which to write the - * RSCPacket - * @return Whether enough data was available to create a packet - */ - protected synchronized boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) { - try { - if (in.remaining() >= 2) { - byte[] buf = new byte[] { in.get(), in.get() }; - int length = ((short) ((buf[0] & 0xff) << 8) | (short) (buf[1] & 0xff)); - // Logger.log("len="+length); - if (length <= in.remaining()) { - if (length - 1 < 0) { - Logger.println("Negative array length! id=" + in.getUnsigned() + ",len=" + length); - session.close(); - return true; - } - byte[] payload = new byte[length - 1]; - int id = in.get() & 0xff; - in.get(payload); - RSCPacket p = new RSCPacket(session, id, payload); - out.write(p); - return true; - } else { - in.rewind(); - return false; - } - } - - } catch (Exception e) { - e.printStackTrace(); + /** + * 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 + */ + public void dispose(IoSession session) throws Exception { + super.dispose(session); + } + + /** + * Parses the data in the provided byte buffer and writes it to + * out as a RSCPacket. + * + * @param session + * The IoSession the data was read from + * @param in + * The buffer + * @param out + * The decoder output stream to which to write the + * RSCPacket + * @return Whether enough data was available to create a packet + */ + protected synchronized boolean doDecode(IoSession session, ByteBuffer in, + ProtocolDecoderOutput out) { + try { + if (in.remaining() >= 2) { + byte[] buf = new byte[] { in.get(), in.get() }; + int length = ((short) ((buf[0] & 0xff) << 8) | (short) (buf[1] & 0xff)); + // Logger.log("len="+length); + if (length <= in.remaining()) { + if (length - 1 < 0) { + Logger.println("Negative array length! id=" + + in.getUnsigned() + ",len=" + length); + session.close(); + return true; + } + byte[] payload = new byte[length - 1]; + int id = in.get() & 0xff; + in.get(payload); + RSCPacket p = new RSCPacket(session, id, payload); + out.write(p); + return true; + } else { + in.rewind(); + return false; + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + return false; } - return false; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolEncoder.java b/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolEncoder.java index 532f58b..b36851b 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolEncoder.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/RSCProtocolEncoder.java @@ -4,81 +4,81 @@ 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; -import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.util.Logger; - /** * Encodes the high level RSCPacket class into the proper protocol * data required for transmission. */ public class RSCProtocolEncoder implements ProtocolEncoder { - /** - * Releases all resources used by this encoder. - * - * @param session - * The IO session - */ - public void dispose(IoSession session) { - } - - /** - * Converts a RSCPacket object into the raw data needed for - * transmission. - * - * @param session - * The IO session associated with the packet - * @param message - * A RSCPacket to encode - * @param out - * The output stream to which to write the data - */ - public synchronized void encode(IoSession session, Object message, ProtocolEncoderOutput out) { - if (!(message instanceof RSCPacket)) { - Logger.error(new Exception("Wrong packet type! " + message.toString())); - return; + /** + * Releases all resources used by this encoder. + * + * @param session + * The IO session + */ + public void dispose(IoSession session) { } - try { - RSCPacket p = (RSCPacket) message; - byte[] data = p.getData(); - int dataLength = data.length; - ByteBuffer buffer; - // byte[] debug = new byte[dataLength + 4]; - if (!p.isBare()) { - buffer = ByteBuffer.allocate(dataLength + 3); - byte[] outlen = { (byte) (dataLength >> 8), (byte) (dataLength) }; - buffer.put(outlen); - // debug[0] = outlen[0]; debug[1] = outlen[1]; - int id = p.getID(); - // debug[2] = (byte)offset; debug[3] = (byte)id; - buffer.put((byte) id); - } else { - buffer = ByteBuffer.allocate(dataLength); - } - // System.arraycopy(data, 0, debug, 4, dataLength); - // Logging.debug(java.util.Arrays.toString(data)); - buffer.put(data, 0, dataLength); - buffer.flip(); - out.write(buffer); - return; - /* - * byte[] data = p.getData(); int packetLength = data.length; int - * dataLength = data.length; ByteBuffer buffer; if (!p.isBare()) { - * buffer = ByteBuffer.allocate(dataLength + 3); packetLength++; if - * (data.length >= 160) { buffer.put((byte) (160 + (packetLength / - * 256))); buffer.put((byte) (packetLength & 0xff)); } else { - * buffer.put((byte) (packetLength)); if (dataLength > 0) { - * dataLength--; buffer.put((byte) data[dataLength]); } } - * buffer.put((byte) p.getID()); } else { buffer = - * ByteBuffer.allocate(dataLength); } buffer.put(data, 0, - * dataLength); buffer.flip(); - * - * out.write(buffer); - */ + /** + * Converts a RSCPacket object into the raw data needed for + * transmission. + * + * @param session + * The IO session associated with the packet + * @param message + * A RSCPacket to encode + * @param out + * The output stream to which to write the data + */ + public synchronized void encode(IoSession session, Object message, + ProtocolEncoderOutput out) { + if (!(message instanceof RSCPacket)) { + Logger.error(new Exception("Wrong packet type! " + + message.toString())); + return; + } + try { + RSCPacket p = (RSCPacket) message; + byte[] data = p.getData(); + int dataLength = data.length; + ByteBuffer buffer; + // byte[] debug = new byte[dataLength + 4]; + if (!p.isBare()) { + buffer = ByteBuffer.allocate(dataLength + 3); + byte[] outlen = { (byte) (dataLength >> 8), (byte) (dataLength) }; + buffer.put(outlen); + // debug[0] = outlen[0]; debug[1] = outlen[1]; + int id = p.getID(); + // debug[2] = (byte)offset; debug[3] = (byte)id; + buffer.put((byte) id); + } else { + buffer = ByteBuffer.allocate(dataLength); + } + // System.arraycopy(data, 0, debug, 4, dataLength); + // Logging.debug(java.util.Arrays.toString(data)); + buffer.put(data, 0, dataLength); + buffer.flip(); + out.write(buffer); + return; - } catch (Exception e) { - e.printStackTrace(); + /* + * byte[] data = p.getData(); int packetLength = data.length; int + * dataLength = data.length; ByteBuffer buffer; if (!p.isBare()) { + * buffer = ByteBuffer.allocate(dataLength + 3); packetLength++; if + * (data.length >= 160) { buffer.put((byte) (160 + (packetLength / + * 256))); buffer.put((byte) (packetLength & 0xff)); } else { + * buffer.put((byte) (packetLength)); if (dataLength > 0) { + * dataLength--; buffer.put((byte) data[dataLength]); } } + * buffer.put((byte) p.getID()); } else { buffer = + * ByteBuffer.allocate(dataLength); } buffer.put(data, 0, + * dataLength); buffer.flip(); + * + * out.write(buffer); + */ + + } catch (Exception e) { + e.printStackTrace(); + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/connection/filter/ConnectionFilter.java b/GameServer/src/org/moparscape/msc/gs/connection/filter/ConnectionFilter.java index dd65529..8c34be8 100644 --- a/GameServer/src/org/moparscape/msc/gs/connection/filter/ConnectionFilter.java +++ b/GameServer/src/org/moparscape/msc/gs/connection/filter/ConnectionFilter.java @@ -18,7 +18,8 @@ public class ConnectionFilter extends BlacklistFilter { final InetSocketAddress a = (InetSocketAddress) sa; final Integer val = connections.get(a); System.out.println(val); - final Integer retVal = connections.put(a, val == null ? 1 : val + 1); + final Integer retVal = connections + .put(a, val == null ? 1 : val + 1); if (retVal != null && retVal > BLOCK_THRESHOLD) { block(a.getAddress()); } @@ -33,7 +34,8 @@ public class ConnectionFilter extends BlacklistFilter { final InetSocketAddress a = (InetSocketAddress) sa; final Integer val = connections.get(a); System.out.println(val); - final Integer retVal = connections.put(a, val == null ? 1 : val + 1); + final Integer retVal = connections + .put(a, val == null ? 1 : val + 1); if (retVal != null && retVal - 1 <= BLOCK_THRESHOLD) { unblock(a.getAddress()); } diff --git a/GameServer/src/org/moparscape/msc/gs/core/ClientUpdater.java b/GameServer/src/org/moparscape/msc/gs/core/ClientUpdater.java index 5cf457c..58c2846 100644 --- a/GameServer/src/org/moparscape/msc/gs/core/ClientUpdater.java +++ b/GameServer/src/org/moparscape/msc/gs/core/ClientUpdater.java @@ -23,7 +23,6 @@ import org.moparscape.msc.gs.util.Logger; import org.moparscape.msc.gs.util.Processor; import org.moparscape.msc.gs.util.WorkGroup; - public final class ClientUpdater implements Processor { public static int pktcount = 0; @@ -39,11 +38,12 @@ public final class ClientUpdater implements Processor { private EntityList players = world.getPlayers(); private WorkGroup clientInformerGroup = null; - + public ClientUpdater() { world.setClientUpdater(this); this.clientInformerGroup = new WorkGroup(this); } + /** * Sends queued packets to each player */ @@ -64,6 +64,7 @@ public final class ClientUpdater implements Processor { e.printStackTrace(); } } + /** * Update player/npc appearances, game objects, items, wall objects, ping */ @@ -92,13 +93,14 @@ public final class ClientUpdater implements Processor { for (Npc n : npcs) { n.setAppearnceChanged(false); - + } } public static boolean threaded = false; public volatile boolean updatingCollections; + public void doMajor() { Long delay; Long now = System.currentTimeMillis(); @@ -106,66 +108,74 @@ public final class ClientUpdater implements Processor { updateNpcPositions(); delay = System.currentTimeMillis() - now; - if(delay > 299) Logger.println("updateNpcPositions() is taking longer than it should, exactly " + delay + "ms"); + if (delay > 299) + Logger.println("updateNpcPositions() is taking longer than it should, exactly " + + delay + "ms"); now = System.currentTimeMillis(); updatePlayersPositions(); delay = System.currentTimeMillis() - now; - if(delay > 299) Logger.println("updatePlayersPositions() is taking longer than it should, exactly " + delay + "ms"); + if (delay > 299) + Logger.println("updatePlayersPositions() is taking longer than it should, exactly " + + delay + "ms"); now = System.currentTimeMillis(); updateMessageQueues(); delay = System.currentTimeMillis() - now; - if(delay > 299) Logger.println("updateMessageQueues() is taking longer than it should, exactly " + delay + "ms"); + if (delay > 299) + Logger.println("updateMessageQueues() is taking longer than it should, exactly " + + delay + "ms"); now = System.currentTimeMillis(); updateOffers(); - if(threaded) { + if (threaded) { try { clientInformerGroup.processWorkload(players); - } catch(InterruptedException ie) { + } catch (InterruptedException ie) { ie.printStackTrace(); } - } - else { + } else { for (Player p : players) { - //Logging.debug("Process for player " + p.getUsername() + " | threaded: " + threaded); - + // Logging.debug("Process for player " + p.getUsername() + + // " | threaded: " + threaded); + updateTimeouts(p); - + updatePlayerPositions(p); updateNpcPositions(p); updateGameObjects(p); updateWallObjects(p); updateItems(p); - + p.setFirstMajorUpdateSent(true); - + } updateCollections(); } } - + public void process(Player p) { - - //Logging.debug("Process for player " + p.getUsername() + " | threaded: " + threaded); - + + // Logging.debug("Process for player " + p.getUsername() + + // " | threaded: " + threaded); + updateTimeouts(p); - - updatePlayerPositions(p); // Must be done before updating any objects/items/npcs! + + updatePlayerPositions(p); // Must be done before updating any + // objects/items/npcs! updateNpcPositions(p); updateGameObjects(p); updateWallObjects(p); updateItems(p); - + p.setFirstMajorUpdateSent(true); - } + } /** * Updates collections, new becomes known, removing is removed etc. @@ -183,19 +193,19 @@ public final class ClientUpdater implements Processor { p.getWatchedItems().update(); p.getWatchedNpcs().update(); - //p.clearProjectilesNeedingDisplayed(); - //p.clearPlayersNeedingHitsUpdate(); - //p.clearNpcsNeedingHitsUpdate(); - //p.clearChatMessagesNeedingDisplayed(); - //p.clearNpcMessagesNeedingDisplayed(); - //p.clearBubblesNeedingDisplayed(); + // p.clearProjectilesNeedingDisplayed(); + // p.clearPlayersNeedingHitsUpdate(); + // p.clearNpcsNeedingHitsUpdate(); + // p.clearChatMessagesNeedingDisplayed(); + // p.clearNpcMessagesNeedingDisplayed(); + // p.clearBubblesNeedingDisplayed(); p.resetSpriteChanged(); - //p.setAppearnceChanged(false); + // p.setAppearnceChanged(false); } for (Npc n : npcs) { n.resetSpriteChanged(); - //n.setAppearnceChanged(false); + // n.setAppearnceChanged(false); } updatingCollections = false; } @@ -208,7 +218,7 @@ public final class ClientUpdater implements Processor { RSCPacket temp = gameObjectPositionBuilder.getPacket(); if (temp != null) { p.getActionSender().addPacket(temp); - //p.getSession().write(temp); + // p.getSession().write(temp); } } @@ -220,7 +230,7 @@ public final class ClientUpdater implements Processor { RSCPacket temp = itemPositionBuilder.getPacket(); if (temp != null) { p.getActionSender().addPacket(temp); - //p.getSession().write(temp); + // p.getSession().write(temp); } } @@ -233,33 +243,43 @@ public final class ClientUpdater implements Processor { if (message == null || !sender.loggedIn()) { continue; } - String s = DataConversions.byteToString(message.getMessage(), 0, message.getMessage().length); + String s = DataConversions.byteToString(message.getMessage(), 0, + message.getMessage().length); s = s.toLowerCase(); String k = s; s = s.replace(" ", ""); s = s.replace(".", ""); - if (s.contains("#adm#") || s.contains("#mod#") || s.contains("#pmd#")) { - sender.getActionSender().sendMessage("@red@Your last message was not sent out due to an illegal string"); - return; - } - if(sender.isMuted()) { - sender.getActionSender().sendMessage("You are muted, you cannot send messages"); + if (s.contains("#adm#") || s.contains("#mod#") + || s.contains("#pmd#")) { + sender.getActionSender() + .sendMessage( + "@red@Your last message was not sent out due to an illegal string"); return; - } + } + if (sender.isMuted()) { + sender.getActionSender().sendMessage( + "You are muted, you cannot send messages"); + return; + } List recievers = sender.getViewArea().getPlayersInView(); ArrayList recieverUsernames = new ArrayList(); - for(Player p : recievers) + for (Player p : recievers) recieverUsernames.add(p.getUsername()); - - world.addEntryToSnapshots(new Chatlog(sender.getUsername(), k, recieverUsernames)); + + world.addEntryToSnapshots(new Chatlog(sender.getUsername(), k, + recieverUsernames)); for (Player recipient : recievers) { - if (sender.getIndex() == recipient.getIndex() || !recipient.loggedIn()) { + if (sender.getIndex() == recipient.getIndex() + || !recipient.loggedIn()) { continue; } - if (recipient.getPrivacySetting(0) && !recipient.isFriendsWith(sender.getUsernameHash()) && !sender.isPMod()) { + if (recipient.getPrivacySetting(0) + && !recipient.isFriendsWith(sender.getUsernameHash()) + && !sender.isPMod()) { continue; } - if (recipient.isIgnoring(sender.getUsernameHash()) && !sender.isPMod()) { + if (recipient.isIgnoring(sender.getUsernameHash()) + && !sender.isPMod()) { continue; } recipient.informOfChatMessage(message); @@ -276,7 +296,7 @@ public final class ClientUpdater implements Processor { RSCPacket temp = npcApperanceBuilder.getPacket(); if (temp != null) { p.getActionSender().addPacket(temp); - //p.getSession().write(temp); + // p.getSession().write(temp); } } @@ -301,7 +321,7 @@ public final class ClientUpdater implements Processor { RSCPacket temp = npcPositionPacketBuilder.getPacket(); if (temp != null) { p.getActionSender().addPacket(temp); - //p.getSession().write(temp); + // p.getSession().write(temp); } } @@ -338,7 +358,7 @@ public final class ClientUpdater implements Processor { RSCPacket temp = playerApperanceBuilder.getPacket(); if (temp != null) { p.getActionSender().addPacket(temp); - //p.getSession().write(temp); + // p.getSession().write(temp); } } @@ -351,7 +371,7 @@ public final class ClientUpdater implements Processor { RSCPacket temp = playerPositionBuilder.getPacket(); if (temp != null) { p.getActionSender().addPacket(temp); - //p.getSession().write(temp); + // p.getSession().write(temp); } } @@ -392,7 +412,9 @@ public final class ClientUpdater implements Processor { p.destroy(false); } } else if (curTime - p.getLastMoved() >= 900000) { - p.getActionSender().sendMessage("@cya@You have not moved for 15 mins, please move to a new area to avoid logout."); + p.getActionSender() + .sendMessage( + "@cya@You have not moved for 15 mins, please move to a new area to avoid logout."); p.warnToMove(); } } @@ -404,9 +426,8 @@ public final class ClientUpdater implements Processor { wallObjectPositionPacketBuilder.setPlayer(p); RSCPacket temp = wallObjectPositionPacketBuilder.getPacket(); if (temp != null) { - //p.getSession().write(temp); + // p.getSession().write(temp); p.getActionSender().addPacket(temp); } } } - diff --git a/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java b/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java index d684417..6ce1f6d 100644 --- a/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/core/DelayedEventHandler.java @@ -9,77 +9,77 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.util.Logger; - public final class DelayedEventHandler { - private static World world = Instance.getWorld(); - private ArrayList events = new ArrayList(); - private ArrayList toAdd = new ArrayList(); + private static World world = Instance.getWorld(); + private ArrayList events = new ArrayList(); + private ArrayList toAdd = new ArrayList(); - public DelayedEventHandler() { - world.setDelayedEventHandler(this); - } + public DelayedEventHandler() { + world.setDelayedEventHandler(this); + } - public void add(DelayedEvent event) { + public void add(DelayedEvent event) { if (!events.contains(event)) { - toAdd.add(event); + toAdd.add(event); } - } - - public boolean contains(DelayedEvent event) { - return events.contains(event); - } - - public void doEvents() { - try { - if (toAdd.size() > 0) { - events.addAll(toAdd); - toAdd.clear(); - } - - Iterator iterator = events.iterator(); - while (iterator.hasNext()) { - DelayedEvent event = iterator.next(); - - if (event == null) { - iterator.remove(); - continue; - } - - if (event.shouldRun()) { - event.run(); - event.updateLastRun(); - } - if (event.shouldRemove()) { - iterator.remove(); - } - } - } catch (Exception e) { - e.printStackTrace(); - Logger.println("Error @ doEvents(): " + e); - } - } - - public ArrayList getEvents() { - return events; - } - - public void remove(DelayedEvent event) { - events.remove(event); - } - - public void removePlayersEvents(Player player) { - try { - Iterator iterator = events.iterator(); - while (iterator.hasNext()) { - DelayedEvent event = iterator.next(); - if (event.belongsTo(player)) { - iterator.remove(); - } - } - } catch (Exception e) { - Logger.println("Error @ removePlayer, IP address:" + player.getCurrentIP() + " Name: " + player.getUsername()); - e.printStackTrace(); } - } + public boolean contains(DelayedEvent event) { + return events.contains(event); + } + + public void doEvents() { + try { + if (toAdd.size() > 0) { + events.addAll(toAdd); + toAdd.clear(); + } + + Iterator iterator = events.iterator(); + while (iterator.hasNext()) { + DelayedEvent event = iterator.next(); + + if (event == null) { + iterator.remove(); + continue; + } + + if (event.shouldRun()) { + event.run(); + event.updateLastRun(); + } + if (event.shouldRemove()) { + iterator.remove(); + } + } + } catch (Exception e) { + e.printStackTrace(); + Logger.println("Error @ doEvents(): " + e); + } + } + + public ArrayList getEvents() { + return events; + } + + public void remove(DelayedEvent event) { + events.remove(event); + } + + public void removePlayersEvents(Player player) { + try { + Iterator iterator = events.iterator(); + while (iterator.hasNext()) { + DelayedEvent event = iterator.next(); + if (event.belongsTo(player)) { + iterator.remove(); + } + } + } catch (Exception e) { + Logger.println("Error @ removePlayer, IP address:" + + player.getCurrentIP() + " Name: " + player.getUsername()); + e.printStackTrace(); + } + + } } diff --git a/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java b/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java index ef136e5..9348146 100644 --- a/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java +++ b/GameServer/src/org/moparscape/msc/gs/core/GameEngine.java @@ -5,31 +5,19 @@ import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.Collections; -import java.util.HashMap; import java.util.Iterator; -import java.util.Map; import java.util.TreeMap; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.TimeZone; - import org.apache.mina.common.IoSession; import org.moparscape.msc.config.Config; -import org.moparscape.msc.config.Constants; -import org.moparscape.msc.config.Formulae; import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.connection.PacketQueue; import org.moparscape.msc.gs.connection.RSCPacket; import org.moparscape.msc.gs.connection.filter.OSLevelBlocking; import org.moparscape.msc.gs.event.DelayedEvent; -import org.moparscape.msc.gs.event.MiniEvent; import org.moparscape.msc.gs.model.ActiveTile; -import org.moparscape.msc.gs.model.Item; import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; -import org.moparscape.msc.gs.model.Point; import org.moparscape.msc.gs.model.Shop; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.model.snapshot.Snapshot; @@ -37,7 +25,6 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.phandler.PacketHandlerDef; import org.moparscape.msc.gs.plugins.dependencies.NpcAI; import org.moparscape.msc.gs.tools.Captcha; -import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; import org.moparscape.msc.gs.util.PersistenceManager; @@ -128,10 +115,10 @@ public final class GameEngine extends Thread { * getAddress(session); String ip = addr.toString(); ip = * ip.replaceAll("/",""); long now = System.currentTimeMillis(); int c = 0; * if(counts.containsKey(addr) && clients.containsKey(addr)) { try { c = - * counts.get(addr); } catch(Exception e) { Logging.debug("Error: " + - * e); } if(c >= 10) { if(!written.containsKey(addr)) { try { - * Logging.debug("Dummy packet flooder IP: " + ip); BufferedWriter bf2 - * = new BufferedWriter(new FileWriter("dummy.log", true)); + * counts.get(addr); } catch(Exception e) { Logging.debug("Error: " + e); } + * if(c >= 10) { if(!written.containsKey(addr)) { try { + * Logging.debug("Dummy packet flooder IP: " + ip); BufferedWriter bf2 = new + * BufferedWriter(new FileWriter("dummy.log", true)); * bf2.write("sudo /sbin/route add " + addr.getHostAddress() + * " gw 127.0.0.1"); bf2.newLine(); bf2.close(); written.put(addr, 1); } * catch(Exception e) { System.err.println(e);} } } } if @@ -204,7 +191,7 @@ public final class GameEngine extends Thread { private void processEvents() { eventHandler.doEvents(); } - + public DelayedEventHandler getEventHandler() { return eventHandler; } @@ -309,9 +296,11 @@ public final class GameEngine extends Thread { } time = System.currentTimeMillis(); - eventHandler.add(new DelayedEvent(null, Config.GARBAGE_COLLECT_INTERVAL) { // Ran every - // 50*2 - // minutes + eventHandler + .add(new DelayedEvent(null, Config.GARBAGE_COLLECT_INTERVAL) { // Ran + // every + // 50*2 + // minutes @Override public void run() { new Thread(new Runnable() { diff --git a/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java b/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java index 748d880..c27df9b 100644 --- a/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java +++ b/GameServer/src/org/moparscape/msc/gs/core/LoginConnector.java @@ -20,216 +20,223 @@ import org.moparscape.msc.gs.phandler.PacketHandlerDef; import org.moparscape.msc.gs.util.Logger; import org.moparscape.msc.gs.util.PersistenceManager; - public class LoginConnector { - /** - * A packet builder - */ - private MiscPacketBuilder actionSender = new MiscPacketBuilder(this); - /** - * Connection attempts - */ - private int connectionAttempts = 0; - /** - * Connection Handler - */ - private IoHandler connectionHandler = new LSConnectionHandler(this); - /** - * The mapping of packet IDs to their handler - */ - private TreeMap packetHandlers = new TreeMap(); - /** - * The packet queue to be processed - */ - private PacketQueue packetQueue; - /** - * World registered - */ - private boolean registered = false; - /** - * Should we be running? - */ - private boolean running = true; - /** - * IoSession - */ - private IoSession session; - /** - * The mapping of packet UIDs to their handler - */ - private TreeMap uniqueHandlers = new TreeMap(); + /** + * A packet builder + */ + private MiscPacketBuilder actionSender = new MiscPacketBuilder(this); + /** + * Connection attempts + */ + private int connectionAttempts = 0; + /** + * Connection Handler + */ + private IoHandler connectionHandler = new LSConnectionHandler(this); + /** + * The mapping of packet IDs to their handler + */ + private TreeMap packetHandlers = new TreeMap(); + /** + * The packet queue to be processed + */ + private PacketQueue packetQueue; + /** + * World registered + */ + private boolean registered = false; + /** + * Should we be running? + */ + private boolean running = true; + /** + * IoSession + */ + private IoSession session; + /** + * The mapping of packet UIDs to their handler + */ + private TreeMap uniqueHandlers = new TreeMap(); - public int getConnectionAttempts() { - return connectionAttempts; - } - - public void setConnectionAttempts(int connectionAttempts) { - this.connectionAttempts = connectionAttempts; - } - - public IoHandler getConnectionHandler() { - return connectionHandler; - } - - public void setConnectionHandler(IoHandler connectionHandler) { - this.connectionHandler = connectionHandler; - } - - public TreeMap getPacketHandlers() { - return packetHandlers; - } - - public void setPacketHandlers(TreeMap packetHandlers) { - this.packetHandlers = packetHandlers; - } - - public boolean isRunning() { - return running; - } - - public void setRunning(boolean running) { - this.running = running; - } - - public TreeMap getUniqueHandlers() { - return uniqueHandlers; - } - - public void setUniqueHandlers(TreeMap uniqueHandlers) { - this.uniqueHandlers = uniqueHandlers; - } - - public void setActionSender(MiscPacketBuilder actionSender) { - this.actionSender = actionSender; - } - - public void setPacketQueue(PacketQueue packetQueue) { - this.packetQueue = packetQueue; - } - - public void setSession(IoSession session) { - this.session = session; - } - - public LoginConnector() { - packetQueue = new PacketQueue(); - loadPacketHandlers(); - reconnect(); - } - - public MiscPacketBuilder getActionSender() { - return actionSender; - } - - public PacketQueue getPacketQueue() { - return packetQueue; - } - - public IoSession getSession() { - return session; - } - - public boolean isRegistered() { - return registered; - } - - public void kill() { - running = false; - Logger.print("Unregistering world (" + Config.SERVER_NUM + ") with LS"); - actionSender.unregisterWorld(); - } - - private void loadPacketHandlers() { - PacketHandlerDef[] handlerDefs = (PacketHandlerDef[]) PersistenceManager.load("LSPacketHandlers.xml"); - for (PacketHandlerDef handlerDef : handlerDefs) { - try { - String className = handlerDef.getClassName(); - Class c = Class.forName(className); - if (c != null) { - PacketHandler handler = (PacketHandler) c.newInstance(); - for (int packetID : handlerDef.getAssociatedPackets()) { - packetHandlers.put(packetID, handler); - } - } - } catch (Exception e) { - Logger.error(e); - } + public int getConnectionAttempts() { + return connectionAttempts; } - } - public void processIncomingPackets() { - for (LSPacket p : packetQueue.getPackets()) { - PacketHandler handler; - if (((handler = uniqueHandlers.get(p.getUID())) != null) || ((handler = packetHandlers.get(p.getID())) != null)) { + public void setConnectionAttempts(int connectionAttempts) { + this.connectionAttempts = connectionAttempts; + } + + public IoHandler getConnectionHandler() { + return connectionHandler; + } + + public void setConnectionHandler(IoHandler connectionHandler) { + this.connectionHandler = connectionHandler; + } + + public TreeMap getPacketHandlers() { + return packetHandlers; + } + + public void setPacketHandlers(TreeMap packetHandlers) { + this.packetHandlers = packetHandlers; + } + + public boolean isRunning() { + return running; + } + + public void setRunning(boolean running) { + this.running = running; + } + + public TreeMap getUniqueHandlers() { + return uniqueHandlers; + } + + public void setUniqueHandlers(TreeMap uniqueHandlers) { + this.uniqueHandlers = uniqueHandlers; + } + + public void setActionSender(MiscPacketBuilder actionSender) { + this.actionSender = actionSender; + } + + public void setPacketQueue(PacketQueue packetQueue) { + this.packetQueue = packetQueue; + } + + public void setSession(IoSession session) { + this.session = session; + } + + public LoginConnector() { + packetQueue = new PacketQueue(); + loadPacketHandlers(); + reconnect(); + } + + public MiscPacketBuilder getActionSender() { + return actionSender; + } + + public PacketQueue getPacketQueue() { + return packetQueue; + } + + public IoSession getSession() { + return session; + } + + public boolean isRegistered() { + return registered; + } + + public void kill() { + running = false; + Logger.print("Unregistering world (" + Config.SERVER_NUM + ") with LS"); + actionSender.unregisterWorld(); + } + + private void loadPacketHandlers() { + PacketHandlerDef[] handlerDefs = (PacketHandlerDef[]) PersistenceManager + .load("LSPacketHandlers.xml"); + for (PacketHandlerDef handlerDef : handlerDefs) { + try { + String className = handlerDef.getClassName(); + Class c = Class.forName(className); + if (c != null) { + PacketHandler handler = (PacketHandler) c.newInstance(); + for (int packetID : handlerDef.getAssociatedPackets()) { + packetHandlers.put(packetID, handler); + } + } + } catch (Exception e) { + Logger.error(e); + } + } + } + + public void processIncomingPackets() { + for (LSPacket p : packetQueue.getPackets()) { + PacketHandler handler; + if (((handler = uniqueHandlers.get(p.getUID())) != null) + || ((handler = packetHandlers.get(p.getID())) != null)) { + try { + handler.handlePacket(p, session); + uniqueHandlers.remove(p.getUID()); + } catch (Exception e) { + Logger.error("Exception with p[" + p.getID() + + "] from LOGIN_SERVER: " + e.getMessage()); + } + } else { + Logger.error("Unhandled packet from LS: " + p.getID()); + } + } + } + + public boolean reconnect() { try { - handler.handlePacket(p, session); - uniqueHandlers.remove(p.getUID()); + Logger.println("Attempting to connect to LS"); + SocketConnector conn = new SocketConnector(); + SocketConnectorConfig config = new SocketConnectorConfig(); + ((SocketSessionConfig) config.getSessionConfig()) + .setKeepAlive(true); + ((SocketSessionConfig) config.getSessionConfig()) + .setTcpNoDelay(true); + ConnectFuture future = conn.connect(new InetSocketAddress( + Config.LS_IP, Config.LS_PORT), connectionHandler, config); + future.join(3000); + if (future.isConnected()) { + session = future.getSession(); + Logger.println("Registering world (" + Config.SERVER_NUM + + ") with LS"); + actionSender.registerWorld(); + connectionAttempts = 0; + return true; + } + if (connectionAttempts++ >= 100) { + Logger.println("Unable to connect to LS, giving up after " + + connectionAttempts + " tries"); + System.exit(1); + return false; + } + return reconnect(); + } catch (Exception e) { - Logger.error("Exception with p[" + p.getID() + "] from LOGIN_SERVER: " + e.getMessage()); + Logger.println("Error connecting to LS: " + e.getMessage()); + return false; } - } else { - Logger.error("Unhandled packet from LS: " + p.getID()); - } } - } - public boolean reconnect() { - try { - Logger.println("Attempting to connect to LS"); - SocketConnector conn = new SocketConnector(); - SocketConnectorConfig config = new SocketConnectorConfig(); - ((SocketSessionConfig) config.getSessionConfig()).setKeepAlive(true); - ((SocketSessionConfig) config.getSessionConfig()).setTcpNoDelay(true); - ConnectFuture future = conn.connect(new InetSocketAddress(Config.LS_IP, Config.LS_PORT), connectionHandler, config); - future.join(3000); - if (future.isConnected()) { - session = future.getSession(); - Logger.println("Registering world (" + Config.SERVER_NUM + ") with LS"); - actionSender.registerWorld(); - connectionAttempts = 0; - return true; - } - if (connectionAttempts++ >= 100) { - Logger.println("Unable to connect to LS, giving up after " + connectionAttempts + " tries"); - System.exit(1); - return false; - } - return reconnect(); - - } catch (Exception e) { - Logger.println("Error connecting to LS: " + e.getMessage()); - return false; + public boolean running() { + return running; } - } - public boolean running() { - return running; - } - - public synchronized void sendQueuedPackets() { - try { - List packets = actionSender.getPackets(); - for (LSPacket packet : packets) { - session.write(packet); - } - actionSender.clearPackets(); - } catch (Exception e) { - Logger.println("Stack processInc: "); - e.printStackTrace(); + public synchronized void sendQueuedPackets() { + try { + List packets = actionSender.getPackets(); + for (LSPacket packet : packets) { + session.write(packet); + } + actionSender.clearPackets(); + } catch (Exception e) { + Logger.println("Stack processInc: "); + e.printStackTrace(); + } } - } - public void setHandler(long uID, PacketHandler handler) { - uniqueHandlers.put(uID, handler); - } - - public void setRegistered(boolean registered) { - if (registered) { - this.registered = true; - Logger.print("World successfully registered with LS"); - } else { - Logger.error(new Exception("Error registering world")); + public void setHandler(long uID, PacketHandler handler) { + uniqueHandlers.put(uID, handler); + } + + public void setRegistered(boolean registered) { + if (registered) { + this.registered = true; + Logger.print("World successfully registered with LS"); + } else { + Logger.error(new Exception("Error registering world")); + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/db/DBConnection.java b/GameServer/src/org/moparscape/msc/gs/db/DBConnection.java index 8d65144..3ab341e 100644 --- a/GameServer/src/org/moparscape/msc/gs/db/DBConnection.java +++ b/GameServer/src/org/moparscape/msc/gs/db/DBConnection.java @@ -1,7 +1,5 @@ package org.moparscape.msc.gs.db; - - import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; @@ -10,14 +8,11 @@ import java.sql.Statement; import org.moparscape.msc.config.Config; import org.moparscape.msc.gs.util.Logger; - - - /** * Used to interact with the database. */ public class DBConnection { - + /** * The database connection in use */ @@ -30,18 +25,19 @@ public class DBConnection { * Report2Database handleing logic */ private static ReportHandlerQueries reportDB = new ReportHandlerQueries(); + /** * Getter for reportDB + * * @return reportDB */ public static ReportHandlerQueries getReport() { return reportDB; } - - static - { + + static { testForDriver(); - } + } /** * Tests we have a mysql Driver @@ -49,8 +45,7 @@ public class DBConnection { private static void testForDriver() { try { Class.forName("com.mysql.jdbc.Driver"); - } - catch (ClassNotFoundException cnfe) { + } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } } @@ -59,25 +54,27 @@ public class DBConnection { * Instantiates a new database connection */ public DBConnection() { - if(!createConnection()) { + if (!createConnection()) { new Exception("Unable to connect to MySQL").printStackTrace(); System.exit(1); - } - else { + } else { Logger.println("Database connection achieved."); } } + public void initilizePreparedStatements(DBConnection db) { reportDB.initilizePreparedStatements(db); } + public boolean createConnection() { try { - con = DriverManager.getConnection("jdbc:mysql://" + Config.MYSQL_HOST + "/" + Config.MYSQL_DB, Config.MYSQL_USER, Config.MYSQL_PASS); + con = DriverManager.getConnection("jdbc:mysql://" + + Config.MYSQL_HOST + "/" + Config.MYSQL_DB, + Config.MYSQL_USER, Config.MYSQL_PASS); statement = con.createStatement(); statement.setEscapeProcessing(true); return isConnected(); - } - catch(SQLException e) { + } catch (SQLException e) { e.printStackTrace(); return false; } @@ -87,52 +84,43 @@ public class DBConnection { try { statement.executeQuery("SELECT CURRENT_DATE"); return true; - } - catch(SQLException e) { + } catch (SQLException e) { return false; } } + public Connection getConnection() { return con; } - /* - public synchronized int updateUserStats(String user, int messages, int modes, int kicks, int kicked, long lastTimeSpoken, int joins, int parts, String randomstring, int moderatedchan) throws SQLException { - existingRecord.setString(1, user); - existingRecord.execute(); - if(existingRecord.getResultSet().next()) { // Existing - existingUserQuery.setInt(1, messages); - existingUserQuery.setInt(2, modes); - existingUserQuery.setInt(3, kicks); - existingUserQuery.setInt(4, kicked); - existingUserQuery.setLong(5, lastTimeSpoken); - existingUserQuery.setInt(6, joins); - existingUserQuery.setInt(7, parts); - existingUserQuery.setString(8, randomstring); - existingUserQuery.setInt(9, moderatedchan); - existingUserQuery.setString(10, user); - return existingUserQuery.executeUpdate(); - } - else { // New record - newUserQuery.setString(1, user); - newUserQuery.setInt(2, messages); - newUserQuery.setInt(3, modes); - newUserQuery.setInt(4, kicks); - newUserQuery.setInt(5, kicked); - newUserQuery.setLong(6, lastTimeSpoken); - newUserQuery.setInt(7, joins); - newUserQuery.setInt(8, parts); - newUserQuery.setString(9, randomstring); - newUserQuery.setInt(10, moderatedchan); - return newUserQuery.executeUpdate(); - } - } - */ + /* + * public synchronized int updateUserStats(String user, int messages, int + * modes, int kicks, int kicked, long lastTimeSpoken, int joins, int parts, + * String randomstring, int moderatedchan) throws SQLException { + * existingRecord.setString(1, user); existingRecord.execute(); + * if(existingRecord.getResultSet().next()) { // Existing + * existingUserQuery.setInt(1, messages); existingUserQuery.setInt(2, + * modes); existingUserQuery.setInt(3, kicks); existingUserQuery.setInt(4, + * kicked); existingUserQuery.setLong(5, lastTimeSpoken); + * existingUserQuery.setInt(6, joins); existingUserQuery.setInt(7, parts); + * existingUserQuery.setString(8, randomstring); existingUserQuery.setInt(9, + * moderatedchan); existingUserQuery.setString(10, user); return + * existingUserQuery.executeUpdate(); } else { // New record + * newUserQuery.setString(1, user); newUserQuery.setInt(2, messages); + * newUserQuery.setInt(3, modes); newUserQuery.setInt(4, kicks); + * newUserQuery.setInt(5, kicked); newUserQuery.setLong(6, lastTimeSpoken); + * newUserQuery.setInt(7, joins); newUserQuery.setInt(8, parts); + * newUserQuery.setString(9, randomstring); newUserQuery.setInt(10, + * moderatedchan); return newUserQuery.executeUpdate(); } + * + * } + */ /** * Closes the database conection. - * - * @throws SQLException if there was an error when closing the connection + * + * @throws SQLException + * if there was an error when closing the connection */ public void close() throws SQLException { con.close(); diff --git a/GameServer/src/org/moparscape/msc/gs/db/ReportHandlerQueries.java b/GameServer/src/org/moparscape/msc/gs/db/ReportHandlerQueries.java index 91f6036..fe9cf39 100644 --- a/GameServer/src/org/moparscape/msc/gs/db/ReportHandlerQueries.java +++ b/GameServer/src/org/moparscape/msc/gs/db/ReportHandlerQueries.java @@ -13,80 +13,94 @@ import org.moparscape.msc.gs.model.snapshot.Chatlog; import org.moparscape.msc.gs.model.snapshot.Snapshot; import org.moparscape.msc.gs.util.Logger; - public class ReportHandlerQueries { /** * Inserts a new row into "msc2_reports" table */ private PreparedStatement insertNewReportRow; - + private PreparedStatement insertNewDupeDataRow; + /** * Initilizes prepared statements, if failed, shuts down the server. */ public void initilizePreparedStatements(DBConnection db) { try { - insertNewReportRow = db.getConnection().prepareStatement("INSERT INTO `msc2_reports` (`from`, `about`, `time`, `reason`, `snapshot_from`,`snapshot_about`,`chatlogs`, `from_x`, `from_y`, `about_x`, `about_y`) VALUES(?,?,?,?,?,?,?,?,?,?,?)"); - insertNewDupeDataRow = db.getConnection().prepareStatement("INSERT INTO `dupe_data` (`user`, `userhash`, `string`, `time`) VALUES(?,?,?,?);"); - + insertNewReportRow = db + .getConnection() + .prepareStatement( + "INSERT INTO `msc2_reports` (`from`, `about`, `time`, `reason`, `snapshot_from`,`snapshot_about`,`chatlogs`, `from_x`, `from_y`, `about_x`, `about_y`) VALUES(?,?,?,?,?,?,?,?,?,?,?)"); + insertNewDupeDataRow = db + .getConnection() + .prepareStatement( + "INSERT INTO `dupe_data` (`user`, `userhash`, `string`, `time`) VALUES(?,?,?,?);"); + } catch (SQLException e) { e.printStackTrace(); Logger.error(e); } } + /** * Submits a report to the database * * Chatlogs, snapshots, locations etc are generated inside this method. * - * @param from Players usernameHash (who reported) - * @param about Players usernameHash (who got reported) - * @param reason What type of a report is this + * @param from + * Players usernameHash (who reported) + * @param about + * Players usernameHash (who got reported) + * @param reason + * What type of a report is this */ - public synchronized void submitRepot(long from, long about, byte reason, Player from2) { - - long time = GameEngine.getTime()/1000; - String f = org.moparscape.msc.gs.tools.DataConversions.hashToUsername(from); - String a = org.moparscape.msc.gs.tools.DataConversions.hashToUsername(about); - + public synchronized void submitRepot(long from, long about, byte reason, + Player from2) { + + long time = GameEngine.getTime() / 1000; + String f = org.moparscape.msc.gs.tools.DataConversions + .hashToUsername(from); + String a = org.moparscape.msc.gs.tools.DataConversions + .hashToUsername(about); + Player about2 = World.getWorld().getPlayer(about); int player2X; int player2Y; - if(about2 == null) { + if (about2 == null) { player2X = 0; player2Y = 0; - } - else { + } else { player2X = about2.getX(); player2Y = about2.getY(); } StringBuilder snapshot_from = new StringBuilder(); StringBuilder snapshot_about = new StringBuilder(); - + StringBuilder chatlog = new StringBuilder(); - Iterator i = Instance.getWorld().getSnapshots().descendingIterator(); + Iterator i = Instance.getWorld().getSnapshots() + .descendingIterator(); while (i.hasNext()) { Snapshot s = i.next(); - if(s instanceof Chatlog) { - Chatlog cl = (Chatlog)s; + if (s instanceof Chatlog) { + Chatlog cl = (Chatlog) s; if (cl.getRecievers().contains(a) || cl.getOwner().equals(a)) { - chatlog.append((cl.getTimestamp()/1000) + " <" + cl.getOwner() + "> " + cl.getMessage() + "\n"); + chatlog.append((cl.getTimestamp() / 1000) + " <" + + cl.getOwner() + "> " + cl.getMessage() + "\n"); } - } - else if (s instanceof Activity) { - Activity ac = (Activity)s; - if(ac.getOwner().equals(f)) { - snapshot_from.append((ac.getTimestamp()/1000) + " " + ac.getActivity() + "\n"); - } - else if(ac.getOwner().equals(a)) { - snapshot_about.append((ac.getTimestamp()/1000) + " " + ac.getActivity() + "\n"); + } else if (s instanceof Activity) { + Activity ac = (Activity) s; + if (ac.getOwner().equals(f)) { + snapshot_from.append((ac.getTimestamp() / 1000) + " " + + ac.getActivity() + "\n"); + } else if (ac.getOwner().equals(a)) { + snapshot_about.append((ac.getTimestamp() / 1000) + " " + + ac.getActivity() + "\n"); } } } try { insertNewReportRow.setLong(1, from); - insertNewReportRow.setLong(2, about); - insertNewReportRow.setLong(3, time); + insertNewReportRow.setLong(2, about); + insertNewReportRow.setLong(3, time); insertNewReportRow.setInt(4, reason); insertNewReportRow.setString(5, snapshot_from.toString()); insertNewReportRow.setString(6, snapshot_about.toString()); @@ -99,36 +113,39 @@ public class ReportHandlerQueries { } catch (SQLException e) { e.printStackTrace(); Logger.error(e); - } + } } - + public synchronized void submitDupeData(String username, Long hash) { StringBuilder data = new StringBuilder(); - Iterator i = Instance.getWorld().getSnapshots().descendingIterator(); + Iterator i = Instance.getWorld().getSnapshots() + .descendingIterator(); while (i.hasNext()) { Snapshot s = i.next(); - if(s instanceof Chatlog) { - Chatlog cl = (Chatlog)s; - if (cl.getRecievers().contains(username) || cl.getOwner().equals(username)) { - data.append((cl.getTimestamp()/1000) + " <" + cl.getOwner() + "> " + cl.getMessage() + "\n"); + if (s instanceof Chatlog) { + Chatlog cl = (Chatlog) s; + if (cl.getRecievers().contains(username) + || cl.getOwner().equals(username)) { + data.append((cl.getTimestamp() / 1000) + " <" + + cl.getOwner() + "> " + cl.getMessage() + "\n"); } - } - else if (s instanceof Activity) { - Activity ac = (Activity)s; - if(ac.getOwner().equals(username)) { - data.append((ac.getTimestamp()/1000) + " " + ac.getActivity() + "\n"); + } else if (s instanceof Activity) { + Activity ac = (Activity) s; + if (ac.getOwner().equals(username)) { + data.append((ac.getTimestamp() / 1000) + " " + + ac.getActivity() + "\n"); } } } try { insertNewDupeDataRow.setString(1, username); - insertNewDupeDataRow.setLong(2, hash); - insertNewDupeDataRow.setString(3, data.toString()); - insertNewDupeDataRow.setLong(4,GameEngine.getTime()); + insertNewDupeDataRow.setLong(2, hash); + insertNewDupeDataRow.setString(3, data.toString()); + insertNewDupeDataRow.setLong(4, GameEngine.getTime()); insertNewDupeDataRow.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); Logger.error(e); - } + } } } diff --git a/GameServer/src/org/moparscape/msc/gs/event/DelayedEvent.java b/GameServer/src/org/moparscape/msc/gs/event/DelayedEvent.java index 931d405..e48b366 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/DelayedEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/DelayedEvent.java @@ -7,78 +7,80 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public abstract class DelayedEvent { - public static final World world = Instance.getWorld(); - protected int delay = 500; - protected final DelayedEventHandler handler = Instance.getWorld().getDelayedEventHandler(); - private long lastRun = GameEngine.getTime(); - protected Player owner; - protected boolean matchRunning = true; - public Object[] args = null; + public static final World world = Instance.getWorld(); + protected int delay = 500; + protected final DelayedEventHandler handler = Instance.getWorld() + .getDelayedEventHandler(); + private long lastRun = GameEngine.getTime(); + protected Player owner; + protected boolean matchRunning = true; + public Object[] args = null; - // f2p - public DelayedEvent(Player owner, int delay) { - this.owner = owner; - this.delay = delay; - } + // f2p + public DelayedEvent(Player owner, int delay) { + this.owner = owner; + this.delay = delay; + } - public DelayedEvent(Player owner, int delay, Object[] arg) { - args = arg; - this.owner = owner; - this.delay = delay; - } + public DelayedEvent(Player owner, int delay, Object[] arg) { + args = arg; + this.owner = owner; + this.delay = delay; + } - public boolean belongsTo(Player player) { - return owner != null && owner.equals(player); - } + public boolean belongsTo(Player player) { + return owner != null && owner.equals(player); + } - public int getDelay() { - return delay; - } + public int getDelay() { + return delay; + } - public Object getIdentifier() { - return null; - } + public Object getIdentifier() { + return null; + } - public Player getOwner() { - return owner; - } + public Player getOwner() { + return owner; + } - public boolean hasOwner() { - return owner != null; - } + public boolean hasOwner() { + return owner != null; + } - public boolean is(DelayedEvent e) { - return (e.getIdentifier() != null && e.getIdentifier().equals(getIdentifier())); - } + public boolean is(DelayedEvent e) { + return (e.getIdentifier() != null && e.getIdentifier().equals( + getIdentifier())); + } - public abstract void run(); + public abstract void run(); - public void setDelay(int delay) { - this.delay = delay; - } + public void setDelay(int delay) { + this.delay = delay; + } - public void setLastRun(long time) { - lastRun = time; - } + public void setLastRun(long time) { + lastRun = time; + } - public final boolean shouldRemove() { - return !matchRunning; - } + public final boolean shouldRemove() { + return !matchRunning; + } - public final boolean shouldRun() { - return matchRunning && GameEngine.getTime() - lastRun >= delay; - } + public final boolean shouldRun() { + return matchRunning && GameEngine.getTime() - lastRun >= delay; + } - public final void stop() { - matchRunning = false; - } + public final void stop() { + matchRunning = false; + } - public int timeTillNextRun() { - int time = (int) (delay - (GameEngine.getTime() - lastRun)); - return time < 0 ? 0 : time; - } + public int timeTillNextRun() { + int time = (int) (delay - (GameEngine.getTime() - lastRun)); + return time < 0 ? 0 : time; + } - public final void updateLastRun() { - lastRun = GameEngine.getTime(); - } + public final void updateLastRun() { + lastRun = GameEngine.getTime(); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/event/DelayedQuestChat.java b/GameServer/src/org/moparscape/msc/gs/event/DelayedQuestChat.java index 413c2af..81a4172 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/DelayedQuestChat.java +++ b/GameServer/src/org/moparscape/msc/gs/event/DelayedQuestChat.java @@ -5,28 +5,28 @@ import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; public abstract class DelayedQuestChat extends DelayedEvent { - public int curIndex; - public String[] messages; - public Npc npc; - public Player owner; + public int curIndex; + public String[] messages; + public Npc npc; + public Player owner; - public DelayedQuestChat(Npc npc, Player owner, String[] messages) { - super(null, 2200); - this.owner = owner; - this.npc = npc; - this.messages = messages; - curIndex = 0; - } - - public abstract void finished(); - - public void run() { - owner.informOfNpcMessage(new ChatMessage(npc, messages[curIndex], owner)); - curIndex++; - if (curIndex == messages.length) { - finished(); - stop(); - return; + public DelayedQuestChat(Npc npc, Player owner, String[] messages) { + super(null, 2200); + this.owner = owner; + this.npc = npc; + this.messages = messages; + curIndex = 0; + } + + public abstract void finished(); + + public void run() { + owner.informOfNpcMessage(new ChatMessage(npc, messages[curIndex], owner)); + curIndex++; + if (curIndex == messages.length) { + finished(); + stop(); + return; + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java b/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java index 9d1b42c..759f7f6 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/DuelEvent.java @@ -7,98 +7,101 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.states.CombatState; import org.moparscape.msc.gs.tools.DataConversions; - public class DuelEvent extends DelayedEvent { - private Player affectedPlayer; - private int hits; + private Player affectedPlayer; + private int hits; - public DuelEvent(Player owner, Player affectedPlayer) { - super(owner, 1300); - this.affectedPlayer = affectedPlayer; - hits = 0; - } - - public boolean equals(Object o) { - if (o instanceof DuelEvent) { - DuelEvent e = (DuelEvent) o; - return e.belongsTo(owner) && e.getAffectedPlayer().equals(affectedPlayer); + public DuelEvent(Player owner, Player affectedPlayer) { + super(owner, 1300); + this.affectedPlayer = affectedPlayer; + hits = 0; } - return false; - } - public Player getAffectedPlayer() { - return affectedPlayer; - } - - public void run() { - if (!owner.loggedIn() || !affectedPlayer.loggedIn()) { - owner.resetCombat(CombatState.ERROR); - affectedPlayer.resetCombat(CombatState.ERROR); - return; - } - Player attacker, opponent; - if (hits++ % 2 == 0) { - attacker = owner; - opponent = affectedPlayer; - } else { - attacker = affectedPlayer; - opponent = owner; - } - if (opponent.getHits() <= 0) { - attacker.resetCombat(CombatState.WON); - opponent.resetCombat(CombatState.LOST); - return; - } - attacker.incHitsMade(); - attacker.setLastMoved(); - - int damage = (attacker instanceof Player && opponent instanceof Player ? Formulae.calcFightHit(attacker, opponent) : Formulae.calcFightHitWithNPC(attacker, opponent)); - opponent.setLastDamage(damage); - int newHp = opponent.getHits() - damage; - opponent.setHits(newHp); - ArrayList playersToInform = new ArrayList(); - playersToInform.addAll(opponent.getViewArea().getPlayersInView()); - playersToInform.addAll(attacker.getViewArea().getPlayersInView()); - for (Player p : playersToInform) { - p.informOfModifiedHits(opponent); - } - String combatSound = damage > 0 ? "combat1b" : "combat1a"; - - opponent.getActionSender().sendStat(3); - opponent.getActionSender().sendSound(combatSound); - attacker.getActionSender().sendSound(combatSound); - - if (newHp <= 0) { - opponent.killedBy(attacker, true); - int exp = DataConversions.roundUp(Formulae.combatExperience(opponent) / 4D); - switch (attacker.getCombatStyle()) { - case 0: - for (int x = 0; x < 3; x++) { - attacker.incExp(x, exp, true); - attacker.getActionSender().sendStat(x); + public boolean equals(Object o) { + if (o instanceof DuelEvent) { + DuelEvent e = (DuelEvent) o; + return e.belongsTo(owner) + && e.getAffectedPlayer().equals(affectedPlayer); + } + return false; + } + + public Player getAffectedPlayer() { + return affectedPlayer; + } + + public void run() { + if (!owner.loggedIn() || !affectedPlayer.loggedIn()) { + owner.resetCombat(CombatState.ERROR); + affectedPlayer.resetCombat(CombatState.ERROR); + return; + } + Player attacker, opponent; + if (hits++ % 2 == 0) { + attacker = owner; + opponent = affectedPlayer; + } else { + attacker = affectedPlayer; + opponent = owner; + } + if (opponent.getHits() <= 0) { + attacker.resetCombat(CombatState.WON); + opponent.resetCombat(CombatState.LOST); + return; + } + attacker.incHitsMade(); + attacker.setLastMoved(); + + int damage = (attacker instanceof Player && opponent instanceof Player ? Formulae + .calcFightHit(attacker, opponent) : Formulae + .calcFightHitWithNPC(attacker, opponent)); + opponent.setLastDamage(damage); + int newHp = opponent.getHits() - damage; + opponent.setHits(newHp); + ArrayList playersToInform = new ArrayList(); + playersToInform.addAll(opponent.getViewArea().getPlayersInView()); + playersToInform.addAll(attacker.getViewArea().getPlayersInView()); + for (Player p : playersToInform) { + p.informOfModifiedHits(opponent); + } + String combatSound = damage > 0 ? "combat1b" : "combat1a"; + + opponent.getActionSender().sendStat(3); + opponent.getActionSender().sendSound(combatSound); + attacker.getActionSender().sendSound(combatSound); + + if (newHp <= 0) { + opponent.killedBy(attacker, true); + int exp = DataConversions.roundUp(Formulae + .combatExperience(opponent) / 4D); + switch (attacker.getCombatStyle()) { + case 0: + for (int x = 0; x < 3; x++) { + attacker.incExp(x, exp, true); + attacker.getActionSender().sendStat(x); + } + break; + case 1: + attacker.incExp(2, exp * 3, true); + attacker.getActionSender().sendStat(2); + break; + case 2: + attacker.incExp(0, exp * 3, true); + attacker.getActionSender().sendStat(0); + break; + case 3: + attacker.incExp(1, exp * 3, true); + attacker.getActionSender().sendStat(1); + break; + } + attacker.incExp(3, exp, true); + attacker.getActionSender().sendStat(3); + + attacker.resetCombat(CombatState.WON); + opponent.resetCombat(CombatState.LOST); + + attacker.resetDueling(); + opponent.resetDueling(); } - break; - case 1: - attacker.incExp(2, exp * 3, true); - attacker.getActionSender().sendStat(2); - break; - case 2: - attacker.incExp(0, exp * 3, true); - attacker.getActionSender().sendStat(0); - break; - case 3: - attacker.incExp(1, exp * 3, true); - attacker.getActionSender().sendStat(1); - break; - } - attacker.incExp(3, exp, true); - attacker.getActionSender().sendStat(3); - - attacker.resetCombat(CombatState.WON); - opponent.resetCombat(CombatState.LOST); - - attacker.resetDueling(); - opponent.resetDueling(); } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java b/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java index 6012bba..2cb8467 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/FightEvent.java @@ -9,7 +9,6 @@ import org.moparscape.msc.gs.model.Mob; import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Path; import org.moparscape.msc.gs.model.Player; -import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.model.mini.Damage; import org.moparscape.msc.gs.states.CombatState; import org.moparscape.msc.gs.tools.DataConversions; @@ -83,20 +82,12 @@ public class FightEvent extends DelayedEvent { if (attacker.getHits() <= 0) { n.resetCombat(CombatState.ERROR); } - if (n == null) { - Player p = (Player) opponent; - p.resetCombat(CombatState.ERROR); - } } if (opponent instanceof Npc) { Npc n = (Npc) opponent; if (opponent.getHits() <= 0) { n.resetCombat(CombatState.ERROR); } - if (n == null) { - Player p = (Player) attacker; - p.resetCombat(CombatState.ERROR); - } } if (opponent instanceof Player && attacker instanceof Player) { if (((Player) opponent).isSleeping()) { diff --git a/GameServer/src/org/moparscape/msc/gs/event/MiniEvent.java b/GameServer/src/org/moparscape/msc/gs/event/MiniEvent.java index d8a43e9..c0f5097 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/MiniEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/MiniEvent.java @@ -4,18 +4,18 @@ import org.moparscape.msc.gs.model.Player; public abstract class MiniEvent extends SingleEvent { - public MiniEvent(Player owner) { - super(owner, 500); - } + public MiniEvent(Player owner) { + super(owner, 500); + } - public MiniEvent(Player owner, int delay) { - super(owner, delay); - } + public MiniEvent(Player owner, int delay) { + super(owner, delay); + } - public MiniEvent(Player owner, int delay, Object[] arg) { - super(owner, delay, arg); - } + public MiniEvent(Player owner, int delay, Object[] arg) { + super(owner, delay, arg); + } - public abstract void action(); + public abstract void action(); } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/event/ObjectRemover.java b/GameServer/src/org/moparscape/msc/gs/event/ObjectRemover.java index a52697c..b20796b 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/ObjectRemover.java +++ b/GameServer/src/org/moparscape/msc/gs/event/ObjectRemover.java @@ -6,34 +6,34 @@ import org.moparscape.msc.gs.model.GameObject; import org.moparscape.msc.gs.model.World; public class ObjectRemover extends DelayedEvent { - public static final World world = Instance.getWorld(); - private GameObject object; + public static final World world = Instance.getWorld(); + private GameObject object; - public ObjectRemover(GameObject object, int delay) { - super(null, delay); - this.object = object; - } - - public boolean equals(Object o) { - if (o instanceof ObjectRemover) { - return ((ObjectRemover) o).getObject().equals(getObject()); + public ObjectRemover(GameObject object, int delay) { + super(null, delay); + this.object = object; } - return false; - } - public GameObject getObject() { - return object; - } - - public void run() { - ActiveTile tile = world.getTile(object.getLocation()); - if (!tile.hasGameObject() || !tile.getGameObject().equals(object)) { - super.matchRunning = false; - return; + public boolean equals(Object o) { + if (o instanceof ObjectRemover) { + return ((ObjectRemover) o).getObject().equals(getObject()); + } + return false; + } + + public GameObject getObject() { + return object; + } + + public void run() { + ActiveTile tile = world.getTile(object.getLocation()); + if (!tile.hasGameObject() || !tile.getGameObject().equals(object)) { + super.matchRunning = false; + return; + } + tile.remove(object); + world.unregisterGameObject(object); + super.matchRunning = false; } - tile.remove(object); - world.unregisterGameObject(object); - super.matchRunning = false; - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java b/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java index 566e080..b3e2949 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/RangeEvent.java @@ -17,266 +17,295 @@ import org.moparscape.msc.gs.model.mini.Damage; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; - public class RangeEvent extends DelayedEvent { - private Mob affectedMob; - public int[][] allowedArrows = { { 189, 11, 638 }, // Shortbow - { 188, 11, 638 }, // Longbow - { 649, 11, 638 }, // Oak Shortbow - { 648, 11, 638, 640 }, // Oak Longbow - { 651, 11, 638, 640 }, // Willow Shortbow - { 650, 11, 638, 640, 642 }, // Willow Longbow - { 653, 11, 638, 640, 642 }, // Maple Shortbow - { 652, 11, 638, 640, 642, 644 }, // Maple Longbow - { 655, 11, 638, 640, 642, 644 }, // Yew Shortbow - { 654, 11, 638, 640, 642, 644, 646 }, // Yew Longbow - { 657, 11, 638, 640, 642, 644, 646 }, // Magic Shortbow - { 656, 11, 638, 640, 642, 644, 646 } // Magic Longbow - }; + private Mob affectedMob; + public int[][] allowedArrows = { { 189, 11, 638 }, // Shortbow + { 188, 11, 638 }, // Longbow + { 649, 11, 638 }, // Oak Shortbow + { 648, 11, 638, 640 }, // Oak Longbow + { 651, 11, 638, 640 }, // Willow Shortbow + { 650, 11, 638, 640, 642 }, // Willow Longbow + { 653, 11, 638, 640, 642 }, // Maple Shortbow + { 652, 11, 638, 640, 642, 644 }, // Maple Longbow + { 655, 11, 638, 640, 642, 644 }, // Yew Shortbow + { 654, 11, 638, 640, 642, 644, 646 }, // Yew Longbow + { 657, 11, 638, 640, 642, 644, 646 }, // Magic Shortbow + { 656, 11, 638, 640, 642, 644, 646 } // Magic Longbow + }; - private boolean firstRun = true; + private boolean firstRun = true; - public RangeEvent(Player owner, Mob affectedMob) { - super(owner, 2000); - this.affectedMob = affectedMob; - } - - public boolean equals(Object o) { - if (o instanceof RangeEvent) { - RangeEvent e = (RangeEvent) o; - return e.belongsTo(owner); + public RangeEvent(Player owner, Mob affectedMob) { + super(owner, 2000); + this.affectedMob = affectedMob; } - return false; - } - public Mob getAffectedMob() { - return affectedMob; - } - - private Item getArrows(int id) { - for (Item i : world.getTile(affectedMob.getLocation()).getItems()) { - if (i.getID() == id && i.visibleTo(owner) && !i.isRemoved()) { - return i; - } - } - return null; - } - - public void run() { - int bowID = owner.getRangeEquip(); - if (!owner.loggedIn() || (affectedMob instanceof Player && !((Player) affectedMob).loggedIn()) || affectedMob.getHits() <= 0 || !owner.checkAttack(affectedMob, true) || bowID < 0) { - owner.resetRange(); - return; - } - if (owner.withinRange(affectedMob, 5)) { - if (owner.isFollowing()) { - owner.resetFollowing(); - } - if (!owner.finishedPath()) { - owner.resetPath(); - } - } else { - owner.setFollowing(affectedMob); - return; - } - if (!new PathGenerator(owner.getX(), owner.getY(), affectedMob.getX(), affectedMob.getY()).isValid()) { - owner.getActionSender().sendMessage("I can't get a clear shot from here"); - owner.resetPath(); - return; - } - boolean xbow = DataConversions.inArray(Formulae.xbowIDs, bowID); - int arrowID = -1; - for (int aID : (xbow ? Formulae.boltIDs : Formulae.arrowIDs)) { - int slot = owner.getInventory().getLastIndexById(aID); - if (slot < 0) { - continue; - } - InvItem arrow = owner.getInventory().get(slot); - if (arrow == null) { // This shouldn't happen - continue; - } - arrowID = aID; - if(owner.getLocation().inWilderness() && Config.f2pWildy) { - if(arrowID != 11 && arrowID != 190) { - owner.getActionSender().sendMessage("You may not use P2P (Member Item) Arrows in the F2P Wilderness"); - owner.resetRange(); - return; + public boolean equals(Object o) { + if (o instanceof RangeEvent) { + RangeEvent e = (RangeEvent) o; + return e.belongsTo(owner); } - } - int newAmount = arrow.getAmount() - 1; - if (!xbow && arrowID > 0) { - int temp = -1; + return false; + } - for (int i = 0; i < allowedArrows.length; i++) - if (allowedArrows[i][0] == owner.getRangeEquip()) - temp = i; + public Mob getAffectedMob() { + return affectedMob; + } - boolean canFire = false; - for (int i = 0; i < allowedArrows[temp].length; i++) - if (allowedArrows[temp][i] == aID) - canFire = true; - - if (!canFire) { - owner.getActionSender().sendMessage("Your arrows are too powerful for your Bow."); - owner.resetRange(); - return; + private Item getArrows(int id) { + for (Item i : world.getTile(affectedMob.getLocation()).getItems()) { + if (i.getID() == id && i.visibleTo(owner) && !i.isRemoved()) { + return i; + } } - } - - if (newAmount <= 0) { - owner.getInventory().remove(slot); - owner.getActionSender().sendInventory(); - } else { - arrow.setAmount(newAmount); - owner.getActionSender().sendUpdateItem(slot); - } - break; - } - if (arrowID < 0) { - owner.getActionSender().sendMessage("You have run out of " + (xbow ? "bolts" : "arrows")); - owner.resetRange(); - return; - } - if (affectedMob.isPrayerActivated(13)) { - if(!owner.shouldRangePass()) { - owner.getActionSender().sendMessage("Your missile got blocked"); - return; - } - } - // if(owner.getRangeEquip()) - - int damage = Formulae.calcRangeHit(owner.getCurStat(4), owner.getRangePoints(), affectedMob.getArmourPoints(), arrowID); - - if (affectedMob instanceof Npc) { - Npc npc = (Npc) affectedMob; - if(damage > 1 && npc.getID() == 477) - damage = damage / 2; - } - if (!Formulae.looseArrow(damage)) { - Item arrows = getArrows(arrowID); - if (arrows == null) { - world.registerItem(new Item(arrowID, affectedMob.getX(), affectedMob.getY(), 1, owner)); - } else { - arrows.setAmount(arrows.getAmount() + 1); - } - } - if (firstRun) { - firstRun = false; - if (affectedMob instanceof Player) { - if(((Player)affectedMob).isSleeping()) { - ((Player)affectedMob).getActionSender().sendWakeUp(false); - } - ((Player) affectedMob).getActionSender().sendMessage(owner.getUsername() + " is shooting at you!"); - } - } - if(affectedMob instanceof Npc && ((Npc)affectedMob).isScripted()) { - Instance.getPluginHandler().getNpcAIHandler(affectedMob.getID()).onRangedAttack(owner, (Npc) affectedMob); - } - if (affectedMob instanceof Npc) { - Npc npc = (Npc) affectedMob; - npc.getSyndicate().addDamage(owner, damage, Damage.RANGE_DAMAGE); - } - Projectile projectile = new Projectile(owner, affectedMob, 2); - - ArrayList playersToInform = new ArrayList(); - playersToInform.addAll(owner.getViewArea().getPlayersInView()); - playersToInform.addAll(affectedMob.getViewArea().getPlayersInView()); - for (Player p : playersToInform) { - p.informOfProjectile(projectile); + return null; } - if (GameEngine.getTime() - affectedMob.lastTimeShot > 500) { - affectedMob.lastTimeShot = GameEngine.getTime(); - affectedMob.setLastDamage(damage); - int newHp = affectedMob.getHits() - damage; - affectedMob.setHits(newHp); - if (affectedMob instanceof Npc && newHp > 0) { - Npc n = (Npc) affectedMob; - double max = n.getDef().hits; - double cur = n.getHits(); - int percent = (int) ((cur / max) * 100); - if (n.isScripted()) - Instance.getPluginHandler().getNpcAIHandler(n.getID()).onHealthPercentage(n, percent); - } - for (Player p : playersToInform) { - p.informOfModifiedHits(affectedMob); - } - if (affectedMob instanceof Player) { - Player affectedPlayer = (Player) affectedMob; - affectedPlayer.getActionSender().sendStat(3); - } - owner.getActionSender().sendSound("shoot"); - owner.setArrowFired(); - if (newHp <= 0) { - affectedMob.killedBy(owner, false); - owner.resetRange(); - if (owner instanceof Player) { - Player attackerPlayer = (Player) owner; - if (affectedMob instanceof Npc) { - Npc npc = (Npc) affectedMob; - - npc.getSyndicate().distributeExp(npc); - } - } - } else { - if (owner instanceof Player && affectedMob instanceof Npc) // We're ranging an NPC, so make it chase the player. - { - final Npc npc = (Npc) affectedMob; - final Player player = (Player) owner; - - if (npc.isBusy() || npc.getChasing() != null) + public void run() { + int bowID = owner.getRangeEquip(); + if (!owner.loggedIn() + || (affectedMob instanceof Player && !((Player) affectedMob) + .loggedIn()) || affectedMob.getHits() <= 0 + || !owner.checkAttack(affectedMob, true) || bowID < 0) { + owner.resetRange(); return; - - npc.resetPath(); - npc.setChasing(player); - - // Radius is 0 to prevent wallhacking by NPCs. Easiest - // method I - // can come up with for now. - Instance.getDelayedEventHandler().add(new WalkMobToMobEvent(affectedMob, owner, 0) { - public void arrived() { - if (affectedMob.isBusy() || player.isBusy()) { - npc.setChasing(null); - return; - } - - npc.resetPath(); - player.setBusy(true); - player.resetPath(); - player.resetAll(); - if (npc.isScripted()) - Instance.getPluginHandler().getNpcAIHandler(npc.getID()).onNpcAttack(npc, player); - player.setStatus(Action.FIGHTING_MOB); - player.getActionSender().sendSound("underattack"); - player.getActionSender().sendMessage("You are under attack!"); - - npc.setLocation(player.getLocation(), true); - for (Player p : npc.getViewArea().getPlayersInView()) - p.removeWatchedNpc(npc); - - player.setBusy(true); - player.setSprite(9); - player.setOpponent(npc); - player.setCombatTimer(); - - npc.setBusy(true); - npc.setSprite(8); - npc.setOpponent(player); - npc.setCombatTimer(); - - npc.setChasing(null); - - FightEvent fighting = new FightEvent(player, npc, true); - fighting.setLastRun(0); - Instance.getDelayedEventHandler().add(fighting); - } - - public void failed() { - npc.setChasing(null); - } - }); } - } + if (owner.withinRange(affectedMob, 5)) { + if (owner.isFollowing()) { + owner.resetFollowing(); + } + if (!owner.finishedPath()) { + owner.resetPath(); + } + } else { + owner.setFollowing(affectedMob); + return; + } + if (!new PathGenerator(owner.getX(), owner.getY(), affectedMob.getX(), + affectedMob.getY()).isValid()) { + owner.getActionSender().sendMessage( + "I can't get a clear shot from here"); + owner.resetPath(); + return; + } + boolean xbow = DataConversions.inArray(Formulae.xbowIDs, bowID); + int arrowID = -1; + for (int aID : (xbow ? Formulae.boltIDs : Formulae.arrowIDs)) { + int slot = owner.getInventory().getLastIndexById(aID); + if (slot < 0) { + continue; + } + InvItem arrow = owner.getInventory().get(slot); + if (arrow == null) { // This shouldn't happen + continue; + } + arrowID = aID; + if (owner.getLocation().inWilderness() && Config.f2pWildy) { + if (arrowID != 11 && arrowID != 190) { + owner.getActionSender() + .sendMessage( + "You may not use P2P (Member Item) Arrows in the F2P Wilderness"); + owner.resetRange(); + return; + } + } + int newAmount = arrow.getAmount() - 1; + if (!xbow && arrowID > 0) { + int temp = -1; + + for (int i = 0; i < allowedArrows.length; i++) + if (allowedArrows[i][0] == owner.getRangeEquip()) + temp = i; + + boolean canFire = false; + for (int i = 0; i < allowedArrows[temp].length; i++) + if (allowedArrows[temp][i] == aID) + canFire = true; + + if (!canFire) { + owner.getActionSender().sendMessage( + "Your arrows are too powerful for your Bow."); + owner.resetRange(); + return; + } + } + + if (newAmount <= 0) { + owner.getInventory().remove(slot); + owner.getActionSender().sendInventory(); + } else { + arrow.setAmount(newAmount); + owner.getActionSender().sendUpdateItem(slot); + } + break; + } + if (arrowID < 0) { + owner.getActionSender().sendMessage( + "You have run out of " + (xbow ? "bolts" : "arrows")); + owner.resetRange(); + return; + } + if (affectedMob.isPrayerActivated(13)) { + if (!owner.shouldRangePass()) { + owner.getActionSender().sendMessage("Your missile got blocked"); + return; + } + } + // if(owner.getRangeEquip()) + + int damage = Formulae.calcRangeHit(owner.getCurStat(4), + owner.getRangePoints(), affectedMob.getArmourPoints(), arrowID); + + if (affectedMob instanceof Npc) { + Npc npc = (Npc) affectedMob; + if (damage > 1 && npc.getID() == 477) + damage = damage / 2; + } + if (!Formulae.looseArrow(damage)) { + Item arrows = getArrows(arrowID); + if (arrows == null) { + world.registerItem(new Item(arrowID, affectedMob.getX(), + affectedMob.getY(), 1, owner)); + } else { + arrows.setAmount(arrows.getAmount() + 1); + } + } + if (firstRun) { + firstRun = false; + if (affectedMob instanceof Player) { + if (((Player) affectedMob).isSleeping()) { + ((Player) affectedMob).getActionSender().sendWakeUp(false); + } + ((Player) affectedMob).getActionSender().sendMessage( + owner.getUsername() + " is shooting at you!"); + } + } + if (affectedMob instanceof Npc && ((Npc) affectedMob).isScripted()) { + Instance.getPluginHandler().getNpcAIHandler(affectedMob.getID()) + .onRangedAttack(owner, (Npc) affectedMob); + } + if (affectedMob instanceof Npc) { + Npc npc = (Npc) affectedMob; + npc.getSyndicate().addDamage(owner, damage, Damage.RANGE_DAMAGE); + } + Projectile projectile = new Projectile(owner, affectedMob, 2); + + ArrayList playersToInform = new ArrayList(); + playersToInform.addAll(owner.getViewArea().getPlayersInView()); + playersToInform.addAll(affectedMob.getViewArea().getPlayersInView()); + for (Player p : playersToInform) { + p.informOfProjectile(projectile); + } + + if (GameEngine.getTime() - affectedMob.lastTimeShot > 500) { + affectedMob.lastTimeShot = GameEngine.getTime(); + affectedMob.setLastDamage(damage); + int newHp = affectedMob.getHits() - damage; + affectedMob.setHits(newHp); + if (affectedMob instanceof Npc && newHp > 0) { + Npc n = (Npc) affectedMob; + double max = n.getDef().hits; + double cur = n.getHits(); + int percent = (int) ((cur / max) * 100); + if (n.isScripted()) + Instance.getPluginHandler().getNpcAIHandler(n.getID()) + .onHealthPercentage(n, percent); + } + for (Player p : playersToInform) { + p.informOfModifiedHits(affectedMob); + } + if (affectedMob instanceof Player) { + Player affectedPlayer = (Player) affectedMob; + affectedPlayer.getActionSender().sendStat(3); + } + owner.getActionSender().sendSound("shoot"); + owner.setArrowFired(); + if (newHp <= 0) { + affectedMob.killedBy(owner, false); + owner.resetRange(); + if (owner instanceof Player) { + if (affectedMob instanceof Npc) { + Npc npc = (Npc) affectedMob; + + npc.getSyndicate().distributeExp(npc); + } + } + } else { + if (owner instanceof Player && affectedMob instanceof Npc) // We're + // ranging + // an + // NPC, + // so + // make + // it + // chase + // the + // player. + { + final Npc npc = (Npc) affectedMob; + final Player player = (Player) owner; + + if (npc.isBusy() || npc.getChasing() != null) + return; + + npc.resetPath(); + npc.setChasing(player); + + // Radius is 0 to prevent wallhacking by NPCs. Easiest + // method I + // can come up with for now. + Instance.getDelayedEventHandler().add( + new WalkMobToMobEvent(affectedMob, owner, 0) { + public void arrived() { + if (affectedMob.isBusy() || player.isBusy()) { + npc.setChasing(null); + return; + } + + npc.resetPath(); + player.setBusy(true); + player.resetPath(); + player.resetAll(); + if (npc.isScripted()) + Instance.getPluginHandler() + .getNpcAIHandler(npc.getID()) + .onNpcAttack(npc, player); + player.setStatus(Action.FIGHTING_MOB); + player.getActionSender().sendSound( + "underattack"); + player.getActionSender().sendMessage( + "You are under attack!"); + + npc.setLocation(player.getLocation(), true); + for (Player p : npc.getViewArea() + .getPlayersInView()) + p.removeWatchedNpc(npc); + + player.setBusy(true); + player.setSprite(9); + player.setOpponent(npc); + player.setCombatTimer(); + + npc.setBusy(true); + npc.setSprite(8); + npc.setOpponent(player); + npc.setCombatTimer(); + + npc.setChasing(null); + + FightEvent fighting = new FightEvent( + player, npc, true); + fighting.setLastRun(0); + Instance.getDelayedEventHandler().add( + fighting); + } + + public void failed() { + npc.setChasing(null); + } + }); + } + } + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/event/ShortEvent.java b/GameServer/src/org/moparscape/msc/gs/event/ShortEvent.java index 5d75511..ab0dddd 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/ShortEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/ShortEvent.java @@ -4,10 +4,10 @@ import org.moparscape.msc.gs.model.Player; public abstract class ShortEvent extends SingleEvent { - public ShortEvent(Player owner) { - super(owner, 1500); - } + public ShortEvent(Player owner) { + super(owner, 1500); + } - public abstract void action(); + public abstract void action(); } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/event/SingleEvent.java b/GameServer/src/org/moparscape/msc/gs/event/SingleEvent.java index 70edc31..766e5ef 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/SingleEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/SingleEvent.java @@ -4,19 +4,19 @@ import org.moparscape.msc.gs.model.Player; public abstract class SingleEvent extends DelayedEvent { - public SingleEvent(Player owner, int delay) { - super(owner, delay); - } + public SingleEvent(Player owner, int delay) { + super(owner, delay); + } - public SingleEvent(Player owner, int delay, Object[] arg) { - super(owner, delay, arg); - } + public SingleEvent(Player owner, int delay, Object[] arg) { + super(owner, delay, arg); + } - public abstract void action(); + public abstract void action(); - public void run() { - action(); - super.matchRunning = false; - } + public void run() { + action(); + super.matchRunning = false; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/event/WalkMobToMobEvent.java b/GameServer/src/org/moparscape/msc/gs/event/WalkMobToMobEvent.java index 4e8f003..2348cfd 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/WalkMobToMobEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/WalkMobToMobEvent.java @@ -7,87 +7,95 @@ import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Path; public abstract class WalkMobToMobEvent extends DelayedEvent { - protected Mob affectedMob; - private NPCLoc loc = null; - protected Mob owner; - private int radius; - private long startTime = 0L; + protected Mob affectedMob; + private NPCLoc loc = null; + protected Mob owner; + private int radius; + private long startTime = 0L; - public WalkMobToMobEvent(Mob owner, Mob affectedMob, int radius) { - super(null, 500); + public WalkMobToMobEvent(Mob owner, Mob affectedMob, int radius) { + super(null, 500); - if (owner.isRemoved()) { - super.matchRunning = false; - return; - } - - if (owner instanceof Npc) { - Npc npc = (Npc) owner; - loc = npc.getLoc(); - - if (affectedMob.getX() < (loc.minX() - 4) || affectedMob.getX() > (loc.maxX() + 4) || affectedMob.getY() < (loc.minY() - 4) || affectedMob.getY() > (loc.maxY() + 4)) { - super.matchRunning = false; - return; - } - } - - this.owner = owner; - owner.setPath(new Path(owner.getX(), owner.getY(), affectedMob.getX(), affectedMob.getY())); - - this.affectedMob = affectedMob; - this.radius = radius; - - if (owner.withinRange(affectedMob, radius)) { - arrived(); - super.matchRunning = false; - return; - } - - startTime = GameEngine.getTime(); - } - - public abstract void arrived(); - - public void failed() { - } - - public Mob getAffectedMob() { - return affectedMob; - } - - public final void run() { - if (owner.isRemoved()) { - super.matchRunning = false; - return; - } - - if (owner.withinRange(affectedMob, radius)) - arrived(); - else if (owner.hasMoved()) - return; // We're still moving - else { - if (GameEngine.getTime() - startTime <= 10000) // Make NPCs - // give a 10 - // second - // chase - { - if (loc != null) { - if (affectedMob.getX() < (loc.minX() - 4) || affectedMob.getX() > (loc.maxX() + 4) || affectedMob.getY() < (loc.minY() - 4) || affectedMob.getY() > (loc.maxY() + 4)) { + if (owner.isRemoved()) { super.matchRunning = false; - failed(); return; - } } - if (owner.isBusy()) - return; + if (owner instanceof Npc) { + Npc npc = (Npc) owner; + loc = npc.getLoc(); - owner.setPath(new Path(owner.getX(), owner.getY(), affectedMob.getX(), affectedMob.getY())); - return; - } else - failed(); + if (affectedMob.getX() < (loc.minX() - 4) + || affectedMob.getX() > (loc.maxX() + 4) + || affectedMob.getY() < (loc.minY() - 4) + || affectedMob.getY() > (loc.maxY() + 4)) { + super.matchRunning = false; + return; + } + } + + this.owner = owner; + owner.setPath(new Path(owner.getX(), owner.getY(), affectedMob.getX(), + affectedMob.getY())); + + this.affectedMob = affectedMob; + this.radius = radius; + + if (owner.withinRange(affectedMob, radius)) { + arrived(); + super.matchRunning = false; + return; + } + + startTime = GameEngine.getTime(); } - super.matchRunning = false; - } + public abstract void arrived(); + + public void failed() { + } + + public Mob getAffectedMob() { + return affectedMob; + } + + public final void run() { + if (owner.isRemoved()) { + super.matchRunning = false; + return; + } + + if (owner.withinRange(affectedMob, radius)) + arrived(); + else if (owner.hasMoved()) + return; // We're still moving + else { + if (GameEngine.getTime() - startTime <= 10000) // Make NPCs + // give a 10 + // second + // chase + { + if (loc != null) { + if (affectedMob.getX() < (loc.minX() - 4) + || affectedMob.getX() > (loc.maxX() + 4) + || affectedMob.getY() < (loc.minY() - 4) + || affectedMob.getY() > (loc.maxY() + 4)) { + super.matchRunning = false; + failed(); + return; + } + } + + if (owner.isBusy()) + return; + + owner.setPath(new Path(owner.getX(), owner.getY(), affectedMob + .getX(), affectedMob.getY())); + return; + } else + failed(); + } + + super.matchRunning = false; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java b/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java index 574bc33..1d680b2 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/WalkToMobEvent.java @@ -4,37 +4,37 @@ import org.moparscape.msc.gs.model.Mob; import org.moparscape.msc.gs.model.Player; public abstract class WalkToMobEvent extends DelayedEvent { - protected Mob affectedMob; - private int radius; + protected Mob affectedMob; + private int radius; - public WalkToMobEvent(Player owner, Mob affectedMob, int radius) { - super(owner, 600); - this.affectedMob = affectedMob; - this.radius = radius; - if (owner.withinRange(affectedMob, radius)) { - arrived(); - super.matchRunning = false; + public WalkToMobEvent(Player owner, Mob affectedMob, int radius) { + super(owner, 600); + this.affectedMob = affectedMob; + this.radius = radius; + if (owner.withinRange(affectedMob, radius)) { + arrived(); + super.matchRunning = false; + } } - } - public abstract void arrived(); + public abstract void arrived(); - public void failed() { - } // Not abstract as isn't required + public void failed() { + } // Not abstract as isn't required - public Mob getAffectedMob() { - return affectedMob; - } - - public final void run() { - if (owner.withinRange(affectedMob, radius)) { - arrived(); - } else if (owner.hasMoved()) { - return; // We're still moving - } else { - failed(); + public Mob getAffectedMob() { + return affectedMob; + } + + public final void run() { + if (owner.withinRange(affectedMob, radius)) { + arrived(); + } else if (owner.hasMoved()) { + return; // We're still moving + } else { + failed(); + } + super.matchRunning = false; } - super.matchRunning = false; - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/event/WalkToObjectEvent.java b/GameServer/src/org/moparscape/msc/gs/event/WalkToObjectEvent.java index 9681f13..6a387b3 100644 --- a/GameServer/src/org/moparscape/msc/gs/event/WalkToObjectEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/event/WalkToObjectEvent.java @@ -4,32 +4,32 @@ import org.moparscape.msc.gs.model.GameObject; import org.moparscape.msc.gs.model.Player; public abstract class WalkToObjectEvent extends DelayedEvent { - protected GameObject object; - private boolean stop; + protected GameObject object; + private boolean stop; - public WalkToObjectEvent(Player owner, GameObject object, boolean stop) { - super(owner, 601); - this.object = object; - this.stop = stop; - if (stop && owner.atObject(object)) { - owner.resetPath(); - arrived(); - super.matchRunning = false; + public WalkToObjectEvent(Player owner, GameObject object, boolean stop) { + super(owner, 601); + this.object = object; + this.stop = stop; + if (stop && owner.atObject(object)) { + owner.resetPath(); + arrived(); + super.matchRunning = false; + } } - } - public abstract void arrived(); + public abstract void arrived(); - public final void run() { - if (stop && owner.atObject(object)) { - owner.resetPath(); - arrived(); - } else if (owner.hasMoved()) { - return; // We're still moving - } else if (owner.atObject(object)) { - arrived(); + public final void run() { + if (stop && owner.atObject(object)) { + owner.resetPath(); + arrived(); + } else if (owner.hasMoved()) { + return; // We're still moving + } else if (owner.atObject(object)) { + arrived(); + } + super.matchRunning = false; } - super.matchRunning = false; - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/AgilityCourseDef.java b/GameServer/src/org/moparscape/msc/gs/external/AgilityCourseDef.java index 975941c..53de9d9 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/AgilityCourseDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/AgilityCourseDef.java @@ -4,81 +4,81 @@ package org.moparscape.msc.gs.external; * Defines an agility course */ public class AgilityCourseDef { - /** - * Ending object ID - */ - public int endID; - /** - * Ending object x - */ - public int endX; - /** - * Ending object y - */ - public int endY; - /** - * The exp reward for completing this course - */ - public int exp; - /** - * This course's name - */ - public String name; - /** - * Starting object x - */ - public int startX; - /** - * Starting object y - */ - public int startY; + /** + * Ending object ID + */ + public int endID; + /** + * Ending object x + */ + public int endX; + /** + * Ending object y + */ + public int endY; + /** + * The exp reward for completing this course + */ + public int exp; + /** + * This course's name + */ + public String name; + /** + * Starting object x + */ + public int startX; + /** + * Starting object y + */ + public int startY; - /** - * @return the end ID - */ - public int getEndID() { - return endID; - } + /** + * @return the end ID + */ + public int getEndID() { + return endID; + } - /** - * @return the end x - */ - public int getEndX() { - return endX; - } + /** + * @return the end x + */ + public int getEndX() { + return endX; + } - /** - * @return the end y - */ - public int getEndY() { - return endY; - } + /** + * @return the end y + */ + public int getEndY() { + return endY; + } - /** - * @return the exp reward - */ - public int getExp() { - return exp; - } + /** + * @return the exp reward + */ + public int getExp() { + return exp; + } - /** - * @return this course's name - */ - public String getName() { - return name; - } + /** + * @return this course's name + */ + public String getName() { + return name; + } - /** - * @return the starting object x - */ - public int getStartX() { - return startX; - } + /** + * @return the starting object x + */ + public int getStartX() { + return startX; + } - /** - * @return the starting object y - */ - public int getStartY() { - return startY; - } + /** + * @return the starting object y + */ + public int getStartY() { + return startY; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/AgilityDef.java b/GameServer/src/org/moparscape/msc/gs/external/AgilityDef.java index 660a52a..fdb1b89 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/AgilityDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/AgilityDef.java @@ -4,125 +4,125 @@ package org.moparscape.msc.gs.external; * Defines an agility course object */ public class AgilityDef { - /** - * Can you fail this obstacle? - */ - public boolean canFail; - /** - * The xp you get for doing this obstacle safely - */ - public int exp; - /** - * The fail x coord - */ - public int failX; - /** - * The fail y coord - */ - public int failY; - /** - * What message does this object spew to the client? - */ - public String message; - /** - * What order this object is in the obstacle course - */ - public int order; - /** - * Required level - */ - public int reqLevel; - /** - * Tele x coord - */ - public int toX; - /** - * Tele y coord - */ - public int toY; - /** - * The x coord - */ - public int x; - /** - * The y coord - */ - public int y; + /** + * Can you fail this obstacle? + */ + public boolean canFail; + /** + * The xp you get for doing this obstacle safely + */ + public int exp; + /** + * The fail x coord + */ + public int failX; + /** + * The fail y coord + */ + public int failY; + /** + * What message does this object spew to the client? + */ + public String message; + /** + * What order this object is in the obstacle course + */ + public int order; + /** + * Required level + */ + public int reqLevel; + /** + * Tele x coord + */ + public int toX; + /** + * Tele y coord + */ + public int toY; + /** + * The x coord + */ + public int x; + /** + * The y coord + */ + public int y; - /** - * @return if you can fail this def - */ - public boolean canFail() { - return canFail; - } + /** + * @return if you can fail this def + */ + public boolean canFail() { + return canFail; + } - /** - * @return the xp you get for doing this agility object - */ - public int getExp() { - return exp; - } + /** + * @return the xp you get for doing this agility object + */ + public int getExp() { + return exp; + } - /** - * @return the fail x coord we go to if we fail - */ - public int getFailX() { - return failX; - } + /** + * @return the fail x coord we go to if we fail + */ + public int getFailX() { + return failX; + } - /** - * @return the fail y coord we go to if we fail - */ - public int getFailY() { - return failY; - } + /** + * @return the fail y coord we go to if we fail + */ + public int getFailY() { + return failY; + } - /** - * @return the object's message - */ - public String getMessage() { - return message; - } + /** + * @return the object's message + */ + public String getMessage() { + return message; + } - /** - * @return the order of this agility object - */ - public int getOrder() { - return order; - } + /** + * @return the order of this agility object + */ + public int getOrder() { + return order; + } - /** - * @return this def's required level - */ - public int getReqLevel() { - return reqLevel; - } + /** + * @return this def's required level + */ + public int getReqLevel() { + return reqLevel; + } - /** - * @return this def's tele x - */ - public int getToX() { - return toX; - } + /** + * @return this def's tele x + */ + public int getToX() { + return toX; + } - /** - * @return this def's tele y - */ - public int getToY() { - return toY; - } + /** + * @return this def's tele y + */ + public int getToY() { + return toY; + } - /** - * @return this def's x coord - */ - public int getX() { - return x; - } + /** + * @return this def's x coord + */ + public int getX() { + return x; + } - /** - * @return this def's y coord - */ - public int getY() { - return y; - } + /** + * @return this def's y coord + */ + public int getY() { + return y; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/CertDef.java b/GameServer/src/org/moparscape/msc/gs/external/CertDef.java index 9f7f1b7..912c305 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/CertDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/CertDef.java @@ -1,28 +1,28 @@ package org.moparscape.msc.gs.external; public class CertDef { - /** - * The ID of the certificate - */ - public int certID; - /** - * The ID of the assosiated item - */ - public int itemID; - /** - * The name of the item this cert is for - */ - public String name; + /** + * The ID of the certificate + */ + public int certID; + /** + * The ID of the assosiated item + */ + public int itemID; + /** + * The name of the item this cert is for + */ + public String name; - public int getCertID() { - return certID; - } + public int getCertID() { + return certID; + } - public int getItemID() { - return itemID; - } + public int getItemID() { + return itemID; + } - public String getName() { - return name; - } + public String getName() { + return name; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/CerterDef.java b/GameServer/src/org/moparscape/msc/gs/external/CerterDef.java index 0dc3d32..a9cc4ec 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/CerterDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/CerterDef.java @@ -1,38 +1,38 @@ package org.moparscape.msc.gs.external; public class CerterDef { - /** - * Certs this stall can deal with - */ - private CertDef[] certs; - /** - * Type of stall - */ - private String type; + /** + * Certs this stall can deal with + */ + private CertDef[] certs; + /** + * Type of stall + */ + private String type; - public int getCertID(int index) { - if (index < 0 || index >= certs.length) { - return -1; + public int getCertID(int index) { + if (index < 0 || index >= certs.length) { + return -1; + } + return certs[index].getCertID(); } - return certs[index].getCertID(); - } - public String[] getCertNames() { - String[] names = new String[certs.length]; - for (int i = 0; i < certs.length; i++) { - names[i] = certs[i].getName(); + public String[] getCertNames() { + String[] names = new String[certs.length]; + for (int i = 0; i < certs.length; i++) { + names[i] = certs[i].getName(); + } + return names; } - return names; - } - public int getItemID(int index) { - if (index < 0 || index >= certs.length) { - return -1; + public int getItemID(int index) { + if (index < 0 || index >= certs.length) { + return -1; + } + return certs[index].getItemID(); } - return certs[index].getItemID(); - } - public String getType() { - return type; - } + public String getType() { + return type; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/DoorDef.java b/GameServer/src/org/moparscape/msc/gs/external/DoorDef.java index 33187a5..2f54b63 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/DoorDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/DoorDef.java @@ -5,52 +5,52 @@ package org.moparscape.msc.gs.external; */ public class DoorDef extends EntityDef { - /** - * The first command of the door - */ - public String command1; - /** - * The second command of the door - */ - public String command2; - /** - * The doors type. - */ - public int doorType; - public int modelVar1; + /** + * The first command of the door + */ + public String command1; + /** + * The second command of the door + */ + public String command2; + /** + * The doors type. + */ + public int doorType; + public int modelVar1; - public int modelVar2; - public int modelVar3; - /** - * Unknown - */ - public int unknown; + public int modelVar2; + public int modelVar3; + /** + * Unknown + */ + public int unknown; - public String getCommand1() { - return command1.toLowerCase(); - } + public String getCommand1() { + return command1.toLowerCase(); + } - public String getCommand2() { - return command2.toLowerCase(); - } + public String getCommand2() { + return command2.toLowerCase(); + } - public int getDoorType() { - return doorType; - } + public int getDoorType() { + return doorType; + } - public int getModelVar1() { - return modelVar1; - } + public int getModelVar1() { + return modelVar1; + } - public int getModelVar2() { - return modelVar2; - } + public int getModelVar2() { + return modelVar2; + } - public int getModelVar3() { - return modelVar3; - } + public int getModelVar3() { + return modelVar3; + } - public int getUnknown() { - return unknown; - } + public int getUnknown() { + return unknown; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/EntityDef.java b/GameServer/src/org/moparscape/msc/gs/external/EntityDef.java index 36f2405..8f3169d 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/EntityDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/EntityDef.java @@ -6,26 +6,26 @@ package org.moparscape.msc.gs.external; */ public abstract class EntityDef { - /** - * The description of the entity - */ - public String description; - /** - * The name of the entity - */ - public String name; + /** + * The description of the entity + */ + public String description; + /** + * The name of the entity + */ + public String name; - /** - * Returns the description of the entity - */ - public String getDescription() { - return description; - } + /** + * Returns the description of the entity + */ + public String getDescription() { + return description; + } - /** - * Returns the name of the entity - */ - public String getName() { - return name; - } + /** + * Returns the name of the entity + */ + public String getName() { + return name; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java b/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java index a4cd461..05a9612 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/external/EntityHandler.java @@ -7,7 +7,6 @@ import org.moparscape.msc.gs.model.Point; import org.moparscape.msc.gs.model.TelePoint; import org.moparscape.msc.gs.util.PersistenceManager; - /** * This class handles the loading of entities from the conf files, and provides * methods for relaying these entities to the user. @@ -15,405 +14,435 @@ import org.moparscape.msc.gs.util.PersistenceManager; @SuppressWarnings("unchecked") public class EntityHandler { - private static HashMap agilityCourses; - private static HashMap agilityObjects; - private static HashMap arrowHeads; - private static HashMap bowString; - private static HashMap certers; - private static HashMap dartTips; + private static HashMap agilityCourses; + private static HashMap agilityObjects; + private static HashMap arrowHeads; + private static HashMap bowString; + private static HashMap certers; + private static HashMap dartTips; - private static DoorDef[] doors; - private static HashMap firemaking; - private static GameObjectDef[] gameObjects; - private static HashMap gems; - private static ItemHerbSecond[] herbSeconds; - private static HashMap itemAffectedTypes; - private static HashMap itemCooking; - private static ItemCraftingDef[] itemCrafting; - private static HashMap itemEdibleHeals; - private static HashMap itemHerb; - private static ItemDef[] items; - private static HashMap itemSmelting; - private static ItemSmithingDef[] itemSmithing; - private static HashMap itemUnIdentHerb; - private static HashMap itemWieldable; - private static List[] keyChestLoots; - private static HashMap logCut; + private static DoorDef[] doors; + private static HashMap firemaking; + private static GameObjectDef[] gameObjects; + private static HashMap gems; + private static ItemHerbSecond[] herbSeconds; + private static HashMap itemAffectedTypes; + private static HashMap itemCooking; + private static ItemCraftingDef[] itemCrafting; + private static HashMap itemEdibleHeals; + private static HashMap itemHerb; + private static ItemDef[] items; + private static HashMap itemSmelting; + private static ItemSmithingDef[] itemSmithing; + private static HashMap itemUnIdentHerb; + private static HashMap itemWieldable; + private static List[] keyChestLoots; + private static HashMap logCut; - private static NPCDef[] npcs; - private static HashMap objectFishing; + private static NPCDef[] npcs; + private static HashMap objectFishing; - private static HashMap objectMining; - private static HashMap objectTelePoints; - private static HashMap objectWoodcutting; - private static PrayerDef[] prayers; - private static HashMap spellAggressiveLvl; - private static SpellDef[] spells; - private static TileDef[] tiles; + private static HashMap objectMining; + private static HashMap objectTelePoints; + private static HashMap objectWoodcutting; + private static PrayerDef[] prayers; + private static HashMap spellAggressiveLvl; + private static SpellDef[] spells; + private static TileDef[] tiles; - static { + static { doors = (DoorDef[]) PersistenceManager.load("defs/DoorDef.xml.gz"); - gameObjects = (GameObjectDef[]) PersistenceManager.load("defs/GameObjectDef.xml.gz"); + gameObjects = (GameObjectDef[]) PersistenceManager + .load("defs/GameObjectDef.xml.gz"); npcs = (NPCDef[]) PersistenceManager.load("defs/NPCDef.xml.gz"); - for (NPCDef n : npcs) { - if (n.isAttackable()) { - n.respawnTime -= (n.respawnTime / 3); - } + for (NPCDef n : npcs) { + if (n.isAttackable()) { + n.respawnTime -= (n.respawnTime / 3); } - prayers = (PrayerDef[]) PersistenceManager.load("defs/PrayerDef.xml.gz"); + } + prayers = (PrayerDef[]) PersistenceManager + .load("defs/PrayerDef.xml.gz"); items = (ItemDef[]) PersistenceManager.load("defs/ItemDef.xml.gz"); spells = (SpellDef[]) PersistenceManager.load("defs/SpellDef.xml.gz"); tiles = (TileDef[]) PersistenceManager.load("defs/TileDef.xml.gz"); - keyChestLoots = (List[]) PersistenceManager.load("defs/extras/KeyChestLoot.xml.gz"); - herbSeconds = (ItemHerbSecond[]) PersistenceManager.load("defs/extras/ItemHerbSecond.xml.gz"); - dartTips = (HashMap) PersistenceManager.load("defs/extras/ItemDartTipDef.xml.gz"); - gems = (HashMap) PersistenceManager.load("defs/extras/ItemGemDef.xml.gz"); - logCut = (HashMap) PersistenceManager.load("defs/extras/ItemLogCutDef.xml.gz"); - bowString = (HashMap) PersistenceManager.load("defs/extras/ItemBowStringDef.xml.gz"); - arrowHeads = (HashMap) PersistenceManager.load("defs/extras/ItemArrowHeadDef.xml.gz"); - firemaking = (HashMap) PersistenceManager.load("defs/extras/FiremakingDef.xml.gz"); - itemAffectedTypes = (HashMap) PersistenceManager.load("defs/extras/ItemAffectedTypes.xml.gz"); - itemWieldable = (HashMap) PersistenceManager.load("defs/extras/ItemWieldableDef.xml.gz"); - itemUnIdentHerb = (HashMap) PersistenceManager.load("defs/extras/ItemUnIdentHerbDef.xml.gz"); - itemHerb = (HashMap) PersistenceManager.load("defs/extras/ItemHerbDef.xml.gz"); - itemEdibleHeals = (HashMap) PersistenceManager.load("defs/extras/ItemEdibleHeals.xml.gz"); - itemCooking = (HashMap) PersistenceManager.load("defs/extras/ItemCookingDef.xml.gz"); - itemSmelting = (HashMap) PersistenceManager.load("defs/extras/ItemSmeltingDef.xml.gz"); - itemSmithing = (ItemSmithingDef[]) PersistenceManager.load("defs/extras/ItemSmithingDef.xml.gz"); - itemCrafting = (ItemCraftingDef[]) PersistenceManager.load("defs/extras/ItemCraftingDef.xml.gz"); - objectMining = (HashMap) PersistenceManager.load("defs/extras/ObjectMining.xml.gz"); - objectWoodcutting = (HashMap) PersistenceManager.load("defs/extras/ObjectWoodcutting.xml.gz"); - objectFishing = (HashMap) PersistenceManager.load("defs/extras/ObjectFishing.xml.gz"); - spellAggressiveLvl = (HashMap) PersistenceManager.load("defs/extras/SpellAggressiveLvl.xml.gz"); - objectTelePoints = (HashMap) PersistenceManager.load("locs/extras/ObjectTelePoints.xml.gz"); - certers = (HashMap) PersistenceManager.load("defs/extras/NpcCerters.xml.gz"); - agilityObjects = (HashMap) PersistenceManager.load("defs/extras/AgilityDef.xml.gz"); - agilityCourses = (HashMap) PersistenceManager.load("defs/extras/AgilityCourseDef.xml.gz"); - } + keyChestLoots = (List[]) PersistenceManager + .load("defs/extras/KeyChestLoot.xml.gz"); + herbSeconds = (ItemHerbSecond[]) PersistenceManager + .load("defs/extras/ItemHerbSecond.xml.gz"); + dartTips = (HashMap) PersistenceManager + .load("defs/extras/ItemDartTipDef.xml.gz"); + gems = (HashMap) PersistenceManager + .load("defs/extras/ItemGemDef.xml.gz"); + logCut = (HashMap) PersistenceManager + .load("defs/extras/ItemLogCutDef.xml.gz"); + bowString = (HashMap) PersistenceManager + .load("defs/extras/ItemBowStringDef.xml.gz"); + arrowHeads = (HashMap) PersistenceManager + .load("defs/extras/ItemArrowHeadDef.xml.gz"); + firemaking = (HashMap) PersistenceManager + .load("defs/extras/FiremakingDef.xml.gz"); + itemAffectedTypes = (HashMap) PersistenceManager + .load("defs/extras/ItemAffectedTypes.xml.gz"); + itemWieldable = (HashMap) PersistenceManager + .load("defs/extras/ItemWieldableDef.xml.gz"); + itemUnIdentHerb = (HashMap) PersistenceManager + .load("defs/extras/ItemUnIdentHerbDef.xml.gz"); + itemHerb = (HashMap) PersistenceManager + .load("defs/extras/ItemHerbDef.xml.gz"); + itemEdibleHeals = (HashMap) PersistenceManager + .load("defs/extras/ItemEdibleHeals.xml.gz"); + itemCooking = (HashMap) PersistenceManager + .load("defs/extras/ItemCookingDef.xml.gz"); + itemSmelting = (HashMap) PersistenceManager + .load("defs/extras/ItemSmeltingDef.xml.gz"); + itemSmithing = (ItemSmithingDef[]) PersistenceManager + .load("defs/extras/ItemSmithingDef.xml.gz"); + itemCrafting = (ItemCraftingDef[]) PersistenceManager + .load("defs/extras/ItemCraftingDef.xml.gz"); + objectMining = (HashMap) PersistenceManager + .load("defs/extras/ObjectMining.xml.gz"); + objectWoodcutting = (HashMap) PersistenceManager + .load("defs/extras/ObjectWoodcutting.xml.gz"); + objectFishing = (HashMap) PersistenceManager + .load("defs/extras/ObjectFishing.xml.gz"); + spellAggressiveLvl = (HashMap) PersistenceManager + .load("defs/extras/SpellAggressiveLvl.xml.gz"); + objectTelePoints = (HashMap) PersistenceManager + .load("locs/extras/ObjectTelePoints.xml.gz"); + certers = (HashMap) PersistenceManager + .load("defs/extras/NpcCerters.xml.gz"); + agilityObjects = (HashMap) PersistenceManager + .load("defs/extras/AgilityDef.xml.gz"); + agilityCourses = (HashMap) PersistenceManager + .load("defs/extras/AgilityCourseDef.xml.gz"); + } - /** - * @param id - * the agility courses's start ID - * @return the AgilityCourseDef with the given start ID - */ - public static AgilityCourseDef getAgilityCourseDef(int id) { - return agilityCourses.get(id); - } + /** + * @param id + * the agility courses's start ID + * @return the AgilityCourseDef with the given start ID + */ + public static AgilityCourseDef getAgilityCourseDef(int id) { + return agilityCourses.get(id); + } - /** - * @param id - * the agility object's ID - * @return the AgilityDef with the given object ID - */ - public static AgilityDef getAgilityDef(int id) { - return agilityObjects.get(id); - } + /** + * @param id + * the agility object's ID + * @return the AgilityDef with the given object ID + */ + public static AgilityDef getAgilityDef(int id) { + return agilityObjects.get(id); + } - /** - * @param id - * the npcs ID - * @return the CerterDef for the given npc - */ - public static CerterDef getCerterDef(int id) { - return certers.get(id); - } + /** + * @param id + * the npcs ID + * @return the CerterDef for the given npc + */ + public static CerterDef getCerterDef(int id) { + return certers.get(id); + } - /** - * @return the ItemCraftingDef for the requested item - */ - public static ItemCraftingDef getCraftingDef(int id) { + /** + * @return the ItemCraftingDef for the requested item + */ + public static ItemCraftingDef getCraftingDef(int id) { if (id < 0 || id >= itemCrafting.length) { - return null; + return null; } return itemCrafting[id]; - } - - /** - * @param id - * the entities ID - * @return the DoorDef with the given ID - */ - public static DoorDef getDoorDef(int id) { - if (id < 0 || id >= doors.length) { - return null; } - return doors[id]; - } - /** - * @return the FiremakingDef for the given log - */ - public static FiremakingDef getFiremakingDef(int id) { - return firemaking.get(id); - } + /** + * @param id + * the entities ID + * @return the DoorDef with the given ID + */ + public static DoorDef getDoorDef(int id) { + if (id < 0 || id >= doors.length) { + return null; + } + return doors[id]; + } - /** - * @param id - * the entities ID - * @return the GameObjectDef with the given ID - */ - public static GameObjectDef getGameObjectDef(int id) { + /** + * @return the FiremakingDef for the given log + */ + public static FiremakingDef getFiremakingDef(int id) { + return firemaking.get(id); + } + + /** + * @param id + * the entities ID + * @return the GameObjectDef with the given ID + */ + public static GameObjectDef getGameObjectDef(int id) { if (id < 0 || id >= gameObjects.length) { - return null; + return null; } return gameObjects[id]; - } + } - /** - * @param the - * items type - * @return the types of items affected - */ - public static int[] getItemAffectedTypes(int type) { - return itemAffectedTypes.get(type); - } + /** + * @param the + * items type + * @return the types of items affected + */ + public static int[] getItemAffectedTypes(int type) { + return itemAffectedTypes.get(type); + } - /** - * @return the ItemArrowHeadDef for the given arrow - */ - public static ItemArrowHeadDef getItemArrowHeadDef(int id) { - return arrowHeads.get(id); - } + /** + * @return the ItemArrowHeadDef for the given arrow + */ + public static ItemArrowHeadDef getItemArrowHeadDef(int id) { + return arrowHeads.get(id); + } - /** - * @return the ItemBowStringDef for the given bow - */ - public static ItemBowStringDef getItemBowStringDef(int id) { - return bowString.get(id); - } + /** + * @return the ItemBowStringDef for the given bow + */ + public static ItemBowStringDef getItemBowStringDef(int id) { + return bowString.get(id); + } - /** - * @param id - * the entities ID - * @return the ItemCookingDef with the given ID - */ - public static ItemCookingDef getItemCookingDef(int id) { - return itemCooking.get(id); - } + /** + * @param id + * the entities ID + * @return the ItemCookingDef with the given ID + */ + public static ItemCookingDef getItemCookingDef(int id) { + return itemCooking.get(id); + } - /** - * @return the ItemDartTipDef for the given tip - */ - public static ItemDartTipDef getItemDartTipDef(int id) { - return dartTips.get(id); - } + /** + * @return the ItemDartTipDef for the given tip + */ + public static ItemDartTipDef getItemDartTipDef(int id) { + return dartTips.get(id); + } - /** - * @param id - * the entities ID - * @return the ItemDef with the given ID - */ - public static ItemDef getItemDef(int id) { + /** + * @param id + * the entities ID + * @return the ItemDef with the given ID + */ + public static ItemDef getItemDef(int id) { if (id < 0 || id >= items.length) { - return null; + return null; } return items[id]; - } + } - /** - * @param the - * items id - * @return the amount eating the item should heal - */ - public static int getItemEdibleHeals(int id) { + /** + * @param the + * items id + * @return the amount eating the item should heal + */ + public static int getItemEdibleHeals(int id) { Integer heals = itemEdibleHeals.get(id); if (heals != null) { - return heals.intValue(); + return heals.intValue(); } return 0; - } + } - /** - * @return the ItemGemDef for the given gem - */ - public static ItemGemDef getItemGemDef(int id) { - return gems.get(id); - } + /** + * @return the ItemGemDef for the given gem + */ + public static ItemGemDef getItemGemDef(int id) { + return gems.get(id); + } - /** - * @param id - * the entities ID - * @return the ItemHerbDef with the given ID - */ - public static ItemHerbDef getItemHerbDef(int id) { - return itemHerb.get(id); - } + /** + * @param id + * the entities ID + * @return the ItemHerbDef with the given ID + */ + public static ItemHerbDef getItemHerbDef(int id) { + return itemHerb.get(id); + } - /** - * @return the ItemHerbSecond for the given second ingredient - */ - public static ItemHerbSecond getItemHerbSecond(int secondID, int unfinishedID) { + /** + * @return the ItemHerbSecond for the given second ingredient + */ + public static ItemHerbSecond getItemHerbSecond(int secondID, + int unfinishedID) { for (ItemHerbSecond def : herbSeconds) { - if (def.getSecondID() == secondID && def.getUnfinishedID() == unfinishedID) { - return def; - } + if (def.getSecondID() == secondID + && def.getUnfinishedID() == unfinishedID) { + return def; + } } return null; - } + } - /** - * @return the ItemLogCutDef for the given log - */ - public static ItemLogCutDef getItemLogCutDef(int id) { - return logCut.get(id); - } + /** + * @return the ItemLogCutDef for the given log + */ + public static ItemLogCutDef getItemLogCutDef(int id) { + return logCut.get(id); + } - /** - * @param id - * the entities ID - * @return the ItemSmeltingDef with the given ID - */ - public static ItemSmeltingDef getItemSmeltingDef(int id) { - return itemSmelting.get(id); - } + /** + * @param id + * the entities ID + * @return the ItemSmeltingDef with the given ID + */ + public static ItemSmeltingDef getItemSmeltingDef(int id) { + return itemSmelting.get(id); + } - /** - * @param id - * the entities ID - * @return the ItemUnIdentHerbDef with the given ID - */ - public static ItemUnIdentHerbDef getItemUnIdentHerbDef(int id) { - return itemUnIdentHerb.get(id); - } + /** + * @param id + * the entities ID + * @return the ItemUnIdentHerbDef with the given ID + */ + public static ItemUnIdentHerbDef getItemUnIdentHerbDef(int id) { + return itemUnIdentHerb.get(id); + } - /** - * @param id - * the entities ID - * @return the ItemWieldableDef with the given ID - */ - public static ItemWieldableDef getItemWieldableDef(int id) { - return itemWieldable.get(id); - } + /** + * @param id + * the entities ID + * @return the ItemWieldableDef with the given ID + */ + public static ItemWieldableDef getItemWieldableDef(int id) { + return itemWieldable.get(id); + } - public static List[] getKeyChestLoots() { - return keyChestLoots; - } + public static List[] getKeyChestLoots() { + return keyChestLoots; + } - /** - * @param id - * the entities ID - * @return the NPCDef with the given ID - */ - public static NPCDef getNpcDef(int id) { + /** + * @param id + * the entities ID + * @return the NPCDef with the given ID + */ + public static NPCDef getNpcDef(int id) { if (id < 0 || id >= npcs.length) { - return null; + return null; } return npcs[id]; - } + } - /** - * @param id - * the entities ID - * @return the ObjectFishingDef with the given ID - */ - public static ObjectFishingDef getObjectFishingDef(int id, int click) { + /** + * @param id + * the entities ID + * @return the ObjectFishingDef with the given ID + */ + public static ObjectFishingDef getObjectFishingDef(int id, int click) { ObjectFishingDef[] defs = objectFishing.get(id); if (defs == null) { - return null; + return null; } return defs[click]; - } - - /** - * @param id - * the entities ID - * @return the ObjectMiningDef with the given ID - */ - public static ObjectMiningDef getObjectMiningDef(int id) { - return objectMining.get(id); - } - - /** - * @param the - * point we are currently at - * @return the point we should be teleported to - */ - public static Point getObjectTelePoint(Point location, String command) { - TelePoint point = objectTelePoints.get(location); - if (point == null) { - return null; } - if (command == null || point.getCommand().equalsIgnoreCase(command)) { - return point; - } - return null; - } - /** - * @param id - * the entities ID - * @return the ObjectWoodcuttingDef with the given ID - */ - public static ObjectWoodcuttingDef getObjectWoodcuttingDef(int id) { - return objectWoodcutting.get(id); - } - - /** - * @param id - * the entities ID - * @return the PrayerDef with the given ID - */ - public static PrayerDef getPrayerDef(int id) { - if (id < 0 || id >= prayers.length) { - return null; + /** + * @param id + * the entities ID + * @return the ObjectMiningDef with the given ID + */ + public static ObjectMiningDef getObjectMiningDef(int id) { + return objectMining.get(id); } - return prayers[id]; - } - /** - * @return the ItemSmithingDef for the requested item - */ - public static ItemSmithingDef getSmithingDef(int id) { - if (id < 0 || id >= itemSmithing.length) { - return null; + /** + * @param the + * point we are currently at + * @return the point we should be teleported to + */ + public static Point getObjectTelePoint(Point location, String command) { + TelePoint point = objectTelePoints.get(location); + if (point == null) { + return null; + } + if (command == null || point.getCommand().equalsIgnoreCase(command)) { + return point; + } + return null; } - return itemSmithing[id]; - } - /** - * @return the ItemSmithingDef for the requested item - */ - public static ItemSmithingDef getSmithingDefbyID(int itemID) { - for(ItemSmithingDef i : itemSmithing) { - if(i.itemID == itemID) - return i; - } - return null; - } - /** - * @param the - * spells id - * @return the lvl of the spell (for calculating what it hits) - */ - public static int getSpellAggressiveLvl(int id) { - Integer lvl = spellAggressiveLvl.get(id); - if (lvl != null) { - return lvl.intValue(); + /** + * @param id + * the entities ID + * @return the ObjectWoodcuttingDef with the given ID + */ + public static ObjectWoodcuttingDef getObjectWoodcuttingDef(int id) { + return objectWoodcutting.get(id); } - return 0; - } - /** - * @param id - * the entities ID - * @return the SpellDef with the given ID - */ - public static SpellDef getSpellDef(int id) { - if (id < 0 || id >= spells.length) { - return null; + /** + * @param id + * the entities ID + * @return the PrayerDef with the given ID + */ + public static PrayerDef getPrayerDef(int id) { + if (id < 0 || id >= prayers.length) { + return null; + } + return prayers[id]; } - return spells[id]; - } - /** - * @param id - * the entities ID - * @return the TileDef with the given ID - */ - public static TileDef getTileDef(int id) { - if (id < 0 || id >= tiles.length) { - return null; + /** + * @return the ItemSmithingDef for the requested item + */ + public static ItemSmithingDef getSmithingDef(int id) { + if (id < 0 || id >= itemSmithing.length) { + return null; + } + return itemSmithing[id]; + } + + /** + * @return the ItemSmithingDef for the requested item + */ + public static ItemSmithingDef getSmithingDefbyID(int itemID) { + for (ItemSmithingDef i : itemSmithing) { + if (i.itemID == itemID) + return i; + } + return null; + } + + /** + * @param the + * spells id + * @return the lvl of the spell (for calculating what it hits) + */ + public static int getSpellAggressiveLvl(int id) { + Integer lvl = spellAggressiveLvl.get(id); + if (lvl != null) { + return lvl.intValue(); + } + return 0; + } + + /** + * @param id + * the entities ID + * @return the SpellDef with the given ID + */ + public static SpellDef getSpellDef(int id) { + if (id < 0 || id >= spells.length) { + return null; + } + return spells[id]; + } + + /** + * @param id + * the entities ID + * @return the TileDef with the given ID + */ + public static TileDef getTileDef(int id) { + if (id < 0 || id >= tiles.length) { + return null; + } + return tiles[id]; } - return tiles[id]; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/FiremakingDef.java b/GameServer/src/org/moparscape/msc/gs/external/FiremakingDef.java index 6a6b5bb..d92ef11 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/FiremakingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/FiremakingDef.java @@ -1,28 +1,28 @@ package org.moparscape.msc.gs.external; public class FiremakingDef { - /** - * The exp given by these logs - */ - public int exp; - /** - * How many ms the fire should last for - */ - public int length; - /** - * The firemaking level required to light these logs - */ - public int level; + /** + * The exp given by these logs + */ + public int exp; + /** + * How many ms the fire should last for + */ + public int length; + /** + * The firemaking level required to light these logs + */ + public int level; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getLength() { - return length * 1000; - } + public int getLength() { + return length * 1000; + } - public int getRequiredLevel() { - return level; - } + public int getRequiredLevel() { + return level; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/GameObjectDef.java b/GameServer/src/org/moparscape/msc/gs/external/GameObjectDef.java index 6cb8ec0..e5d35e6 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/GameObjectDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/GameObjectDef.java @@ -5,59 +5,59 @@ package org.moparscape.msc.gs.external; */ public class GameObjectDef extends EntityDef { - /** - * The first command of the object - */ - public String command1; - /** - * The second command of the object - */ - public String command2; - /** - * Can't figure out what this one is for, either. - */ - public int groundItemVar; - /** - * The height of the object - */ - public int height; - public String objectModel; - /** - * The object type. Can't figure out the significance of it. Item type 2 & 3 - * seem to be special - */ - public int type; + /** + * The first command of the object + */ + public String command1; + /** + * The second command of the object + */ + public String command2; + /** + * Can't figure out what this one is for, either. + */ + public int groundItemVar; + /** + * The height of the object + */ + public int height; + public String objectModel; + /** + * The object type. Can't figure out the significance of it. Item type 2 & 3 + * seem to be special + */ + public int type; - /** - * The width of the object - */ - public int width; + /** + * The width of the object + */ + public int width; - public String getCommand1() { - return command1.toLowerCase(); - } + public String getCommand1() { + return command1.toLowerCase(); + } - public String getCommand2() { - return command2.toLowerCase(); - } + public String getCommand2() { + return command2.toLowerCase(); + } - public int getGroundItemVar() { - return groundItemVar; - } + public int getGroundItemVar() { + return groundItemVar; + } - public int getHeight() { - return height; - } + public int getHeight() { + return height; + } - public String getObjectModel() { - return objectModel; - } + public String getObjectModel() { + return objectModel; + } - public int getType() { - return type; - } + public int getType() { + return type; + } - public int getWidth() { - return width; - } + public int getWidth() { + return width; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/GameObjectLoc.java b/GameServer/src/org/moparscape/msc/gs/external/GameObjectLoc.java index 9e7caca..21264bf 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/GameObjectLoc.java +++ b/GameServer/src/org/moparscape/msc/gs/external/GameObjectLoc.java @@ -1,52 +1,52 @@ package org.moparscape.msc.gs.external; public class GameObjectLoc { - /** - * The direction it faces - */ - public int direction; - /** - * The id of the gameObject - */ - public int id; - /** - * Type of object - 0: Object, 1: WallObject - */ - public int type; - /** - * The objects x coord - */ - public int x; - /** - * The objects y coord - */ - public int y; + /** + * The direction it faces + */ + public int direction; + /** + * The id of the gameObject + */ + public int id; + /** + * Type of object - 0: Object, 1: WallObject + */ + public int type; + /** + * The objects x coord + */ + public int x; + /** + * The objects y coord + */ + public int y; - public GameObjectLoc(int id, int x, int y, int direction, int type) { - this.id = id; - this.x = x; - this.y = y; - this.direction = direction; - this.type = type; - } + public GameObjectLoc(int id, int x, int y, int direction, int type) { + this.id = id; + this.x = x; + this.y = y; + this.direction = direction; + this.type = type; + } - public int getDirection() { - return direction; - } + public int getDirection() { + return direction; + } - public int getId() { - return id; - } + public int getId() { + return id; + } - public int getType() { - return type; - } + public int getType() { + return type; + } - public int getX() { - return x; - } + public int getX() { + return x; + } - public int getY() { - return y; - } + public int getY() { + return y; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemArrowHeadDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemArrowHeadDef.java index 35ae8f8..a821175 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemArrowHeadDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemArrowHeadDef.java @@ -5,28 +5,28 @@ package org.moparscape.msc.gs.external; */ public class ItemArrowHeadDef { - /** - * The ID of the arrow created - */ - public int arrowID; - /** - * The exp given by attaching this arrow head - */ - public double exp; - /** - * The level required to attach this head to an arrow - */ - public int requiredLvl; + /** + * The ID of the arrow created + */ + public int arrowID; + /** + * The exp given by attaching this arrow head + */ + public double exp; + /** + * The level required to attach this head to an arrow + */ + public int requiredLvl; - public int getArrowID() { - return arrowID; - } + public int getArrowID() { + return arrowID; + } - public double getExp() { - return exp; - } + public double getExp() { + return exp; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemBowStringDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemBowStringDef.java index fe28fcb..339b738 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemBowStringDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemBowStringDef.java @@ -5,28 +5,28 @@ package org.moparscape.msc.gs.external; */ public class ItemBowStringDef { - /** - * The ID of the bow created - */ - public int bowID; - /** - * The exp given by attaching this bow string - */ - public int exp; - /** - * The level required to attach this bow string - */ - public int requiredLvl; + /** + * The ID of the bow created + */ + public int bowID; + /** + * The exp given by attaching this bow string + */ + public int exp; + /** + * The level required to attach this bow string + */ + public int requiredLvl; - public int getBowID() { - return bowID; - } + public int getBowID() { + return bowID; + } - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemCookingDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemCookingDef.java index 53657a1..b4c1773 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemCookingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemCookingDef.java @@ -5,37 +5,37 @@ package org.moparscape.msc.gs.external; */ public class ItemCookingDef { - /** - * The id of the burned version - */ - public int burnedId; - /** - * The id of the cooked version - */ - public int cookedId; - /** - * The exp cooking this item gives - */ - public int exp; - /** - * The level required to cook this - */ - public int requiredLvl; + /** + * The id of the burned version + */ + public int burnedId; + /** + * The id of the cooked version + */ + public int cookedId; + /** + * The exp cooking this item gives + */ + public int exp; + /** + * The level required to cook this + */ + public int requiredLvl; - public int getBurnedId() { - return burnedId; - } + public int getBurnedId() { + return burnedId; + } - public int getCookedId() { - return cookedId; - } + public int getCookedId() { + return cookedId; + } - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemCraftingDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemCraftingDef.java index a9d747d..1f5d2b2 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemCraftingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemCraftingDef.java @@ -1,28 +1,28 @@ package org.moparscape.msc.gs.external; public class ItemCraftingDef { - /** - * The exp given - */ - public int exp; - /** - * The ID of the item produced - */ - public int itemID; - /** - * The crafting level required to make this item - */ - public int requiredLvl; + /** + * The exp given + */ + public int exp; + /** + * The ID of the item produced + */ + public int itemID; + /** + * The crafting level required to make this item + */ + public int requiredLvl; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getItemID() { - return itemID; - } + public int getItemID() { + return itemID; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemDartTipDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemDartTipDef.java index 4f5af9c..8b3029a 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemDartTipDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemDartTipDef.java @@ -5,28 +5,28 @@ package org.moparscape.msc.gs.external; */ public class ItemDartTipDef { - /** - * The ID of the arrow created - */ - public int dartID; - /** - * The exp given by attaching this arrow head - */ - public double exp; - /** - * The level required to attach this head to an arrow - */ - public int requiredLvl; + /** + * The ID of the arrow created + */ + public int dartID; + /** + * The exp given by attaching this arrow head + */ + public double exp; + /** + * The level required to attach this head to an arrow + */ + public int requiredLvl; - public int getDartID() { - return dartID; - } + public int getDartID() { + return dartID; + } - public double getExp() { - return exp; - } + public double getExp() { + return exp; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemDef.java index 0f23311..4210278 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemDef.java @@ -4,72 +4,72 @@ package org.moparscape.msc.gs.external; * The definition wrapper for items */ public class ItemDef extends EntityDef { - /** - * The base price of the object - */ - public int basePrice; - /** - * The command of the object - */ - public String command; - /** - * PictureMask - */ - public int mask; - /** - * Is this item a member's item? - */ - public boolean members; - /** - * The sprite id - */ - public int sprite; - /** - * Whether the item is stackable or not - */ - public boolean stackable; - /** - * Is this item tradeable? - */ - public boolean trade; - /** - * Whether the item is wieldable or not - */ - public int wieldable; + /** + * The base price of the object + */ + public int basePrice; + /** + * The command of the object + */ + public String command; + /** + * PictureMask + */ + public int mask; + /** + * Is this item a member's item? + */ + public boolean members; + /** + * The sprite id + */ + public int sprite; + /** + * Whether the item is stackable or not + */ + public boolean stackable; + /** + * Is this item tradeable? + */ + public boolean trade; + /** + * Whether the item is wieldable or not + */ + public int wieldable; - public boolean canTrade() { - return trade; - } + public boolean canTrade() { + return trade; + } - public int getBasePrice() { - return basePrice; - } + public int getBasePrice() { + return basePrice; + } - public String getCommand() { - return command; - } + public String getCommand() { + return command; + } - public String getCommandType() { - return wieldable == 16 ? "Wield" : "Wear"; - } + public String getCommandType() { + return wieldable == 16 ? "Wield" : "Wear"; + } - public int getPictureMask() { - return mask; - } + public int getPictureMask() { + return mask; + } - public int getSprite() { - return sprite; - } + public int getSprite() { + return sprite; + } - public boolean isMembers() { - return members; - } + public boolean isMembers() { + return members; + } - public boolean isStackable() { - return stackable; - } + public boolean isStackable() { + return stackable; + } - public boolean isWieldable() { - return wieldable > 0; - } + public boolean isWieldable() { + return wieldable > 0; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemDropDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemDropDef.java index 7e6c151..0b15b53 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemDropDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemDropDef.java @@ -1,25 +1,25 @@ package org.moparscape.msc.gs.external; public class ItemDropDef { - public int amount; - public int id; - public int weight; + public int amount; + public int id; + public int weight; - public ItemDropDef(int id, int amount, int weight) { - this.id = id; - this.amount = amount; - this.weight = weight; - } + public ItemDropDef(int id, int amount, int weight) { + this.id = id; + this.amount = amount; + this.weight = weight; + } - public int getAmount() { - return amount; - } + public int getAmount() { + return amount; + } - public int getID() { - return id; - } + public int getID() { + return id; + } - public int getWeight() { - return weight; - } + public int getWeight() { + return weight; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemGemDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemGemDef.java index 94344b4..61bd468 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemGemDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemGemDef.java @@ -5,28 +5,28 @@ package org.moparscape.msc.gs.external; */ public class ItemGemDef { - /** - * The exp given by attaching this bow string - */ - public int exp; - /** - * The ID of the gem - */ - public int gemID; - /** - * The level required to attach this bow string - */ - public int requiredLvl; + /** + * The exp given by attaching this bow string + */ + public int exp; + /** + * The ID of the gem + */ + public int gemID; + /** + * The level required to attach this bow string + */ + public int requiredLvl; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getGemID() { - return gemID; - } + public int getGemID() { + return gemID; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemHerbDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemHerbDef.java index db3c345..b3273c8 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemHerbDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemHerbDef.java @@ -5,29 +5,29 @@ package org.moparscape.msc.gs.external; */ public class ItemHerbDef { - /** - * The exp smelting this item gives - */ - public int exp; - /** - * The id of the related potion - */ - public int potionId; - /** - * The level required to make this - */ - public int requiredLvl; + /** + * The exp smelting this item gives + */ + public int exp; + /** + * The id of the related potion + */ + public int potionId; + /** + * The level required to make this + */ + public int requiredLvl; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getPotionId() { - return potionId; - } + public int getPotionId() { + return potionId; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemHerbSecond.java b/GameServer/src/org/moparscape/msc/gs/external/ItemHerbSecond.java index a2e2417..cc218b9 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemHerbSecond.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemHerbSecond.java @@ -5,44 +5,44 @@ package org.moparscape.msc.gs.external; */ public class ItemHerbSecond { - /** - * The exp given completing this potion - */ - public int exp; - /** - * The ID of the potion created - */ - public int potionID; - /** - * The level required to complete this potion - */ - public int requiredLvl; - /** - * The ID of the second ingredient - */ - public int secondID; - /** - * The ID of the unfinished potion required - */ - public int unfinishedID; + /** + * The exp given completing this potion + */ + public int exp; + /** + * The ID of the potion created + */ + public int potionID; + /** + * The level required to complete this potion + */ + public int requiredLvl; + /** + * The ID of the second ingredient + */ + public int secondID; + /** + * The ID of the unfinished potion required + */ + public int unfinishedID; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getPotionID() { - return potionID; - } + public int getPotionID() { + return potionID; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } - public int getSecondID() { - return secondID; - } + public int getSecondID() { + return secondID; + } - public int getUnfinishedID() { - return unfinishedID; - } + public int getUnfinishedID() { + return unfinishedID; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemLoc.java b/GameServer/src/org/moparscape/msc/gs/external/ItemLoc.java index 8b8e9e7..525d12e 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemLoc.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemLoc.java @@ -1,44 +1,44 @@ package org.moparscape.msc.gs.external; public class ItemLoc { - /** - * Amount of item (stackables) - */ - public int amount; - /** - * The id of the gameObject - */ - public int id; - /** - * How long the item takes to spawn - */ - public int respawnTime; - /** - * The objects x coord - */ - public int x; - /** - * The objects y coord - */ - public int y; + /** + * Amount of item (stackables) + */ + public int amount; + /** + * The id of the gameObject + */ + public int id; + /** + * How long the item takes to spawn + */ + public int respawnTime; + /** + * The objects x coord + */ + public int x; + /** + * The objects y coord + */ + public int y; - public int getAmount() { - return amount; - } + public int getAmount() { + return amount; + } - public int getId() { - return id; - } + public int getId() { + return id; + } - public int getRespawnTime() { - return respawnTime; - } + public int getRespawnTime() { + return respawnTime; + } - public int getX() { - return x; - } + public int getX() { + return x; + } - public int getY() { - return y; - } + public int getY() { + return y; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemLogCutDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemLogCutDef.java index 30522d0..ef05669 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemLogCutDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemLogCutDef.java @@ -5,51 +5,51 @@ package org.moparscape.msc.gs.external; */ public class ItemLogCutDef { - public int longbowExp; - public int longbowID; - public int longbowLvl; + public int longbowExp; + public int longbowID; + public int longbowLvl; - public int shaftAmount; - public int shaftLvl; - public int shortbowExp; + public int shaftAmount; + public int shaftLvl; + public int shortbowExp; - public int shortbowID; - public int shortbowLvl; + public int shortbowID; + public int shortbowLvl; - public int getLongbowExp() { - return longbowExp; - } + public int getLongbowExp() { + return longbowExp; + } - public int getLongbowID() { - return longbowID; - } + public int getLongbowID() { + return longbowID; + } - public int getLongbowLvl() { - return longbowLvl; - } + public int getLongbowLvl() { + return longbowLvl; + } - public int getShaftAmount() { - return shaftAmount; - } + public int getShaftAmount() { + return shaftAmount; + } - public int getShaftExp() { - return shaftAmount; - } + public int getShaftExp() { + return shaftAmount; + } - public int getShaftLvl() { - return shaftLvl; - } + public int getShaftLvl() { + return shaftLvl; + } - public int getShortbowExp() { - return shortbowExp; - } + public int getShortbowExp() { + return shortbowExp; + } - public int getShortbowID() { - return shortbowID; - } + public int getShortbowID() { + return shortbowID; + } - public int getShortbowLvl() { - return shortbowLvl; - } + public int getShortbowLvl() { + return shortbowLvl; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemSmeltingDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemSmeltingDef.java index da791a7..bce63c9 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemSmeltingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemSmeltingDef.java @@ -5,37 +5,37 @@ package org.moparscape.msc.gs.external; */ public class ItemSmeltingDef { - /** - * The id of the related bar - */ - public int barId; - /** - * The exp smelting this item gives - */ - public int exp; - /** - * The ores required in addition to this one - */ - public ReqOreDef[] reqOres; - /** - * The level required to smelt this - */ - public int requiredLvl; + /** + * The id of the related bar + */ + public int barId; + /** + * The exp smelting this item gives + */ + public int exp; + /** + * The ores required in addition to this one + */ + public ReqOreDef[] reqOres; + /** + * The level required to smelt this + */ + public int requiredLvl; - public int getBarId() { - return barId; - } + public int getBarId() { + return barId; + } - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } - public ReqOreDef[] getReqOres() { - return reqOres; - } + public ReqOreDef[] getReqOres() { + return reqOres; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemSmithingDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemSmithingDef.java index 1077834..bf17d00 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemSmithingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemSmithingDef.java @@ -1,36 +1,36 @@ package org.moparscape.msc.gs.external; public class ItemSmithingDef { - /** - * The amount of the item produced - */ - public int amount; - /** - * How many bars are required - */ - public int bars; - /** - * The ID of the item produced - */ - public int itemID; - /** - * The smithing level required to make this item - */ - public int level; + /** + * The amount of the item produced + */ + public int amount; + /** + * How many bars are required + */ + public int bars; + /** + * The ID of the item produced + */ + public int itemID; + /** + * The smithing level required to make this item + */ + public int level; - public int getAmount() { - return amount; - } + public int getAmount() { + return amount; + } - public int getItemID() { - return itemID; - } + public int getItemID() { + return itemID; + } - public int getRequiredBars() { - return bars; - } + public int getRequiredBars() { + return bars; + } - public int getRequiredLevel() { - return level; - } + public int getRequiredLevel() { + return level; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemUnIdentHerbDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemUnIdentHerbDef.java index 473f938..54804d5 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemUnIdentHerbDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemUnIdentHerbDef.java @@ -5,29 +5,29 @@ package org.moparscape.msc.gs.external; */ public class ItemUnIdentHerbDef { - /** - * How much experience identifying gives - */ - public int exp; - /** - * The id of the herb this turns into - */ - private int newId; - /** - * Herblaw level required to identify - */ - public int requiredLvl; + /** + * How much experience identifying gives + */ + public int exp; + /** + * The id of the herb this turns into + */ + private int newId; + /** + * Herblaw level required to identify + */ + public int requiredLvl; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getLevelRequired() { - return requiredLvl; - } + public int getLevelRequired() { + return requiredLvl; + } - public int getNewId() { - return newId; - } + public int getNewId() { + return newId; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ItemWieldableDef.java b/GameServer/src/org/moparscape/msc/gs/external/ItemWieldableDef.java index ac475fc..4195b3f 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ItemWieldableDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ItemWieldableDef.java @@ -1,108 +1,108 @@ package org.moparscape.msc.gs.external; import java.util.HashMap; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; /** * The definition wrapper for items */ public class ItemWieldableDef { - /** - * How many armour points should be given - */ - public int armourPoints; - /** - * If the item can only be worn by females (used for female plates) - */ - private boolean femaleOnly; - /** - * How many magic points should be given - */ - public int magicPoints; - /** - * How many prayer points should be given - */ - public int prayerPoints; - /** - * How many range points should be given - */ - public int rangePoints; - /** - * The level of each stat required to wield - */ - public HashMap requiredStats; - /** - * Sprite Id of the item - */ - public int sprite; - /** - * Type of item - */ - public int type; - /** - * How many weapon aim points should be given - */ - public int weaponAimPoints; - /** - * How many weapon power points should be given - */ - public int weaponPowerPoints; - /** - * Body position the item is drawn on - */ - private int wieldPos; + /** + * How many armour points should be given + */ + public int armourPoints; + /** + * If the item can only be worn by females (used for female plates) + */ + private boolean femaleOnly; + /** + * How many magic points should be given + */ + public int magicPoints; + /** + * How many prayer points should be given + */ + public int prayerPoints; + /** + * How many range points should be given + */ + public int rangePoints; + /** + * The level of each stat required to wield + */ + public HashMap requiredStats; + /** + * Sprite Id of the item + */ + public int sprite; + /** + * Type of item + */ + public int type; + /** + * How many weapon aim points should be given + */ + public int weaponAimPoints; + /** + * How many weapon power points should be given + */ + public int weaponPowerPoints; + /** + * Body position the item is drawn on + */ + private int wieldPos; - public boolean femaleOnly() { - return femaleOnly; - } - - public int[] getAffectedTypes() { - int[] affectedTypes = EntityHandler.getItemAffectedTypes(type); - if (affectedTypes != null) { - return affectedTypes; + public boolean femaleOnly() { + return femaleOnly; } - return new int[0]; - } - public int getArmourPoints() { - return armourPoints; - } + public int[] getAffectedTypes() { + int[] affectedTypes = EntityHandler.getItemAffectedTypes(type); + if (affectedTypes != null) { + return affectedTypes; + } + return new int[0]; + } - public int getMagicPoints() { - return magicPoints; - } + public int getArmourPoints() { + return armourPoints; + } - public int getPrayerPoints() { - return prayerPoints; - } + public int getMagicPoints() { + return magicPoints; + } - public int getRangePoints() { - return rangePoints; - } + public int getPrayerPoints() { + return prayerPoints; + } - public int getSprite() { - return sprite; - } + public int getRangePoints() { + return rangePoints; + } - public Set> getStatsRequired() { - return requiredStats.entrySet(); - } + public int getSprite() { + return sprite; + } - public int getType() { - return type; - } + public Set> getStatsRequired() { + return requiredStats.entrySet(); + } - public int getWeaponAimPoints() { - return weaponAimPoints; - } + public int getType() { + return type; + } - public int getWeaponPowerPoints() { - return weaponPowerPoints; - } + public int getWeaponAimPoints() { + return weaponAimPoints; + } - public int getWieldPos() { - return wieldPos; - } + public int getWeaponPowerPoints() { + return weaponPowerPoints; + } + + public int getWieldPos() { + return wieldPos; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/NPCDef.java b/GameServer/src/org/moparscape/msc/gs/external/NPCDef.java index 6a560e8..9695e85 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/NPCDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/NPCDef.java @@ -4,148 +4,148 @@ package org.moparscape.msc.gs.external; * The definition wrapper for npcs */ public class NPCDef extends EntityDef { - /** - * Whether the npc is aggressive - */ - public boolean aggressive; - /** - * The attack lvl - */ - public int attack; - /** - * Whether the npc is attackable - */ - public boolean attackable; - /** - * Colour of our legs - */ - public int bottomColour; - /** - * Something to do with the camera - */ - public int camera1, camera2; - /** - * The primary command - */ - public String command; - /** - * The def lvl - */ - public int defense; - /** - * Possible drops - */ - public ItemDropDef[] drops; - /** - * Colour of our hair - */ - public int hairColour; - /** - * The hit points - */ - public int hits; - /** - * How long the npc takes to respawn - */ - public int respawnTime; - /** - * Skin colour - */ - public int skinColour; - /** - * Sprites used to make up this npc - */ - public int[] sprites; - /** - * The strength lvl - */ - public int strength; - /** - * Colour of our top - */ - public int topColour; - /** - * Something to do with models - */ - public int walkModel, combatModel, combatSprite; + /** + * Whether the npc is aggressive + */ + public boolean aggressive; + /** + * The attack lvl + */ + public int attack; + /** + * Whether the npc is attackable + */ + public boolean attackable; + /** + * Colour of our legs + */ + public int bottomColour; + /** + * Something to do with the camera + */ + public int camera1, camera2; + /** + * The primary command + */ + public String command; + /** + * The def lvl + */ + public int defense; + /** + * Possible drops + */ + public ItemDropDef[] drops; + /** + * Colour of our hair + */ + public int hairColour; + /** + * The hit points + */ + public int hits; + /** + * How long the npc takes to respawn + */ + public int respawnTime; + /** + * Skin colour + */ + public int skinColour; + /** + * Sprites used to make up this npc + */ + public int[] sprites; + /** + * The strength lvl + */ + public int strength; + /** + * Colour of our top + */ + public int topColour; + /** + * Something to do with models + */ + public int walkModel, combatModel, combatSprite; - public int getAtt() { - return attack; - } + public int getAtt() { + return attack; + } - public int getBottomColour() { - return bottomColour; - } + public int getBottomColour() { + return bottomColour; + } - public int getCamera1() { - return camera1; - } + public int getCamera1() { + return camera1; + } - public int getCamera2() { - return camera2; - } + public int getCamera2() { + return camera2; + } - public int getCombatModel() { - return combatModel; - } + public int getCombatModel() { + return combatModel; + } - public int getCombatSprite() { - return combatSprite; - } + public int getCombatSprite() { + return combatSprite; + } - public String getCommand() { - return command; - } + public String getCommand() { + return command; + } - public int getDef() { - return defense; - } + public int getDef() { + return defense; + } - public ItemDropDef[] getDrops() { - return drops; - } + public ItemDropDef[] getDrops() { + return drops; + } - public int getHairColour() { - return hairColour; - } + public int getHairColour() { + return hairColour; + } - public int getHits() { - return hits; - } + public int getHits() { + return hits; + } - public int getSkinColour() { - return skinColour; - } + public int getSkinColour() { + return skinColour; + } - public int getSprite(int index) { - return sprites[index]; - } + public int getSprite(int index) { + return sprites[index]; + } - public int[] getStats() { - return new int[] { attack, defense, strength }; - } + public int[] getStats() { + return new int[] { attack, defense, strength }; + } - public int getStr() { - return strength; - } + public int getStr() { + return strength; + } - public int getTopColour() { - return topColour; - } + public int getTopColour() { + return topColour; + } - public int getWalkModel() { - return walkModel; - } + public int getWalkModel() { + return walkModel; + } - public boolean isAggressive() { - return attackable && aggressive; - } + public boolean isAggressive() { + return attackable && aggressive; + } - public boolean isAttackable() { - return attackable; - } + public boolean isAttackable() { + return attackable; + } - public int respawnTime() { - return respawnTime; - } + public int respawnTime() { + return respawnTime; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/NPCLoc.java b/GameServer/src/org/moparscape/msc/gs/external/NPCLoc.java index 3708e49..4fa0adc 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/NPCLoc.java +++ b/GameServer/src/org/moparscape/msc/gs/external/NPCLoc.java @@ -1,70 +1,71 @@ package org.moparscape.msc.gs.external; public class NPCLoc { - /** - * The id of the Npc - */ - public int id; - /** - * The Npcs max x coord - */ - public int maxX; - /** - * The Npcs max y coord - */ - public int maxY; - /** - * The Npcs min x coord - */ - public int minX; - /** - * The Npcs min y coord - */ - public int minY; - /** - * The Npcs x coord - */ - public int startX; - /** - * The Npcs y coord - */ - public int startY; + /** + * The id of the Npc + */ + public int id; + /** + * The Npcs max x coord + */ + public int maxX; + /** + * The Npcs max y coord + */ + public int maxY; + /** + * The Npcs min x coord + */ + public int minX; + /** + * The Npcs min y coord + */ + public int minY; + /** + * The Npcs x coord + */ + public int startX; + /** + * The Npcs y coord + */ + public int startY; - public NPCLoc(int id, int startX, int startY, int minX, int maxX, int minY, int maxY) { - this.id = id; - this.startX = startX; - this.startY = startY; - this.minX = minX; - this.maxX = maxX; - this.minY = minY; - this.maxY = maxY; - } + public NPCLoc(int id, int startX, int startY, int minX, int maxX, int minY, + int maxY) { + this.id = id; + this.startX = startX; + this.startY = startY; + this.minX = minX; + this.maxX = maxX; + this.minY = minY; + this.maxY = maxY; + } - public int getId() { - return id; - } + public int getId() { + return id; + } - public int maxX() { - return maxX; - } + public int maxX() { + return maxX; + } - public int maxY() { - return maxY; - } + public int maxY() { + return maxY; + } - public int minX() { - return minX; - } + public int minX() { + return minX; + } - public int minY() { - return minY; - } + public int minY() { + return minY; + } - public int startX() { - return startX; - } + public int startX() { + return startX; + } - public int startY() { - return startY; - } + public int startY() { + return startY; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ObjectFishDef.java b/GameServer/src/org/moparscape/msc/gs/external/ObjectFishDef.java index 73715a6..df7d442 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ObjectFishDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ObjectFishDef.java @@ -5,29 +5,29 @@ package org.moparscape.msc.gs.external; */ public class ObjectFishDef { - /** - * How much experience this fish should give - */ - public int exp; - /** - * The id of the fish - */ - public int fishId; - /** - * The fishing level required to fish - */ - public int requiredLevel; + /** + * How much experience this fish should give + */ + public int exp; + /** + * The id of the fish + */ + public int fishId; + /** + * The fishing level required to fish + */ + public int requiredLevel; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getId() { - return fishId; - } + public int getId() { + return fishId; + } - public int getReqLevel() { - return requiredLevel; - } + public int getReqLevel() { + return requiredLevel; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ObjectFishingDef.java b/GameServer/src/org/moparscape/msc/gs/external/ObjectFishingDef.java index 13ae6b2..7053733 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ObjectFishingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ObjectFishingDef.java @@ -5,39 +5,39 @@ package org.moparscape.msc.gs.external; */ public class ObjectFishingDef { - /** - * The If of any bait required to go with the net - */ - public int baitId; - /** - * The fish that can be caught here - */ - public ObjectFishDef[] defs; - /** - * The Id of the net required to fish with - */ - public int netId; + /** + * The If of any bait required to go with the net + */ + public int baitId; + /** + * The fish that can be caught here + */ + public ObjectFishDef[] defs; + /** + * The Id of the net required to fish with + */ + public int netId; - public int getBaitId() { - return baitId; - } - - public ObjectFishDef[] getFishDefs() { - return defs; - } - - public int getNetId() { - return netId; - } - - public int getReqLevel() { - int requiredLevel = 99; - for (ObjectFishDef def : defs) { - if (def.getReqLevel() < requiredLevel) { - requiredLevel = def.getReqLevel(); - } + public int getBaitId() { + return baitId; + } + + public ObjectFishDef[] getFishDefs() { + return defs; + } + + public int getNetId() { + return netId; + } + + public int getReqLevel() { + int requiredLevel = 99; + for (ObjectFishDef def : defs) { + if (def.getReqLevel() < requiredLevel) { + requiredLevel = def.getReqLevel(); + } + } + return requiredLevel; } - return requiredLevel; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ObjectMiningDef.java b/GameServer/src/org/moparscape/msc/gs/external/ObjectMiningDef.java index efeed92..db0fda7 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ObjectMiningDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ObjectMiningDef.java @@ -5,37 +5,37 @@ package org.moparscape.msc.gs.external; */ public class ObjectMiningDef { - /** - * How much experience identifying gives - */ - public int exp; - /** - * The id of the ore this turns into - */ - private int oreId; - /** - * Herblaw level required to identify - */ - public int requiredLvl; - /** - * How long the rock takes to respawn afterwards - */ - public int respawnTime; + /** + * How much experience identifying gives + */ + public int exp; + /** + * The id of the ore this turns into + */ + private int oreId; + /** + * Herblaw level required to identify + */ + public int requiredLvl; + /** + * How long the rock takes to respawn afterwards + */ + public int respawnTime; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getOreId() { - return oreId; - } + public int getOreId() { + return oreId; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } - public int getRespawnTime() { - return respawnTime; - } + public int getRespawnTime() { + return respawnTime; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ObjectWoodcuttingDef.java b/GameServer/src/org/moparscape/msc/gs/external/ObjectWoodcuttingDef.java index ac5083c..0d1b0f0 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ObjectWoodcuttingDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ObjectWoodcuttingDef.java @@ -5,45 +5,45 @@ package org.moparscape.msc.gs.external; */ public class ObjectWoodcuttingDef { - /** - * How much experience identifying gives - */ - public int exp; - /** - * Percent chance the tree will be felled - */ - public int fell; - /** - * The id of the ore this turns into - */ - private int logId; - /** - * Herblaw level required to identify - */ - public int requiredLvl; - /** - * How long the tree takes to respawn afterwards - */ - public int respawnTime; + /** + * How much experience identifying gives + */ + public int exp; + /** + * Percent chance the tree will be felled + */ + public int fell; + /** + * The id of the ore this turns into + */ + private int logId; + /** + * Herblaw level required to identify + */ + public int requiredLvl; + /** + * How long the tree takes to respawn afterwards + */ + public int respawnTime; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getFell() { - return fell; - } + public int getFell() { + return fell; + } - public int getLogId() { - return logId; - } + public int getLogId() { + return logId; + } - public int getReqLevel() { - return requiredLvl; - } + public int getReqLevel() { + return requiredLvl; + } - public int getRespawnTime() { - return respawnTime; - } + public int getRespawnTime() { + return respawnTime; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/PrayerDef.java b/GameServer/src/org/moparscape/msc/gs/external/PrayerDef.java index c1ab723..0811017 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/PrayerDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/PrayerDef.java @@ -5,20 +5,20 @@ package org.moparscape.msc.gs.external; */ public class PrayerDef extends EntityDef { - /** - * The drain rate of the prayer (perhaps points per min?) - */ - public int drainRate; - /** - * The level required to use the prayer - */ - public int reqLevel; + /** + * The drain rate of the prayer (perhaps points per min?) + */ + public int drainRate; + /** + * The level required to use the prayer + */ + public int reqLevel; - public int getDrainRate() { - return drainRate; - } + public int getDrainRate() { + return drainRate; + } - public int getReqLevel() { - return reqLevel; - } + public int getReqLevel() { + return reqLevel; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/ReqOreDef.java b/GameServer/src/org/moparscape/msc/gs/external/ReqOreDef.java index 7e8e93f..7e5d401 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/ReqOreDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/ReqOreDef.java @@ -5,21 +5,21 @@ package org.moparscape.msc.gs.external; */ public class ReqOreDef { - /** - * The amount of the ore required - */ - public int amount; - /** - * The id of the ore - */ - public int oreId; + /** + * The amount of the ore required + */ + public int amount; + /** + * The id of the ore + */ + public int oreId; - public int getAmount() { - return amount; - } + public int getAmount() { + return amount; + } - public int getId() { - return oreId; - } + public int getId() { + return oreId; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/SpellDef.java b/GameServer/src/org/moparscape/msc/gs/external/SpellDef.java index 3c275e8..8538b67 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/SpellDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/SpellDef.java @@ -1,52 +1,52 @@ package org.moparscape.msc.gs.external; import java.util.HashMap; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; /** * The definition wrapper for spells */ public class SpellDef extends EntityDef { - /** - * The amount of experience given by this spell - */ - public int exp; - /** - * The level required to use the spell - */ - public int reqLevel; - /** - * The number of each type of rune (item id) required - */ - public HashMap requiredRunes; - /** - * The number of different runes needed for the spell - */ - public int runeCount; - /** - * The type of the spell - */ - public int type; + /** + * The amount of experience given by this spell + */ + public int exp; + /** + * The level required to use the spell + */ + public int reqLevel; + /** + * The number of each type of rune (item id) required + */ + public HashMap requiredRunes; + /** + * The number of different runes needed for the spell + */ + public int runeCount; + /** + * The type of the spell + */ + public int type; - public int getExp() { - return exp; - } + public int getExp() { + return exp; + } - public int getReqLevel() { - return reqLevel; - } + public int getReqLevel() { + return reqLevel; + } - public int getRuneCount() { - return runeCount; - } + public int getRuneCount() { + return runeCount; + } - public Set> getRunesRequired() { - return requiredRunes.entrySet(); - } + public Set> getRunesRequired() { + return requiredRunes.entrySet(); + } - public int getSpellType() { - return type; - } + public int getSpellType() { + return type; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/external/TileDef.java b/GameServer/src/org/moparscape/msc/gs/external/TileDef.java index 3dd53cd..2b60a03 100644 --- a/GameServer/src/org/moparscape/msc/gs/external/TileDef.java +++ b/GameServer/src/org/moparscape/msc/gs/external/TileDef.java @@ -1,19 +1,19 @@ package org.moparscape.msc.gs.external; public class TileDef { - public int colour; - public int objectType; - public int unknown; + public int colour; + public int objectType; + public int unknown; - public int getColour() { - return colour; - } + public int getColour() { + return colour; + } - public int getObjectType() { - return objectType; - } + public int getObjectType() { + return objectType; + } - public int getUnknown() { - return unknown; - } + public int getUnknown() { + return unknown; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java b/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java index c8c7a05..1e171d0 100644 --- a/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java +++ b/GameServer/src/org/moparscape/msc/gs/io/WorldLoader.java @@ -24,144 +24,171 @@ import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; import org.moparscape.msc.gs.util.PersistenceManager; - public class WorldLoader { - private ZipFile tileArchive; + private ZipFile tileArchive; - // private ZipOutputStream out; + // private ZipOutputStream out; - private void loadSection(int sectionX, int sectionY, int height, World world, int bigX, int bigY) { - //Logging.debug(1); - Sector s = null; - try { - String filename = "h" + height + "x" + sectionX + "y" + sectionY; - ZipEntry e = tileArchive.getEntry(filename); - if (e == null) { - throw new Exception("Missing tile: " + filename); - } - ByteBuffer data = DataConversions.streamToBuffer(new BufferedInputStream(tileArchive.getInputStream(e))); - s = Sector.unpack(data); - // s = modifyAndSave(filename, s, bigX, bigY); - } catch (Exception e) { - Logger.error(e); + private void loadSection(int sectionX, int sectionY, int height, + World world, int bigX, int bigY) { + // Logging.debug(1); + Sector s = null; + try { + String filename = "h" + height + "x" + sectionX + "y" + sectionY; + ZipEntry e = tileArchive.getEntry(filename); + if (e == null) { + throw new Exception("Missing tile: " + filename); + } + ByteBuffer data = DataConversions + .streamToBuffer(new BufferedInputStream(tileArchive + .getInputStream(e))); + s = Sector.unpack(data); + // s = modifyAndSave(filename, s, bigX, bigY); + } catch (Exception e) { + Logger.error(e); + } + // Logging.debug(2); + for (int y = 0; y < Sector.HEIGHT; y++) { + for (int x = 0; x < Sector.WIDTH; x++) { + int bx = bigX + x; + int by = bigY + y; + if (!world.withinWorld(bx, by)) { + continue; + } + + world.getTileValue(bx, by).overlay = s.getTile(x, y).groundOverlay; + world.getTileValue(bx, by).diagWallVal = s.getTile(x, y).diagonalWalls; + world.getTileValue(bx, by).horizontalWallVal = s.getTile(x, y).horizontalWall; + world.getTileValue(bx, by).verticalWallVal = s.getTile(x, y).verticalWall; + world.getTileValue(bx, by).elevation = s.getTile(x, y).groundElevation; + /** start of shit **/ + if ((s.getTile(x, y).groundOverlay & 0xff) == 250) { + s.getTile(x, y).groundOverlay = (byte) 2; + } + /** break in shit **/ + int groundOverlay = s.getTile(x, y).groundOverlay & 0xFF; + if (groundOverlay > 0 + && EntityHandler.getTileDef(groundOverlay - 1) + .getObjectType() != 0) { + world.getTileValue(bx, by).mapValue |= 0x40; // 64 + } + + int verticalWall = s.getTile(x, y).verticalWall & 0xFF; + if (verticalWall > 0 + && EntityHandler.getDoorDef(verticalWall - 1) + .getUnknown() == 0 + && EntityHandler.getDoorDef(verticalWall - 1) + .getDoorType() != 0) { + world.getTileValue(bx, by).mapValue |= 1; // 1 + world.getTileValue(bx, by - 1).mapValue |= 4; // 4 + } + + int horizontalWall = s.getTile(x, y).horizontalWall & 0xFF; + if (horizontalWall > 0 + && EntityHandler.getDoorDef(horizontalWall - 1) + .getUnknown() == 0 + && EntityHandler.getDoorDef(horizontalWall - 1) + .getDoorType() != 0) { + world.getTileValue(bx, by).mapValue |= 2; // 2 + world.getTileValue(bx - 1, by).mapValue |= 8; // 8 + } + + int diagonalWalls = s.getTile(x, y).diagonalWalls; + if (diagonalWalls > 0 + && diagonalWalls < 12000 + && EntityHandler.getDoorDef(diagonalWalls - 1) + .getUnknown() == 0 + && EntityHandler.getDoorDef(diagonalWalls - 1) + .getDoorType() != 0) { + world.getTileValue(bx, by).mapValue |= 0x20; // 32 + } + if (diagonalWalls > 12000 + && diagonalWalls < 24000 + && EntityHandler.getDoorDef(diagonalWalls - 12001) + .getUnknown() == 0 + && EntityHandler.getDoorDef(diagonalWalls - 12001) + .getDoorType() != 0) { + world.getTileValue(bx, by).mapValue |= 0x10; // 16 + } + /** end of shit **/ + } + } + // Logging.debug(3); } - //Logging.debug(2); - for (int y = 0; y < Sector.HEIGHT; y++) { - for (int x = 0; x < Sector.WIDTH; x++) { - int bx = bigX + x; - int by = bigY + y; - if (!world.withinWorld(bx, by)) { - continue; - } - - world.getTileValue(bx, by).overlay = s.getTile(x, y).groundOverlay; - world.getTileValue(bx, by).diagWallVal = s.getTile(x, y).diagonalWalls; - world.getTileValue(bx, by).horizontalWallVal = s.getTile(x, y).horizontalWall; - world.getTileValue(bx, by).verticalWallVal = s.getTile(x, y).verticalWall; - world.getTileValue(bx, by).elevation = s.getTile(x, y).groundElevation; - /** start of shit **/ - if ((s.getTile(x, y).groundOverlay & 0xff) == 250) { - s.getTile(x, y).groundOverlay = (byte) 2; - } - /** break in shit **/ - int groundOverlay = s.getTile(x, y).groundOverlay & 0xFF; - if (groundOverlay > 0 && EntityHandler.getTileDef(groundOverlay - 1).getObjectType() != 0) { - world.getTileValue(bx, by).mapValue |= 0x40; // 64 - } - int verticalWall = s.getTile(x, y).verticalWall & 0xFF; - if (verticalWall > 0 && EntityHandler.getDoorDef(verticalWall - 1).getUnknown() == 0 && EntityHandler.getDoorDef(verticalWall - 1).getDoorType() != 0) { - world.getTileValue(bx, by).mapValue |= 1; // 1 - world.getTileValue(bx, by - 1).mapValue |= 4; // 4 - } + /* + * private Sector modifyAndSave(String filename, Sector s, int bigX, int + * bigY) { for(int y = 0;y < Sector.HEIGHT;y++) { for(int x = 0;x < + * Sector.WIDTH;x++) { int bx = bigX + x; int by = bigY + y; + * if(!Instance.getWorld().withinWorld(bx, by)) { continue; } } } try { + * out.putNextEntry(new ZipEntry(filename)); + * + * byte[] data = s.pack().array(); out.write(data); + * + * out.closeEntry(); } catch(Exception e) { e.printStackTrace(); } return s; + * } + */ - int horizontalWall = s.getTile(x, y).horizontalWall & 0xFF; - if (horizontalWall > 0 && EntityHandler.getDoorDef(horizontalWall - 1).getUnknown() == 0 && EntityHandler.getDoorDef(horizontalWall - 1).getDoorType() != 0) { - world.getTileValue(bx, by).mapValue |= 2; // 2 - world.getTileValue(bx - 1, by).mapValue |= 8; // 8 - } - - int diagonalWalls = s.getTile(x, y).diagonalWalls; - if (diagonalWalls > 0 && diagonalWalls < 12000 && EntityHandler.getDoorDef(diagonalWalls - 1).getUnknown() == 0 && EntityHandler.getDoorDef(diagonalWalls - 1).getDoorType() != 0) { - world.getTileValue(bx, by).mapValue |= 0x20; // 32 - } - if (diagonalWalls > 12000 && diagonalWalls < 24000 && EntityHandler.getDoorDef(diagonalWalls - 12001).getUnknown() == 0 && EntityHandler.getDoorDef(diagonalWalls - 12001).getDoorType() != 0) { - world.getTileValue(bx, by).mapValue |= 0x10; // 16 - } - /** end of shit **/ - } - } - //Logging.debug(3); - } - - /* - * private Sector modifyAndSave(String filename, Sector s, int bigX, int - * bigY) { for(int y = 0;y < Sector.HEIGHT;y++) { for(int x = 0;x < - * Sector.WIDTH;x++) { int bx = bigX + x; int by = bigY + y; - * if(!Instance.getWorld().withinWorld(bx, by)) { continue; } } } try { - * out.putNextEntry(new ZipEntry(filename)); - * - * byte[] data = s.pack().array(); out.write(data); - * - * out.closeEntry(); } catch(Exception e) { e.printStackTrace(); } return s; - * } - */ - - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public void loadWorld(World world) { - try { - tileArchive = new ZipFile(new File(Config.CONF_DIR, "data/Landscape.rscd")); - // out = new ZipOutputStream(new FileOutputStream(new - // File(Config.CONF_DIR, "data/new_Landscape.rscd"))); - // out.setLevel(9); - } catch (Exception e) { - Logger.error(e); - } - long now = System.currentTimeMillis(); - for (int lvl = 0; lvl < 4; lvl++) { - int wildX = 2304; - int wildY = 1776 - (lvl * 944); - for (int sx = 0; sx < 1000; sx += 48) { - for (int sy = 0; sy < 1000; sy += 48) { - int x = (sx + wildX) / 48; - int y = (sy + (lvl * 944) + wildY) / 48; - loadSection(x, y, lvl, world, sx, sy + (944 * lvl)); + try { + tileArchive = new ZipFile(new File(Config.CONF_DIR, + "data/Landscape.rscd")); + // out = new ZipOutputStream(new FileOutputStream(new + // File(Config.CONF_DIR, "data/new_Landscape.rscd"))); + // out.setLevel(9); + } catch (Exception e) { + Logger.error(e); } - } + long now = System.currentTimeMillis(); + for (int lvl = 0; lvl < 4; lvl++) { + int wildX = 2304; + int wildY = 1776 - (lvl * 944); + for (int sx = 0; sx < 1000; sx += 48) { + for (int sy = 0; sy < 1000; sy += 48) { + int x = (sx + wildX) / 48; + int y = (sy + (lvl * 944) + wildY) / 48; + loadSection(x, y, lvl, world, sx, sy + (944 * lvl)); + } + } + } + Logger.error((System.currentTimeMillis() - now) / 1000 + "s to parse"); + // try { out.close(); } catch(Exception e) { Logger.error(e); } + for (Shop shop : (List) PersistenceManager + .load("locs/Shops.xml.gz")) { + world.registerShop(shop); + } + System.gc(); } - Logger.error((System.currentTimeMillis() - now)/1000 + "s to parse"); - // try { out.close(); } catch(Exception e) { Logger.error(e); } - for (Shop shop : (List) PersistenceManager.load("locs/Shops.xml.gz")) { - world.registerShop(shop); + + @SuppressWarnings("unchecked") + public void loadObjects() { + World world = Instance.getWorld(); + for (GameObjectLoc gameObject : (List) PersistenceManager + .load("locs/GameObjectLoc.xml.gz")) { + if (Config.f2pWildy && Formulae.isP2P(true, gameObject)) + continue; + if (Formulae.isP2P(gameObject) && !World.isMembers()) + continue; + world.registerGameObject(new GameObject(gameObject)); + } + for (ItemLoc item : (List) PersistenceManager + .load("locs/ItemLoc.xml.gz")) { + if (Config.f2pWildy && Formulae.isP2P(true, item)) + continue; + if (Formulae.isP2P(item) && !World.isMembers()) + continue; + world.registerItem(new Item(item)); + }// ember + + for (NPCLoc npc : (List) PersistenceManager + .load("locs/NpcLoc.xml.gz")) { + if (Config.f2pWildy && Formulae.isP2P(true, npc)) + continue; + if (Formulae.isP2P(npc) && !World.isMembers()) + continue; + world.registerNpc(new Npc(npc)); + } } - System.gc(); - } - - @SuppressWarnings("unchecked") - public void loadObjects() { - World world = Instance.getWorld(); - for (GameObjectLoc gameObject : (List) PersistenceManager.load("locs/GameObjectLoc.xml.gz")) { - if(Config.f2pWildy && Formulae.isP2P(true, gameObject)) - continue; - if (Formulae.isP2P(gameObject) && !World.isMembers()) - continue; - world.registerGameObject(new GameObject(gameObject)); - } - for (ItemLoc item : (List) PersistenceManager.load("locs/ItemLoc.xml.gz")) { - if(Config.f2pWildy && Formulae.isP2P(true, item)) - continue; - if (Formulae.isP2P(item) && !World.isMembers()) - continue; - world.registerItem(new Item(item)); - }// ember - - for (NPCLoc npc : (List) PersistenceManager.load("locs/NpcLoc.xml.gz")) { - if(Config.f2pWildy && Formulae.isP2P(true, npc)) - continue; - if (Formulae.isP2P(npc) && !World.isMembers()) - continue; - world.registerNpc(new Npc(npc)); - } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/ActiveTile.java b/GameServer/src/org/moparscape/msc/gs/model/ActiveTile.java index 098dfc7..8a1a88c 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/ActiveTile.java +++ b/GameServer/src/org/moparscape/msc/gs/model/ActiveTile.java @@ -7,7 +7,6 @@ import org.moparscape.msc.config.Formulae; import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.tools.DataConversions; - public class ActiveTile { /** @@ -42,7 +41,9 @@ public class ActiveTile { this.x = x; this.y = y; } + public boolean remove = false; + /** * Add an entity to the tile */ @@ -108,38 +109,46 @@ public class ActiveTile { } public boolean specificArea() { - boolean t = DataConversions.inPointArray(Formulae.noremoveTiles, new Point(this.getX(), this.getY())); + boolean t = DataConversions.inPointArray(Formulae.noremoveTiles, + new Point(this.getX(), this.getY())); return t; } + /** * Remove an entity from the tile */ public void remove(Entity entity) { if (entity instanceof Player) { players.remove(entity); - if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() && !this.hasPlayers() && !this.specificArea()) { + if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() + && !this.hasPlayers() && !this.specificArea()) { Instance.getWorld().tiles[this.getX()][this.getY()] = null; } } else if (entity instanceof Npc) { npcs.remove(entity); - if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() && !this.hasPlayers() && !this.specificArea()) { + if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() + && !this.hasPlayers() && !this.specificArea()) { Instance.getWorld().tiles[this.getX()][this.getY()] = null; } } else if (entity instanceof Item) { items.remove(entity); - if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() && !this.hasPlayers() && !this.specificArea()) { + if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() + && !this.hasPlayers() && !this.specificArea()) { Instance.getWorld().tiles[this.getX()][this.getY()] = null; } } else if (entity instanceof GameObject) { object = null; - - if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() && !this.hasPlayers() && !remove) { + + if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() + && !this.hasPlayers() && !remove) { Instance.getWorld().tiles[this.getX()][this.getY()] = null; } } } + public void cleanItself() { - if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() && !this.hasPlayers() && !this.specificArea()) { + if (!this.hasGameObject() && !this.hasItems() && !this.hasNpcs() + && !this.hasPlayers() && !this.specificArea()) { Instance.getWorld().tiles[this.getX()][this.getY()] = null; } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Bank.java b/GameServer/src/org/moparscape/msc/gs/model/Bank.java index bafe245..1690cdf 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Bank.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Bank.java @@ -6,141 +6,142 @@ import java.util.List; import java.util.ListIterator; public class Bank { - /** - * The maximum size of a bank - */ - public static final int MAX_SIZE = 192; - private ArrayList list = new ArrayList(); + /** + * The maximum size of a bank + */ + public static final int MAX_SIZE = 192; + private ArrayList list = new ArrayList(); - public Bank() { - } - - public int add(InvItem item) { - if (item.getAmount() <= 0) { - return -1; - } - for (int index = 0; index < list.size(); index++) { - if (item.equals(list.get(index))) { - list.get(index).setAmount(list.get(index).getAmount() + item.getAmount()); - return index; - } - } - list.add(item); - return list.size() - 2; - } - - public boolean canHold(ArrayList items) { - return (MAX_SIZE - list.size()) >= getRequiredSlots(items); - } - - public boolean canHold(InvItem item) { - return (MAX_SIZE - list.size()) >= getRequiredSlots(item); - } - - public boolean contains(InvItem i) { - return list.contains(i); - } - - public int countId(int id) { - for (InvItem i : list) { - if (i.getID() == id) { - return i.getAmount(); - } - } - return 0; - } - - public boolean full() { - return list.size() >= MAX_SIZE; - } - - public InvItem get(int index) { - if (index < 0 || index >= list.size()) { - return null; - } - return list.get(index); - } - - public InvItem get(InvItem item) { - for (InvItem i : list) { - if (item.equals(i)) { - return i; - } - } - return null; - } - - public int getFirstIndexById(int id) { - for (int index = 0; index < list.size(); index++) { - if (list.get(index).getID() == id) { - return index; - } - } - return -1; - } - - public ArrayList getItems() { - return list; - } - - public int getRequiredSlots(InvItem item) { - return (list.contains(item) ? 0 : 1); - } - - public int getRequiredSlots(List items) { - int requiredSlots = 0; - for (InvItem item : items) { - if (list.contains(item)) { - continue; - } - requiredSlots++; - } - return requiredSlots; - } - - public boolean hasItemId(int id) { - for (InvItem i : list) { - if (i.getID() == id) - return true; + public Bank() { } - return false; - } - - public ListIterator iterator() { - return list.listIterator(); - } - - public void remove(int index) { - InvItem item = get(index); - if (item == null) { - return; - } - remove(item.getID(), item.getAmount()); - } - - public int remove(int id, int amount) { - Iterator iterator = list.iterator(); - for (int index = 0; iterator.hasNext(); index++) { - InvItem i = iterator.next(); - if (id == i.getID()) { - if (amount < i.getAmount()) { - i.setAmount(i.getAmount() - amount); - } else { - iterator.remove(); + public int add(InvItem item) { + if (item.getAmount() <= 0) { + return -1; } - return index; - } + for (int index = 0; index < list.size(); index++) { + if (item.equals(list.get(index))) { + list.get(index).setAmount( + list.get(index).getAmount() + item.getAmount()); + return index; + } + } + list.add(item); + return list.size() - 2; } - return -1; - } - public int remove(InvItem item) { - return remove(item.getID(), item.getAmount()); - } + public boolean canHold(ArrayList items) { + return (MAX_SIZE - list.size()) >= getRequiredSlots(items); + } - public int size() { - return list.size(); - } + public boolean canHold(InvItem item) { + return (MAX_SIZE - list.size()) >= getRequiredSlots(item); + } + + public boolean contains(InvItem i) { + return list.contains(i); + } + + public int countId(int id) { + for (InvItem i : list) { + if (i.getID() == id) { + return i.getAmount(); + } + } + return 0; + } + + public boolean full() { + return list.size() >= MAX_SIZE; + } + + public InvItem get(int index) { + if (index < 0 || index >= list.size()) { + return null; + } + return list.get(index); + } + + public InvItem get(InvItem item) { + for (InvItem i : list) { + if (item.equals(i)) { + return i; + } + } + return null; + } + + public int getFirstIndexById(int id) { + for (int index = 0; index < list.size(); index++) { + if (list.get(index).getID() == id) { + return index; + } + } + return -1; + } + + public ArrayList getItems() { + return list; + } + + public int getRequiredSlots(InvItem item) { + return (list.contains(item) ? 0 : 1); + } + + public int getRequiredSlots(List items) { + int requiredSlots = 0; + for (InvItem item : items) { + if (list.contains(item)) { + continue; + } + requiredSlots++; + } + return requiredSlots; + } + + public boolean hasItemId(int id) { + for (InvItem i : list) { + if (i.getID() == id) + return true; + } + + return false; + } + + public ListIterator iterator() { + return list.listIterator(); + } + + public void remove(int index) { + InvItem item = get(index); + if (item == null) { + return; + } + remove(item.getID(), item.getAmount()); + } + + public int remove(int id, int amount) { + Iterator iterator = list.iterator(); + for (int index = 0; iterator.hasNext(); index++) { + InvItem i = iterator.next(); + if (id == i.getID()) { + if (amount < i.getAmount()) { + i.setAmount(i.getAmount() - amount); + } else { + iterator.remove(); + } + return index; + } + } + return -1; + } + + public int remove(InvItem item) { + return remove(item.getID(), item.getAmount()); + } + + public int size() { + return list.size(); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Bubble.java b/GameServer/src/org/moparscape/msc/gs/model/Bubble.java index e971bd4..4603792 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Bubble.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Bubble.java @@ -1,26 +1,26 @@ package org.moparscape.msc.gs.model; public class Bubble { - /** - * What to draw in it - */ - private int itemID; - /** - * Who the bubble belongs to - */ - private Player owner; + /** + * What to draw in it + */ + private int itemID; + /** + * Who the bubble belongs to + */ + private Player owner; - public Bubble(Player owner, int itemID) { - this.owner = owner; - this.itemID = itemID; - } + public Bubble(Player owner, int itemID) { + this.owner = owner; + this.itemID = itemID; + } - public int getID() { - return itemID; - } + public int getID() { + return itemID; + } - public Player getOwner() { - return owner; - } + public Player getOwner() { + return owner; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/ChatMessage.java b/GameServer/src/org/moparscape/msc/gs/model/ChatMessage.java index 7fc8759..8ebc7e5 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/ChatMessage.java +++ b/GameServer/src/org/moparscape/msc/gs/model/ChatMessage.java @@ -3,44 +3,44 @@ package org.moparscape.msc.gs.model; import org.moparscape.msc.gs.tools.DataConversions; public class ChatMessage { - /** - * The message it self, in byte format - */ - private byte[] message; - /** - * Who the message is for - */ - private Mob recipient = null; - /** - * Who sent the message - */ - private Mob sender; + /** + * The message it self, in byte format + */ + private byte[] message; + /** + * Who the message is for + */ + private Mob recipient = null; + /** + * Who sent the message + */ + private Mob sender; - public ChatMessage(Mob sender, byte[] message) { - this.sender = sender; - this.message = message; - } + public ChatMessage(Mob sender, byte[] message) { + this.sender = sender; + this.message = message; + } - public ChatMessage(Mob sender, String message, Mob recipient) { - this.sender = sender; - this.message = DataConversions.stringToByteArray(message); - this.recipient = recipient; - } + public ChatMessage(Mob sender, String message, Mob recipient) { + this.sender = sender; + this.message = DataConversions.stringToByteArray(message); + this.recipient = recipient; + } - public int getLength() { - return message.length; - } + public int getLength() { + return message.length; + } - public byte[] getMessage() { - return message; - } + public byte[] getMessage() { + return message; + } - public Mob getRecipient() { - return recipient; - } + public Mob getRecipient() { + return recipient; + } - public Mob getSender() { - return sender; - } + public Mob getSender() { + return sender; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Entity.java b/GameServer/src/org/moparscape/msc/gs/model/Entity.java index 5b80256..3643547 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Entity.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Entity.java @@ -1,211 +1,225 @@ package org.moparscape.msc.gs.model; import org.moparscape.msc.config.Config; -import org.moparscape.msc.config.Constants; import org.moparscape.msc.config.Formulae; import org.moparscape.msc.gs.Instance; public class Entity { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - protected int id; + protected int id; - protected int index; + protected int index; - protected Point location; + protected Point location; - public final int getID() { - return id; - } - - public final int getIndex() { - return index; - } - - public final Point getLocation() { - return location; - } - - public final int getX() { - return location.getX(); - } - - public final int getY() { - return location.getY(); - } - - private boolean isBlocking(Entity e, int x, int y, int bit) { - return isMapBlocking(e, x, y, (byte) bit) || isObjectBlocking(e, x, y, (byte) bit); - } - - private boolean isMapBlocking(Entity e, int x, int y, byte bit) { - byte val = world.getTileValue(x, y).mapValue; - if ((val & bit) != 0) { // There is a wall in the way - return true; - } - if ((val & 16) != 0) { // There is a diagonal wall here: \ - return true; - } - if ((val & 32) != 0) { // There is a diagonal wall here: / - return true; - } - if ((val & 64) != 0 && (e instanceof Npc || e instanceof Player || (e instanceof Item && !((Item) e).isOn(x, y)) || (e instanceof GameObject && !((GameObject) e).isOn(x, y)))) { // There - // is - // an - // object - // here, - // doesn't - // block items (ontop of it) or the - // object itself though - return true; - } - return false; - } - - private boolean isObjectBlocking(Entity e, int x, int y, byte bit) { - byte val = world.getTileValue(x, y).objectValue; - if ((val & bit) != 0 && !Formulae.doorAtFacing(e, x, y, Formulae.bitToDoorDir(bit)) && !Formulae.objectAtFacing(e, x, y, Formulae.bitToObjectDir(bit))) { // There - // is - // a - // wall - // in - // the - // way - return true; - } - if ((val & 16) != 0 && !Formulae.doorAtFacing(e, x, y, 2) && !Formulae.objectAtFacing(e, x, y, 3)) { // There - // is - // a - // diagonal wall - // here: \ - return true; - } - if ((val & 32) != 0 && !Formulae.doorAtFacing(e, x, y, 3) && !Formulae.objectAtFacing(e, x, y, 1)) { // There - // is - // a - // diagonal wall - // here: / - return true; - } - if ((val & 64) != 0 && (e instanceof Npc || e instanceof Player || (e instanceof Item && !((Item) e).isOn(x, y)) || (e instanceof GameObject && !((GameObject) e).isOn(x, y)))) { // There - // is - // an - // object - // here, - // doesn't - // block items (ontop of it) or the - // object itself though - return true; - } - return false; - } - - public int[] nextStep(int myX, int myY, Entity e) { - if (myX == e.getX() && myY == e.getY()) { - return new int[] { myX, myY }; - } - int newX = myX, newY = myY; - boolean myXBlocked = false, myYBlocked = false, newXBlocked = false, newYBlocked = false; - - if (myX > e.getX()) { - myXBlocked = isBlocking(e, myX - 1, myY, 8); // Check right tiles - // left wall - newX = myX - 1; - } else if (myX < e.getX()) { - myXBlocked = isBlocking(e, myX + 1, myY, 2); // Check left tiles - // right wall - newX = myX + 1; + public final int getID() { + return id; } - if (myY > e.getY()) { - myYBlocked = isBlocking(e, myX, myY - 1, 4); // Check top tiles - // bottom wall - newY = myY - 1; - } else if (myY < e.getY()) { - myYBlocked = isBlocking(e, myX, myY + 1, 1); // Check bottom tiles - // top wall - newY = myY + 1; + public final int getIndex() { + return index; } - // If both directions are blocked OR we are going straight and the - // direction is blocked - if ((myXBlocked && myYBlocked) || (myXBlocked && myY == newY) || (myYBlocked && myX == newX)) { - return null; + public final Point getLocation() { + return location; } - if (newX > myX) { - newXBlocked = isBlocking(e, newX, newY, 2); // Check dest tiles - // right wall - } else if (newX < myX) { - newXBlocked = isBlocking(e, newX, newY, 8); // Check dest tiles left - // wall + public final int getX() { + return location.getX(); } - if (newY > myY) { - newYBlocked = isBlocking(e, newX, newY, 1); // Check dest tiles top - // wall - } else if (newY < myY) { - newYBlocked = isBlocking(e, newX, newY, 4); // Check dest tiles - // bottom wall + public final int getY() { + return location.getY(); } - // If both directions are blocked OR we are going straight and the - // direction is blocked - if ((newXBlocked && newYBlocked) || (newXBlocked && myY == newY) || (myYBlocked && myX == newX)) { - return null; + private boolean isBlocking(Entity e, int x, int y, int bit) { + return isMapBlocking(e, x, y, (byte) bit) + || isObjectBlocking(e, x, y, (byte) bit); } - // If only one direction is blocked, but it blocks both tiles - if ((myXBlocked && newXBlocked) || (myYBlocked && newYBlocked)) { - return null; - } - - return new int[] { newX, newY }; - } - - public final boolean nextTo(Entity e) { - int[] currentCoords = { getX(), getY() }; - while (currentCoords[0] != e.getX() || currentCoords[1] != e.getY()) { - currentCoords = nextStep(currentCoords[0], currentCoords[1], e); - if (currentCoords == null) { - return false; - } - } - return true; - } - - public final void setID(int newid) { - id = newid; - } - - public final void setIndex(int newIndex) { - index = newIndex; - } - - public void setLocation(Point p) { - if(this instanceof Player && location != null && Config.f2pWildy) { - Player pl = (Player)this; - if(pl != null && getX() > 0 && getY() > 0) { - if(!Point.inWilderness(getX(), getY()) && Point.inWilderness(p.getX(), p.getY())) { - pl.p2pWildy(); + private boolean isMapBlocking(Entity e, int x, int y, byte bit) { + byte val = world.getTileValue(x, y).mapValue; + if ((val & bit) != 0) { // There is a wall in the way + return true; } - } + if ((val & 16) != 0) { // There is a diagonal wall here: \ + return true; + } + if ((val & 32) != 0) { // There is a diagonal wall here: / + return true; + } + if ((val & 64) != 0 + && (e instanceof Npc || e instanceof Player + || (e instanceof Item && !((Item) e).isOn(x, y)) || (e instanceof GameObject && !((GameObject) e) + .isOn(x, y)))) { // There + // is + // an + // object + // here, + // doesn't + // block items (ontop of it) or the + // object itself though + return true; + } + return false; } - world.setLocation(this, location, p); - location = p; - } - public final boolean withinRange(Entity e, int radius) { - return withinRange(e.getLocation(), radius); - } + private boolean isObjectBlocking(Entity e, int x, int y, byte bit) { + byte val = world.getTileValue(x, y).objectValue; + if ((val & bit) != 0 + && !Formulae.doorAtFacing(e, x, y, Formulae.bitToDoorDir(bit)) + && !Formulae.objectAtFacing(e, x, y, + Formulae.bitToObjectDir(bit))) { // There + // is + // a + // wall + // in + // the + // way + return true; + } + if ((val & 16) != 0 && !Formulae.doorAtFacing(e, x, y, 2) + && !Formulae.objectAtFacing(e, x, y, 3)) { // There + // is + // a + // diagonal wall + // here: \ + return true; + } + if ((val & 32) != 0 && !Formulae.doorAtFacing(e, x, y, 3) + && !Formulae.objectAtFacing(e, x, y, 1)) { // There + // is + // a + // diagonal wall + // here: / + return true; + } + if ((val & 64) != 0 + && (e instanceof Npc || e instanceof Player + || (e instanceof Item && !((Item) e).isOn(x, y)) || (e instanceof GameObject && !((GameObject) e) + .isOn(x, y)))) { // There + // is + // an + // object + // here, + // doesn't + // block items (ontop of it) or the + // object itself though + return true; + } + return false; + } - public final boolean withinRange(Point p, int radius) { - int xDiff = Math.abs(location.getX() - p.getX()); - int yDiff = Math.abs(location.getY() - p.getY()); - return xDiff <= radius && yDiff <= radius; - } + public int[] nextStep(int myX, int myY, Entity e) { + if (myX == e.getX() && myY == e.getY()) { + return new int[] { myX, myY }; + } + int newX = myX, newY = myY; + boolean myXBlocked = false, myYBlocked = false, newXBlocked = false, newYBlocked = false; + + if (myX > e.getX()) { + myXBlocked = isBlocking(e, myX - 1, myY, 8); // Check right tiles + // left wall + newX = myX - 1; + } else if (myX < e.getX()) { + myXBlocked = isBlocking(e, myX + 1, myY, 2); // Check left tiles + // right wall + newX = myX + 1; + } + + if (myY > e.getY()) { + myYBlocked = isBlocking(e, myX, myY - 1, 4); // Check top tiles + // bottom wall + newY = myY - 1; + } else if (myY < e.getY()) { + myYBlocked = isBlocking(e, myX, myY + 1, 1); // Check bottom tiles + // top wall + newY = myY + 1; + } + + // If both directions are blocked OR we are going straight and the + // direction is blocked + if ((myXBlocked && myYBlocked) || (myXBlocked && myY == newY) + || (myYBlocked && myX == newX)) { + return null; + } + + if (newX > myX) { + newXBlocked = isBlocking(e, newX, newY, 2); // Check dest tiles + // right wall + } else if (newX < myX) { + newXBlocked = isBlocking(e, newX, newY, 8); // Check dest tiles left + // wall + } + + if (newY > myY) { + newYBlocked = isBlocking(e, newX, newY, 1); // Check dest tiles top + // wall + } else if (newY < myY) { + newYBlocked = isBlocking(e, newX, newY, 4); // Check dest tiles + // bottom wall + } + + // If both directions are blocked OR we are going straight and the + // direction is blocked + if ((newXBlocked && newYBlocked) || (newXBlocked && myY == newY) + || (myYBlocked && myX == newX)) { + return null; + } + + // If only one direction is blocked, but it blocks both tiles + if ((myXBlocked && newXBlocked) || (myYBlocked && newYBlocked)) { + return null; + } + + return new int[] { newX, newY }; + } + + public final boolean nextTo(Entity e) { + int[] currentCoords = { getX(), getY() }; + while (currentCoords[0] != e.getX() || currentCoords[1] != e.getY()) { + currentCoords = nextStep(currentCoords[0], currentCoords[1], e); + if (currentCoords == null) { + return false; + } + } + return true; + } + + public final void setID(int newid) { + id = newid; + } + + public final void setIndex(int newIndex) { + index = newIndex; + } + + public void setLocation(Point p) { + if (this instanceof Player && location != null && Config.f2pWildy) { + Player pl = (Player) this; + if (pl != null && getX() > 0 && getY() > 0) { + if (!Point.inWilderness(getX(), getY()) + && Point.inWilderness(p.getX(), p.getY())) { + pl.p2pWildy(); + } + } + } + world.setLocation(this, location, p); + location = p; + } + + public final boolean withinRange(Entity e, int radius) { + return withinRange(e.getLocation(), radius); + } + + public final boolean withinRange(Point p, int radius) { + int xDiff = Math.abs(location.getX() - p.getX()); + int yDiff = Math.abs(location.getY() - p.getY()); + return xDiff <= radius && yDiff <= radius; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/GameObject.java b/GameServer/src/org/moparscape/msc/gs/model/GameObject.java index 638f398..fb2bb95 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/GameObject.java +++ b/GameServer/src/org/moparscape/msc/gs/model/GameObject.java @@ -6,118 +6,125 @@ import org.moparscape.msc.gs.external.GameObjectDef; import org.moparscape.msc.gs.external.GameObjectLoc; public class GameObject extends Entity { - /** - * Returns the ID of an item contained in the object. - * - * @author Konijn - */ - private int containsItem = -1; - /** - * The direction the object points in - */ - private int direction; - /** - * Location definition of the object - */ - private GameObjectLoc loc = null; - /** - * Set when the item has been destroyed to alert players - */ - private boolean removed = false; + /** + * Returns the ID of an item contained in the object. + * + * @author Konijn + */ + private int containsItem = -1; + /** + * The direction the object points in + */ + private int direction; + /** + * Location definition of the object + */ + private GameObjectLoc loc = null; + /** + * Set when the item has been destroyed to alert players + */ + private boolean removed = false; - /** - * The type of object - */ - private int type; + /** + * The type of object + */ + private int type; - public GameObject(GameObjectLoc loc) { - direction = loc.direction; - type = loc.type; - this.loc = loc; - super.setID(loc.id); - super.setLocation(Point.location(loc.x, loc.y)); - } - - public GameObject(Point location, int id, int direction, int type) { - this(new GameObjectLoc(id, location.getX(), location.getY(), direction, type)); - } - - public int containsItem() { - return containsItem; - } - - public void containsItem(int item) { - containsItem = item; - } - - public boolean equals(Object o) { - if (o instanceof GameObject) { - GameObject go = (GameObject) o; - return go.getLocation().equals(getLocation()) && go.getID() == getID() && go.getDirection() == getDirection() && go.getType() == getType(); + public GameObject(GameObjectLoc loc) { + direction = loc.direction; + type = loc.type; + this.loc = loc; + super.setID(loc.id); + super.setLocation(Point.location(loc.x, loc.y)); } - return false; - } - public int getDirection() { - return direction; - } - - public DoorDef getDoorDef() { - return EntityHandler.getDoorDef(super.getID()); - } - - public GameObjectDef getGameObjectDef() { - return EntityHandler.getGameObjectDef(super.getID()); - } - - public GameObjectLoc getLoc() { - return loc; - } - - public int getType() { - return type; - } - - public boolean isOn(int x, int y) { - int width, height; - if (type == 1) { - width = height = 1; - } else if (direction == 0 || direction == 4) { - width = getGameObjectDef().getWidth(); - height = getGameObjectDef().getHeight(); - } else { - height = getGameObjectDef().getWidth(); - width = getGameObjectDef().getHeight(); + public GameObject(Point location, int id, int direction, int type) { + this(new GameObjectLoc(id, location.getX(), location.getY(), direction, + type)); } - if (type == 0) { // Object - return x >= getX() && x <= (getX() + width) && y >= getY() && y <= (getY() + height); - } else { // Door - return x == getX() && y == getY(); + + public int containsItem() { + return containsItem; } - } - public boolean isRemoved() { - return removed; - } + public void containsItem(int item) { + containsItem = item; + } - public boolean isTelePoint() { - return EntityHandler.getObjectTelePoint(getLocation(), null) != null; - } + public boolean equals(Object o) { + if (o instanceof GameObject) { + GameObject go = (GameObject) o; + return go.getLocation().equals(getLocation()) + && go.getID() == getID() + && go.getDirection() == getDirection() + && go.getType() == getType(); + } + return false; + } - public void remove() { - removed = true; - } + public int getDirection() { + return direction; + } - public void setDirection(int direction) { - this.direction = direction; - } + public DoorDef getDoorDef() { + return EntityHandler.getDoorDef(super.getID()); + } - public void setType(int type) { - this.type = type; - } + public GameObjectDef getGameObjectDef() { + return EntityHandler.getGameObjectDef(super.getID()); + } - public String toString() { - return (type == 0 ? "GameObject" : "WallObject") + ":id = " + id + "; dir = " + direction + "; location = " + location.toString() + ";"; - } + public GameObjectLoc getLoc() { + return loc; + } + + public int getType() { + return type; + } + + public boolean isOn(int x, int y) { + int width, height; + if (type == 1) { + width = height = 1; + } else if (direction == 0 || direction == 4) { + width = getGameObjectDef().getWidth(); + height = getGameObjectDef().getHeight(); + } else { + height = getGameObjectDef().getWidth(); + width = getGameObjectDef().getHeight(); + } + if (type == 0) { // Object + return x >= getX() && x <= (getX() + width) && y >= getY() + && y <= (getY() + height); + } else { // Door + return x == getX() && y == getY(); + } + } + + public boolean isRemoved() { + return removed; + } + + public boolean isTelePoint() { + return EntityHandler.getObjectTelePoint(getLocation(), null) != null; + } + + public void remove() { + removed = true; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public void setType(int type) { + this.type = type; + } + + public String toString() { + return (type == 0 ? "GameObject" : "WallObject") + ":id = " + id + + "; dir = " + direction + "; location = " + + location.toString() + ";"; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/InvItem.java b/GameServer/src/org/moparscape/msc/gs/model/InvItem.java index e69762b..142b7bb 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/InvItem.java +++ b/GameServer/src/org/moparscape/msc/gs/model/InvItem.java @@ -9,101 +9,101 @@ import org.moparscape.msc.gs.external.ItemWieldableDef; public class InvItem extends Entity implements Comparable { - private int amount; - private boolean wielded = false; + private int amount; + private boolean wielded = false; - public InvItem(int id) { - setID(id); - setAmount(1); - } - - public InvItem(int id, int amount) { - setID(id); - setAmount(amount); - } - - public int compareTo(InvItem item) { - if (item.getDef().isStackable()) { - return -1; + public InvItem(int id) { + setID(id); + setAmount(1); } - if (getDef().isStackable()) { - return 1; + + public InvItem(int id, int amount) { + setID(id); + setAmount(amount); } - return item.getDef().getBasePrice() - getDef().getBasePrice(); - } - public int eatingHeals() { - if (!isEdible()) { - return 0; + public int compareTo(InvItem item) { + if (item.getDef().isStackable()) { + return -1; + } + if (getDef().isStackable()) { + return 1; + } + return item.getDef().getBasePrice() - getDef().getBasePrice(); } - return EntityHandler.getItemEdibleHeals(id); - } - public boolean equals(Object o) { - if (o instanceof InvItem) { - InvItem item = (InvItem) o; - return item.getID() == getID(); + public int eatingHeals() { + if (!isEdible()) { + return 0; + } + return EntityHandler.getItemEdibleHeals(id); } - return false; - } - public int getAmount() { - return amount; - } - - public ItemCookingDef getCookingDef() { - return EntityHandler.getItemCookingDef(id); - } - - public ItemDef getDef() { - return EntityHandler.getItemDef(id); - } - - public ItemSmeltingDef getSmeltingDef() { - return EntityHandler.getItemSmeltingDef(id); - } - - public ItemUnIdentHerbDef getUnIdentHerbDef() { - return EntityHandler.getItemUnIdentHerbDef(id); - } - - public ItemWieldableDef getWieldableDef() { - return EntityHandler.getItemWieldableDef(id); - } - - public boolean isEdible() { - return EntityHandler.getItemEdibleHeals(id) > 0; - } - - public boolean isWieldable() { - return EntityHandler.getItemWieldableDef(id) != null; - } - - public boolean isWielded() { - return wielded; - } - - public void setAmount(int amount) { - if (amount < 0) { - amount = 0; + public boolean equals(Object o) { + if (o instanceof InvItem) { + InvItem item = (InvItem) o; + return item.getID() == getID(); + } + return false; } - this.amount = amount; - } - public void setWield(boolean wielded) { - this.wielded = wielded; - } + public int getAmount() { + return amount; + } - public boolean wieldingAffectsItem(InvItem i) { - if (!i.isWieldable() || !isWieldable()) { - return false; + public ItemCookingDef getCookingDef() { + return EntityHandler.getItemCookingDef(id); } - for (int affected : getWieldableDef().getAffectedTypes()) { - if (i.getWieldableDef().getType() == affected) { - return true; - } + + public ItemDef getDef() { + return EntityHandler.getItemDef(id); + } + + public ItemSmeltingDef getSmeltingDef() { + return EntityHandler.getItemSmeltingDef(id); + } + + public ItemUnIdentHerbDef getUnIdentHerbDef() { + return EntityHandler.getItemUnIdentHerbDef(id); + } + + public ItemWieldableDef getWieldableDef() { + return EntityHandler.getItemWieldableDef(id); + } + + public boolean isEdible() { + return EntityHandler.getItemEdibleHeals(id) > 0; + } + + public boolean isWieldable() { + return EntityHandler.getItemWieldableDef(id) != null; + } + + public boolean isWielded() { + return wielded; + } + + public void setAmount(int amount) { + if (amount < 0) { + amount = 0; + } + this.amount = amount; + } + + public void setWield(boolean wielded) { + this.wielded = wielded; + } + + public boolean wieldingAffectsItem(InvItem i) { + if (!i.isWieldable() || !isWieldable()) { + return false; + } + for (int affected : getWieldableDef().getAffectedTypes()) { + if (i.getWieldableDef().getType() == affected) { + return true; + } + } + return false; } - return false; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Inventory.java b/GameServer/src/org/moparscape/msc/gs/model/Inventory.java index 758f18c..ad8c2e2 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Inventory.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Inventory.java @@ -7,191 +7,197 @@ import java.util.ListIterator; import org.moparscape.msc.gs.Instance; - public class Inventory { - /** - * The maximum size of an inventory - */ - public static final int MAX_SIZE = 30; - /** - * World instance - */ - private static World world = Instance.getWorld(); - private ArrayList list = new ArrayList(); - private Player player; + /** + * The maximum size of an inventory + */ + public static final int MAX_SIZE = 30; + /** + * World instance + */ + private static World world = Instance.getWorld(); + private ArrayList list = new ArrayList(); + private Player player; - public Inventory() { - } - - public Inventory(Player player) { - this.player = player; - } - - public int add(InvItem item) { - if (item.getAmount() <= 0) { - return -1; + public Inventory() { } - if (item.getDef().isStackable()) { - for (int index = 0; index < list.size(); index++) { - if (item.equals(list.get(index))) { - list.get(index).setAmount(list.get(index).getAmount() + item.getAmount()); - return index; + + public Inventory(Player player) { + this.player = player; + } + + public int add(InvItem item) { + if (item.getAmount() <= 0) { + return -1; } - } - } else if (item.getAmount() > 1) { - item.setAmount(1); + if (item.getDef().isStackable()) { + for (int index = 0; index < list.size(); index++) { + if (item.equals(list.get(index))) { + list.get(index).setAmount( + list.get(index).getAmount() + item.getAmount()); + return index; + } + } + } else if (item.getAmount() > 1) { + item.setAmount(1); + } + if (this.full()) { + player.getActionSender().sendMessage( + "Your Inventory is full, the " + item.getDef().getName() + + " drops to the ground!"); + world.registerItem(new Item(item.getID(), player.getX(), player + .getY(), item.getAmount(), player)); + return -1; + } + list.add(item); + return list.size() - 2; } - if (this.full()) { - player.getActionSender().sendMessage("Your Inventory is full, the " + item.getDef().getName() + " drops to the ground!"); - world.registerItem(new Item(item.getID(), player.getX(), player.getY(), item.getAmount(), player)); - return -1; + + public boolean canHold(InvItem item) { + return (MAX_SIZE - list.size()) >= getRequiredSlots(item); } - list.add(item); - return list.size() - 2; - } - public boolean canHold(InvItem item) { - return (MAX_SIZE - list.size()) >= getRequiredSlots(item); - } - - public boolean contains(InvItem i) { - return list.contains(i); - } - - public int countId(int id) { - int temp = 0; - for (InvItem i : list) { - if (i.getID() == id) { - temp += i.getAmount(); - } + public boolean contains(InvItem i) { + return list.contains(i); } - return temp; - } - public boolean full() { - return list.size() >= MAX_SIZE; - } - - public InvItem get(int index) { - if (index < 0 || index >= list.size()) { - return null; + public int countId(int id) { + int temp = 0; + for (InvItem i : list) { + if (i.getID() == id) { + temp += i.getAmount(); + } + } + return temp; } - return list.get(index); - } - public InvItem get(InvItem item) { - for (int index = list.size() - 1; index >= 0; index--) { - if (list.get(index).equals(item)) { + public boolean full() { + return list.size() >= MAX_SIZE; + } + + public InvItem get(int index) { + if (index < 0 || index >= list.size()) { + return null; + } return list.get(index); - } - } - return null; - } - - public int getFreedSlots(InvItem item) { - return (item.getDef().isStackable() && countId(item.getID()) > item.getAmount() ? 0 : 1); - } - - public int getFreedSlots(List items) { - int freedSlots = 0; - for (InvItem item : items) { - freedSlots += getFreedSlots(item); - ; - } - return freedSlots; - } - - public ArrayList getItems() { - return list; - } - - public int getLastIndexById(int id) { - for (int index = list.size() - 1; index >= 0; index--) { - if (list.get(index).getID() == id) { - return index; - } - } - return -1; - } - - public int getRequiredSlots(InvItem item) { - return (item.getDef().isStackable() && list.contains(item) ? 0 : 1); - } - - public int getRequiredSlots(List items) { - int requiredSlots = 0; - for (InvItem item : items) { - requiredSlots += getRequiredSlots(item); - } - return requiredSlots; - } - - public boolean hasItemId(int id) { - for (InvItem i : list) { - if (i.getID() == id) - return true; - ; } - return false; - } - - public ListIterator iterator() { - return list.listIterator(); - } - - public void remove(int index) { - InvItem item = get(index); - if (item == null) { - return; - } - remove(item.getID(), item.getAmount()); - } - - public int remove(int id, int amount) { - int size = list.size(); - ListIterator iterator = list.listIterator(size); - for (int index = size - 1; iterator.hasPrevious(); index--) { - InvItem i = iterator.previous(); - if (id == i.getID()) { - if (i.getDef().isStackable() && amount < i.getAmount()) { - i.setAmount(i.getAmount() - amount); - } else if(i.getDef().isStackable() && amount > i.getAmount()) { - return -1; - } else { - if (i.isWielded()) { - player.getActionSender().sendSound("click"); - i.setWield(false); - player.updateWornItems(i.getWieldableDef().getWieldPos(), player.getPlayerAppearance().getSprite(i.getWieldableDef().getWieldPos())); - player.getActionSender().sendEquipmentStats(); - } - iterator.remove(); + public InvItem get(InvItem item) { + for (int index = list.size() - 1; index >= 0; index--) { + if (list.get(index).equals(item)) { + return list.get(index); + } } - return index; - } + return null; } - return -1; - } - public int remove(InvItem item) { - return remove(item.getID(), item.getAmount()); - } - - public int size() { - return list.size(); - } - - public void sort() { - Collections.sort(list); - } - - public boolean wielding(int id) { - for (InvItem i : list) { - if (i.getID() == id && i.isWielded()) { - return true; - } + public int getFreedSlots(InvItem item) { + return (item.getDef().isStackable() + && countId(item.getID()) > item.getAmount() ? 0 : 1); + } + + public int getFreedSlots(List items) { + int freedSlots = 0; + for (InvItem item : items) { + freedSlots += getFreedSlots(item); + ; + } + return freedSlots; + } + + public ArrayList getItems() { + return list; + } + + public int getLastIndexById(int id) { + for (int index = list.size() - 1; index >= 0; index--) { + if (list.get(index).getID() == id) { + return index; + } + } + return -1; + } + + public int getRequiredSlots(InvItem item) { + return (item.getDef().isStackable() && list.contains(item) ? 0 : 1); + } + + public int getRequiredSlots(List items) { + int requiredSlots = 0; + for (InvItem item : items) { + requiredSlots += getRequiredSlots(item); + } + return requiredSlots; + } + + public boolean hasItemId(int id) { + for (InvItem i : list) { + if (i.getID() == id) + return true; + ; + } + + return false; + } + + public ListIterator iterator() { + return list.listIterator(); + } + + public void remove(int index) { + InvItem item = get(index); + if (item == null) { + return; + } + remove(item.getID(), item.getAmount()); + } + + public int remove(int id, int amount) { + int size = list.size(); + ListIterator iterator = list.listIterator(size); + for (int index = size - 1; iterator.hasPrevious(); index--) { + InvItem i = iterator.previous(); + if (id == i.getID()) { + if (i.getDef().isStackable() && amount < i.getAmount()) { + i.setAmount(i.getAmount() - amount); + } else if (i.getDef().isStackable() && amount > i.getAmount()) { + return -1; + } else { + if (i.isWielded()) { + player.getActionSender().sendSound("click"); + i.setWield(false); + player.updateWornItems(i.getWieldableDef() + .getWieldPos(), player.getPlayerAppearance() + .getSprite(i.getWieldableDef().getWieldPos())); + player.getActionSender().sendEquipmentStats(); + } + iterator.remove(); + } + return index; + } + } + return -1; + } + + public int remove(InvItem item) { + return remove(item.getID(), item.getAmount()); + } + + public int size() { + return list.size(); + } + + public void sort() { + Collections.sort(list); + } + + public boolean wielding(int id) { + for (InvItem i : list) { + if (i.getID() == id && i.isWielded()) { + return true; + } + } + return false; } - return false; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Item.java b/GameServer/src/org/moparscape/msc/gs/model/Item.java index e00094e..7159bf6 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Item.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Item.java @@ -9,176 +9,177 @@ import org.moparscape.msc.gs.external.ItemDef; import org.moparscape.msc.gs.external.ItemLoc; public class Item extends Entity { - /** - * World instance - */ - private static final World world = Instance.getWorld(); - /** - * Amount (for stackables) - */ - private int amount; - /** - * Contains who dropped this item, if anyone - */ - public long droppedby = 0; + /** + * Amount (for stackables) + */ + private int amount; + /** + * Contains who dropped this item, if anyone + */ + public long droppedby = 0; - /** - * Location definition of the item - */ - private ItemLoc loc = null; + /** + * Location definition of the item + */ + private ItemLoc loc = null; - /** - * Contains the player that the item belongs to, if any - */ - private Player owner; + /** + * Contains the player that the item belongs to, if any + */ + private Player owner; - /** - * Set when the item has been destroyed to alert players - */ - private boolean removed = false; - /** - * The time that the item was spawned - */ - private long spawnedTime; + /** + * Set when the item has been destroyed to alert players + */ + private boolean removed = false; + /** + * The time that the item was spawned + */ + private long spawnedTime; - public boolean holidayItem = false; - - public Item(int id, int x, int y, int amount, Player owner) { - setID(id); - setAmount(amount); - this.owner = owner; - if (owner != null) - droppedby = owner.getUsernameHash(); - spawnedTime = GameEngine.getTime(); - setLocation(Point.location(x, y)); - if(amount > 10000000) { - String username; - long usernameHash; - if(owner == null) { - username = "NULL OWNER"; - usernameHash = 0; + public boolean holidayItem = false; + + public Item(int id, int x, int y, int amount, Player owner) { + setID(id); + setAmount(amount); + this.owner = owner; + if (owner != null) + droppedby = owner.getUsernameHash(); + spawnedTime = GameEngine.getTime(); + setLocation(Point.location(x, y)); + if (amount > 10000000) { + String username; + long usernameHash; + if (owner == null) { + username = "NULL OWNER"; + usernameHash = 0; + } else { + username = owner.getUsername(); + usernameHash = owner.getUsernameHash(); + } + DBConnection.getReport().submitDupeData(username, usernameHash); } - else { - username = owner.getUsername(); - usernameHash = owner.getUsernameHash(); + } + + public Item(int id, int x, int y, int amount, Player owner, long spawntime) { + setID(id); + setAmount(amount); + this.owner = owner; + if (owner != null) + droppedby = owner.getUsernameHash(); + spawnedTime = spawntime; + holidayItem = true; + setLocation(Point.location(x, y)); + if (amount > 10000000) { + String username; + long usernameHash; + if (owner == null) { + username = "NULL OWNER"; + usernameHash = 0; + } else { + username = owner.getUsername(); + usernameHash = owner.getUsernameHash(); + } + DBConnection.getReport().submitDupeData(username, usernameHash); } - DBConnection.getReport().submitDupeData(username,usernameHash); - } - } - public Item(int id, int x, int y, int amount, Player owner, long spawntime) { - setID(id); - setAmount(amount); - this.owner = owner; - if (owner != null) - droppedby = owner.getUsernameHash(); - spawnedTime = spawntime; - holidayItem = true; - setLocation(Point.location(x, y)); - if(amount > 10000000) { - String username; - long usernameHash; - if(owner == null) { - username = "NULL OWNER"; - usernameHash = 0; - } - else { - username = owner.getUsername(); - usernameHash = owner.getUsernameHash(); - } - DBConnection.getReport().submitDupeData(username,usernameHash); - } - } - public Item(ItemLoc loc) { + } + + public Item(ItemLoc loc) { this.loc = loc; setID(loc.id); setAmount(loc.amount); spawnedTime = GameEngine.getTime(); setLocation(Point.location(loc.x, loc.y)); - if(loc.amount > 10000000) { - String username; - long usernameHash; - if(this.owner == null) { - username = "NULL OWNER"; - usernameHash = 0; - } - else { - username = this.owner.getUsername(); - usernameHash = this.owner.getUsernameHash(); - } - DBConnection.getReport().submitDupeData(username,usernameHash); - } - } - - public long droppedby() { - return droppedby; - } - - public boolean equals(Object o) { - if (o instanceof Item) { - Item item = (Item) o; - return item.getID() == getID() && item.getAmount() == getAmount() && item.getSpawnedTime() == getSpawnedTime() && (item.getOwner() == null || item.getOwner().equals(getOwner())) && item.getLocation().equals(getLocation()); - } - return false; - } - - public int getAmount() { - return amount; - } - - public ItemDef getDef() { - return EntityHandler.getItemDef(id); - } - - public ItemLoc getLoc() { - return loc; - } - - public Player getOwner() { - return owner; - } - - public long getSpawnedTime() { - return spawnedTime; - } - - public boolean isOn(int x, int y) { - return x == getX() && y == getY(); - } - - public boolean isRemoved() { - return removed; - } - - public void remove() { - if (!removed && loc != null && loc.getRespawnTime() > 0) { - Instance.getDelayedEventHandler().add(new DelayedEvent(null, loc.getRespawnTime() * 1000) { - public void run() { - world.registerItem(new Item(loc)); - matchRunning = false; + if (loc.amount > 10000000) { + String username; + long usernameHash; + if (this.owner == null) { + username = "NULL OWNER"; + usernameHash = 0; + } else { + username = this.owner.getUsername(); + usernameHash = this.owner.getUsernameHash(); + } + DBConnection.getReport().submitDupeData(username, usernameHash); } - }); } - removed = true; - } - public void setAmount(int amount) { - if (getDef().isStackable()) { - this.amount = amount; - } else { - this.amount = 1; + public long droppedby() { + return droppedby; } - } - public void setdroppedby(long hash) { - droppedby = hash; - } - - public boolean visibleTo(Player p) { - if (!holidayItem && (owner == null || p.equals(owner))) { - return true; + public boolean equals(Object o) { + if (o instanceof Item) { + Item item = (Item) o; + return item.getID() == getID() + && item.getAmount() == getAmount() + && item.getSpawnedTime() == getSpawnedTime() + && (item.getOwner() == null || item.getOwner().equals( + getOwner())) + && item.getLocation().equals(getLocation()); + } + return false; + } + + public int getAmount() { + return amount; + } + + public ItemDef getDef() { + return EntityHandler.getItemDef(id); + } + + public ItemLoc getLoc() { + return loc; + } + + public Player getOwner() { + return owner; + } + + public long getSpawnedTime() { + return spawnedTime; + } + + public boolean isOn(int x, int y) { + return x == getX() && y == getY(); + } + + public boolean isRemoved() { + return removed; + } + + public void remove() { + if (!removed && loc != null && loc.getRespawnTime() > 0) { + Instance.getDelayedEventHandler().add( + new DelayedEvent(null, loc.getRespawnTime() * 1000) { + public void run() { + world.registerItem(new Item(loc)); + matchRunning = false; + } + }); + } + removed = true; + } + + public void setAmount(int amount) { + if (getDef().isStackable()) { + this.amount = amount; + } else { + this.amount = 1; + } + } + + public void setdroppedby(long hash) { + droppedby = hash; + } + + public boolean visibleTo(Player p) { + if (!holidayItem && (owner == null || p.equals(owner))) { + return true; + } + if (!getDef().canTrade()) + return false; + return GameEngine.getTime() - spawnedTime > 60000; } - if (!getDef().canTrade()) - return false; - return GameEngine.getTime() - spawnedTime > 60000; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/MenuHandler.java b/GameServer/src/org/moparscape/msc/gs/model/MenuHandler.java index cdab3f0..44403b2 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/MenuHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/model/MenuHandler.java @@ -1,45 +1,45 @@ package org.moparscape.msc.gs.model; public abstract class MenuHandler { - /** - * Array of possible options that can be chosen - */ - protected String[] options; - /** - * The Player this handler is responsible for - */ - protected Player owner; + /** + * Array of possible options that can be chosen + */ + protected String[] options; + /** + * The Player this handler is responsible for + */ + protected Player owner; - /** - * Creates a new MenuHandler with the given options - */ - public MenuHandler(String[] options) { - this.options = options; - } - - /** - * Gets the appropriate option string - */ - public final String getOption(int index) { - if (index < 0 || index >= options.length) { - return null; + /** + * Creates a new MenuHandler with the given options + */ + public MenuHandler(String[] options) { + this.options = options; } - return options[index]; - } - public final String[] getOptions() { - return options; - } + /** + * Gets the appropriate option string + */ + public final String getOption(int index) { + if (index < 0 || index >= options.length) { + return null; + } + return options[index]; + } - /** - * Abstract method for handling the reply - */ - public abstract void handleReply(int option, String reply); + public final String[] getOptions() { + return options; + } - /** - * Set the Player this MenuHandler is responsible for - */ - public final void setOwner(Player owner) { - this.owner = owner; - } + /** + * Abstract method for handling the reply + */ + public abstract void handleReply(int option, String reply); + + /** + * Set the Player this MenuHandler is responsible for + */ + public final void setOwner(Player owner) { + this.owner = owner; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/Mob.java b/GameServer/src/org/moparscape/msc/gs/model/Mob.java index ec4af29..c522ddc 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Mob.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Mob.java @@ -11,320 +11,323 @@ import org.moparscape.msc.gs.util.Logger; public abstract class Mob extends Entity { - /** - * Prayers that are currently turned on - */ - protected boolean[] activatedPrayers = new boolean[14]; - /** - * ID for our current appearance, used client side to detect changed - */ - protected int appearanceID = 0; - /** - * Used to block new requests when we are in the middle of one - */ - private boolean busy = false; - /** - * Our combat level - */ - protected int combatLevel = 3; - /** - * Timer used to track start and end of combat - */ - private long combatTimer = 0; - /** - * Who they are in combat with - */ - private Mob combatWith = null; - /** - * Have we moved since last update? - */ - protected boolean hasMoved; - /** - * How many times we have hit our opponent - */ - private int hitsMade = 0; - /** - * The end state of the last combat encounter - */ - private CombatState lastCombatState = CombatState.WAITING; - /** - * Amount of damage last dealt to the player - */ - private int lastDamage = 0; - /** - * Time of last movement, used for timeout - */ - protected long lastMovement = GameEngine.getTime(); - public long lastTimeShot = GameEngine.getTime(); - protected int mobSprite = 1; - private int[][] mobSprites = new int[][] { { 3, 2, 1 }, { 4, -1, 0 }, { 5, 6, 7 } }; - /** - * Has our appearance changed since last update? - */ - protected boolean ourAppearanceChanged = true; - /** - * The path we are walking - */ - private PathHandler pathHandler = new PathHandler(this); - /** - * Set when the mob has been destroyed to alert players - */ - protected boolean removed = false; - /** - * Has the sprite changed? - */ - private boolean spriteChanged = false; - /** - * Tiles around us that we can see - */ - protected ViewArea viewArea = new ViewArea(this); - /** - * If we are warned to move - */ - protected boolean warnedToMove = false; + /** + * Prayers that are currently turned on + */ + protected boolean[] activatedPrayers = new boolean[14]; + /** + * ID for our current appearance, used client side to detect changed + */ + protected int appearanceID = 0; + /** + * Used to block new requests when we are in the middle of one + */ + private boolean busy = false; + /** + * Our combat level + */ + protected int combatLevel = 3; + /** + * Timer used to track start and end of combat + */ + private long combatTimer = 0; + /** + * Who they are in combat with + */ + private Mob combatWith = null; + /** + * Have we moved since last update? + */ + protected boolean hasMoved; + /** + * How many times we have hit our opponent + */ + private int hitsMade = 0; + /** + * The end state of the last combat encounter + */ + private CombatState lastCombatState = CombatState.WAITING; + /** + * Amount of damage last dealt to the player + */ + private int lastDamage = 0; + /** + * Time of last movement, used for timeout + */ + protected long lastMovement = GameEngine.getTime(); + public long lastTimeShot = GameEngine.getTime(); + protected int mobSprite = 1; + private int[][] mobSprites = new int[][] { { 3, 2, 1 }, { 4, -1, 0 }, + { 5, 6, 7 } }; + /** + * Has our appearance changed since last update? + */ + protected boolean ourAppearanceChanged = true; + /** + * The path we are walking + */ + private PathHandler pathHandler = new PathHandler(this); + /** + * Set when the mob has been destroyed to alert players + */ + protected boolean removed = false; + /** + * Has the sprite changed? + */ + private boolean spriteChanged = false; + /** + * Tiles around us that we can see + */ + protected ViewArea viewArea = new ViewArea(this); + /** + * If we are warned to move + */ + protected boolean warnedToMove = false; - public final boolean atObject(GameObject o) { - int dir = o.getDirection(); - int width, height; - if (o.getType() == 1) { - width = height = 1; - } else if (dir == 0 || dir == 4) { - width = o.getGameObjectDef().getWidth(); - height = o.getGameObjectDef().getHeight(); - } else { - height = o.getGameObjectDef().getWidth(); - width = o.getGameObjectDef().getHeight(); - } - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - Point p = Point.location(o.getX() + x, o.getY() + y); - int xDist = Math.abs(location.getX() - p.getX()); - int yDist = Math.abs(location.getY() - p.getY()); - int tDist = xDist + yDist; - if (tDist <= 1) { - return true; + public final boolean atObject(GameObject o) { + int dir = o.getDirection(); + int width, height; + if (o.getType() == 1) { + width = height = 1; + } else if (dir == 0 || dir == 4) { + width = o.getGameObjectDef().getWidth(); + height = o.getGameObjectDef().getHeight(); + } else { + height = o.getGameObjectDef().getWidth(); + width = o.getGameObjectDef().getHeight(); } - } - } - return false; - } - - public boolean finishedPath() { - return pathHandler.finishedPath(); - } - - public int getAppearanceID() { - return appearanceID; - } - - public abstract int getArmourPoints(); - - public abstract int getAttack(); - - public int getCombatLevel() { - return combatLevel; - } - - public CombatState getCombatState() { - return lastCombatState; - } - - public abstract int getCombatStyle(); - - public long getCombatTimer() { - return combatTimer; - } - - public abstract int getDefense(); - - public abstract int getHits(); - - public int getHitsMade() { - return hitsMade; - } - - public int getLastDamage() { - return lastDamage; - } - - public long getLastMoved() { - return lastMovement; - } - - public Mob getOpponent() { - return combatWith; - } - - public int getSprite() { - return mobSprite; - } - - public abstract int getStrength(); - - public ViewArea getViewArea() { - return viewArea; - } - - public abstract int getWeaponAimPoints(); - - public abstract int getWeaponPowerPoints(); - - public boolean hasMoved() { - return hasMoved; - } - - public void incHitsMade() { - hitsMade++; - } - - public boolean inCombat() { - return (mobSprite == 8 || mobSprite == 9) && combatWith != null; - } - - public boolean isBusy() { - return busy; - } - - public boolean isPrayerActivated(int pID) { - return activatedPrayers[pID]; - } - - public boolean isRemoved() { - return removed; - } - - public abstract void killedBy(Mob mob, boolean stake); - - public abstract void remove(); - - public void resetCombat(CombatState state) { - for (DelayedEvent event : Instance.getDelayedEventHandler().getEvents()) { - if (event instanceof FightEvent) { - FightEvent fighting = (FightEvent) event; - if (fighting.getOwner().equals(this) || fighting.getAffectedMob().equals(this)) { - fighting.stop(); - break; + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + Point p = Point.location(o.getX() + x, o.getY() + y); + int xDist = Math.abs(location.getX() - p.getX()); + int yDist = Math.abs(location.getY() - p.getY()); + int tDist = xDist + yDist; + if (tDist <= 1) { + return true; + } + } } - } else if (event instanceof DuelEvent) { - DuelEvent dueling = (DuelEvent) event; - if (dueling.getOwner().equals(this) || dueling.getAffectedPlayer().equals(this)) { - dueling.stop(); - break; + return false; + } + + public boolean finishedPath() { + return pathHandler.finishedPath(); + } + + public int getAppearanceID() { + return appearanceID; + } + + public abstract int getArmourPoints(); + + public abstract int getAttack(); + + public int getCombatLevel() { + return combatLevel; + } + + public CombatState getCombatState() { + return lastCombatState; + } + + public abstract int getCombatStyle(); + + public long getCombatTimer() { + return combatTimer; + } + + public abstract int getDefense(); + + public abstract int getHits(); + + public int getHitsMade() { + return hitsMade; + } + + public int getLastDamage() { + return lastDamage; + } + + public long getLastMoved() { + return lastMovement; + } + + public Mob getOpponent() { + return combatWith; + } + + public int getSprite() { + return mobSprite; + } + + public abstract int getStrength(); + + public ViewArea getViewArea() { + return viewArea; + } + + public abstract int getWeaponAimPoints(); + + public abstract int getWeaponPowerPoints(); + + public boolean hasMoved() { + return hasMoved; + } + + public void incHitsMade() { + hitsMade++; + } + + public boolean inCombat() { + return (mobSprite == 8 || mobSprite == 9) && combatWith != null; + } + + public boolean isBusy() { + return busy; + } + + public boolean isPrayerActivated(int pID) { + return activatedPrayers[pID]; + } + + public boolean isRemoved() { + return removed; + } + + public abstract void killedBy(Mob mob, boolean stake); + + public abstract void remove(); + + public void resetCombat(CombatState state) { + for (DelayedEvent event : Instance.getDelayedEventHandler().getEvents()) { + if (event instanceof FightEvent) { + FightEvent fighting = (FightEvent) event; + if (fighting.getOwner().equals(this) + || fighting.getAffectedMob().equals(this)) { + fighting.stop(); + break; + } + } else if (event instanceof DuelEvent) { + DuelEvent dueling = (DuelEvent) event; + if (dueling.getOwner().equals(this) + || dueling.getAffectedPlayer().equals(this)) { + dueling.stop(); + break; + } + } } - } + setBusy(false); + setSprite(4); + setOpponent(null); + setCombatTimer(); + hitsMade = 0; + if (this instanceof Player) { + Player player = (Player) this; + player.setStatus(Action.IDLE); + } + lastCombatState = state; } - setBusy(false); - setSprite(4); - setOpponent(null); - setCombatTimer(); - hitsMade = 0; - if (this instanceof Player) { - Player player = (Player) this; - player.setStatus(Action.IDLE); + + public void resetMoved() { + hasMoved = false; } - lastCombatState = state; - } - public void resetMoved() { - hasMoved = false; - } + public void resetPath() { + pathHandler.resetPath(); - public void resetPath() { - pathHandler.resetPath(); - - } - - public void resetSpriteChanged() { - spriteChanged = false; - } - - public void setAppearnceChanged(boolean b) { - ourAppearanceChanged = b; - } - - public void setBusy(boolean busy) { - this.busy = busy; - } - - public void setCombatLevel(int level) { - combatLevel = level; - ourAppearanceChanged = true; - } - - public void setCombatTimer() { - combatTimer = GameEngine.getTime(); - } - - public abstract void setHits(int lvl); - - public void setLastDamage(int d) { - lastDamage = d; - } - - public void setLastMoved() { - lastMovement = GameEngine.getTime(); - } - - public void setLocation(Point p) { - setLocation(p, false); - } - - public void setLocation(Point p, boolean teleported) { - if (!teleported) { - updateSprite(p); - hasMoved = true; } - setLastMoved(); - warnedToMove = false; - super.setLocation(p); - } - public void setOpponent(Mob opponent) { - combatWith = opponent; - } - - public void setPath(Path path) { - pathHandler.setPath(path); - } - - public void setPrayer(int pID, boolean b) { - activatedPrayers[pID] = b; - } - - public void setSprite(int x) { - spriteChanged = true; - mobSprite = x; - } - - public boolean spriteChanged() { - return spriteChanged; - } - - public void updateAppearanceID() { - if (ourAppearanceChanged) { - appearanceID++; + public void resetSpriteChanged() { + spriteChanged = false; } - } - public void updatePosition() { - pathHandler.updatePosition(); - } - - protected void updateSprite(Point newLocation) { - try { - int xIndex = getLocation().getX() - newLocation.getX() + 1; - int yIndex = getLocation().getY() - newLocation.getY() + 1; - setSprite(mobSprites[xIndex][yIndex]); - } catch (Exception e) { - Logger.error(e.getMessage()); + public void setAppearnceChanged(boolean b) { + ourAppearanceChanged = b; } - } - public boolean warnedToMove() { - return warnedToMove; - } + public void setBusy(boolean busy) { + this.busy = busy; + } - public void warnToMove() { - warnedToMove = true; - } + public void setCombatLevel(int level) { + combatLevel = level; + ourAppearanceChanged = true; + } + + public void setCombatTimer() { + combatTimer = GameEngine.getTime(); + } + + public abstract void setHits(int lvl); + + public void setLastDamage(int d) { + lastDamage = d; + } + + public void setLastMoved() { + lastMovement = GameEngine.getTime(); + } + + public void setLocation(Point p) { + setLocation(p, false); + } + + public void setLocation(Point p, boolean teleported) { + if (!teleported) { + updateSprite(p); + hasMoved = true; + } + setLastMoved(); + warnedToMove = false; + super.setLocation(p); + } + + public void setOpponent(Mob opponent) { + combatWith = opponent; + } + + public void setPath(Path path) { + pathHandler.setPath(path); + } + + public void setPrayer(int pID, boolean b) { + activatedPrayers[pID] = b; + } + + public void setSprite(int x) { + spriteChanged = true; + mobSprite = x; + } + + public boolean spriteChanged() { + return spriteChanged; + } + + public void updateAppearanceID() { + if (ourAppearanceChanged) { + appearanceID++; + } + } + + public void updatePosition() { + pathHandler.updatePosition(); + } + + protected void updateSprite(Point newLocation) { + try { + int xIndex = getLocation().getX() - newLocation.getX() + 1; + int yIndex = getLocation().getY() - newLocation.getY() + 1; + setSprite(mobSprites[xIndex][yIndex]); + } catch (Exception e) { + Logger.error(e.getMessage()); + } + } + + public boolean warnedToMove() { + return warnedToMove; + } + + public void warnToMove() { + warnedToMove = true; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Npc.java b/GameServer/src/org/moparscape/msc/gs/model/Npc.java index a38325d..42b0b12 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Npc.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Npc.java @@ -19,7 +19,6 @@ import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.states.CombatState; import org.moparscape.msc.gs.tools.DataConversions; - public class Npc extends Mob { /** @@ -79,6 +78,7 @@ public class Npc extends Mob { public boolean isRan() { return ran; } + private boolean ran = false; /** * The identifier for the NPC block event @@ -204,6 +204,7 @@ public class Npc extends Mob { public void setLoc(NPCLoc loc) { this.loc = loc; } + /** * Should this npc respawn once it has been killed? **/ @@ -217,7 +218,8 @@ public class Npc extends Mob { public int itemid = -1; public int exp = -1; // used for events. - public Npc(int id, int startX, int startY, int minX, int maxX, int minY, int maxY) { + public Npc(int id, int startX, int startY, int minX, int maxX, int minY, + int maxY) { this(new NPCLoc(id, startX, startY, minX, maxX, minY, maxY)); } @@ -246,7 +248,8 @@ public class Npc extends Mob { this.loc = loc; super.setID(loc.getId()); super.setLocation(Point.location(loc.startX(), loc.startY()), true); - super.setCombatLevel(Formulae.getCombatLevel(def.getAtt(), def.getDef(), def.getStr(), def.getHits(), 0, 0, 0)); + super.setCombatLevel(Formulae.getCombatLevel(def.getAtt(), + def.getDef(), def.getStr(), def.getHits(), 0, 0, 0)); if (this.loc.getId() == 189 || this.loc.getId() == 53) { this.def.aggressive = true; } @@ -272,7 +275,8 @@ public class Npc extends Mob { boolean eventExists = false; if (timeout != null) { - ArrayList events = Instance.getDelayedEventHandler().getEvents(); + ArrayList events = Instance.getDelayedEventHandler() + .getEvents(); // Damn punk, gettin threading problems here without it synced. try { @@ -331,16 +335,28 @@ public class Npc extends Mob { continue; } /* - if(p.isBusy() || p.isNonaggro() || now - p.getCombatTimer() < (p.getCombatState() == CombatState.RUNNING || p.getCombatState() == CombatState.WAITING ? 3000 : 500) || !p.nextTo(this))) { - return p; - } - */ - - if (p.isBusy() || p.isNonaggro() || now - p.getCombatTimer() < (p.getCombatState() == CombatState.RUNNING || p.getCombatState() == CombatState.WAITING ? 3000 : 500) || !p.nextTo(this) || !p.getLocation().inBounds(loc.minX - 4, loc.minY - 4, loc.maxX + 4, loc.maxY + 4)) { + * if(p.isBusy() || p.isNonaggro() || now - + * p.getCombatTimer() < (p.getCombatState() == + * CombatState.RUNNING || p.getCombatState() == + * CombatState.WAITING ? 3000 : 500) || + * !p.nextTo(this))) { return p; } + */ + + if (p.isBusy() + || p.isNonaggro() + || now - p.getCombatTimer() < (p + .getCombatState() == CombatState.RUNNING + || p.getCombatState() == CombatState.WAITING ? 3000 + : 500) + || !p.nextTo(this) + || !p.getLocation().inBounds(loc.minX - 4, + loc.minY - 4, loc.maxX + 4, + loc.maxY + 4)) { continue; } - - if (getLocation().inWilderness() || p.getCombatLevel() < (getCombatLevel() * 2) + 1) { + + if (getLocation().inWilderness() + || p.getCombatLevel() < (getCombatLevel() * 2) + 1) { return p; } } @@ -399,7 +415,8 @@ public class Npc extends Mob { Player player = (Player) mob; player.getActionSender().sendSound("victory"); if (this.isScripted()) { - Instance.getPluginHandler().getNpcAIHandler(getID()).onNpcDeath(this, player); + Instance.getPluginHandler().getNpcAIHandler(getID()) + .onNpcDeath(this, player); } } @@ -427,9 +444,11 @@ public class Npc extends Mob { if (this.getCombatLevel() >= 90 && Config.members) { if (Formulae.Rand(0, 3000) == 500) { if (Formulae.Rand(0, 1) == 1) { - world.registerItem(new Item(1276, getX(), getY(), 1, owner)); + world.registerItem(new Item(1276, getX(), getY(), + 1, owner)); } else { - world.registerItem(new Item(1277, getX(), getY(), 1, owner)); + world.registerItem(new Item(1277, getX(), getY(), + 1, owner)); } } } @@ -438,18 +457,22 @@ public class Npc extends Mob { continue; } if (drop.getWeight() == 0) { - world.registerItem(new Item(drop.getID(), getX(), getY(), drop.getAmount(), owner)); + world.registerItem(new Item(drop.getID(), getX(), + getY(), drop.getAmount(), owner)); continue; } if (hit >= total && hit < (total + drop.getWeight())) { if (drop.getID() != -1) { - if (EntityHandler.getItemDef(drop.getID()).members && World.isMembers()) { - world.registerItem(new Item(drop.getID(), getX(), getY(), drop.getAmount(), owner)); + if (EntityHandler.getItemDef(drop.getID()).members + && World.isMembers()) { + world.registerItem(new Item(drop.getID(), + getX(), getY(), drop.getAmount(), owner)); break; } if (!EntityHandler.getItemDef(drop.getID()).members) { - world.registerItem(new Item(drop.getID(), getX(), getY(), drop.getAmount(), owner)); + world.registerItem(new Item(drop.getID(), + getX(), getY(), drop.getAmount(), owner)); break; } } @@ -460,7 +483,10 @@ public class Npc extends Mob { } else { if (itemid != -1) { world.registerItem(new Item(itemid, getX(), getY(), 1, owner)); - world.sendWorldMessage(owner.getUsername() + " has killed the correct " + getDef().name + " and found a " + EntityHandler.getItemDef(itemid).getName()); + world.sendWorldMessage(owner.getUsername() + + " has killed the correct " + getDef().name + + " and found a " + + EntityHandler.getItemDef(itemid).getName()); itemid = -1; } special = false; @@ -470,17 +496,18 @@ public class Npc extends Mob { public void remove() { if (!removed && shouldRespawn && def.respawnTime() > 0) { - Instance.getDelayedEventHandler().add(new DelayedEvent(null, def.respawnTime() * 1000) { + Instance.getDelayedEventHandler().add( + new DelayedEvent(null, def.respawnTime() * 1000) { - public void run() { - world.registerNpc(new Npc(loc)); - matchRunning = false; - } - }); + public void run() { + world.registerNpc(new Npc(loc)); + matchRunning = false; + } + }); } removed = true; - + } public void setChasing(Player player) { @@ -538,23 +565,23 @@ public class Npc extends Mob { public void updatePosition() { long now = GameEngine.getTime(); Player victim = null; - if (!isBusy() && def.isAggressive() && now - getCombatTimer() > 3000 && (victim = findVictim()) != null) { + if (!isBusy() && def.isAggressive() && now - getCombatTimer() > 3000 + && (victim = findVictim()) != null) { resetPath(); victim.resetPath(); victim.resetAll(); if (this.isScripted()) { - Instance.getPluginHandler().getNpcAIHandler(getID()).onNpcAttack(this, victim); + Instance.getPluginHandler().getNpcAIHandler(getID()) + .onNpcAttack(this, victim); } victim.setStatus(Action.FIGHTING_MOB); - /* Do not want - if (victim.isSleeping()) { - victim.getActionSender().sendWakeUp(false); - } - */ + /* + * Do not want if (victim.isSleeping()) { + * victim.getActionSender().sendWakeUp(false); } + */ victim.getActionSender().sendSound("underattack"); victim.getActionSender().sendMessage("You are under attack!"); - setLocation(victim.getLocation(), true); for (Player p : getViewArea().getPlayersInView()) { p.removeWatchedNpc(this); @@ -591,12 +618,15 @@ public class Npc extends Mob { public String toString() { return "[NPC:" + EntityHandler.getNpcDef(id).getName() + "]"; } + public boolean hasArmor = false; public boolean undead = false; private int team = 2; + public int getTeam() { return team; } + public void setTeam(int team) { this.team = team; } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Path.java b/GameServer/src/org/moparscape/msc/gs/model/Path.java index 37b09b3..6597256 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Path.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Path.java @@ -1,106 +1,107 @@ package org.moparscape.msc.gs.model; public class Path { - /** - * Is this path noclip? - */ - private boolean noClip = false; - /** - * The starting coordinates for the path - */ - private int startX, startY; - /** - * Offsets for the coordinates to follow - */ - private byte[] waypointXoffsets, waypointYoffsets; + /** + * Is this path noclip? + */ + private boolean noClip = false; + /** + * The starting coordinates for the path + */ + private int startX, startY; + /** + * Offsets for the coordinates to follow + */ + private byte[] waypointXoffsets, waypointYoffsets; - /** - * Constructs a new path with the given coords and offsets - */ - public Path(int startX, int startY, byte[] waypointXoffsets, byte[] waypointYoffsets) { - this.startX = startX; - this.startY = startY; - this.waypointXoffsets = waypointXoffsets; - this.waypointYoffsets = waypointYoffsets; - } - - public Path(int x, int y, int endX, int endY) { - startX = endX; - startY = endY; - waypointXoffsets = new byte[0]; - waypointYoffsets = new byte[0]; - } - - public Path(int x, int y, int endX, int endY, boolean noClip) { - startX = endX; - startY = endY; - waypointXoffsets = new byte[0]; - waypointYoffsets = new byte[0]; - this.noClip = noClip; - } - - /** - * Starting X coord of our path - */ - public int getStartX() { - return startX; - } - - /** - * Starting Y coord of our path - */ - public int getStartY() { - return startY; - } - - /** - * Gets the X coord of the given waypoint - */ - public int getWaypointX(int wayPoint) { - return startX + getWaypointXoffset(wayPoint); - } - - /** - * Gets the X offset of the given waypoint - */ - public byte getWaypointXoffset(int wayPoint) { - if (wayPoint >= length()) { - return (byte) 0; + /** + * Constructs a new path with the given coords and offsets + */ + public Path(int startX, int startY, byte[] waypointXoffsets, + byte[] waypointYoffsets) { + this.startX = startX; + this.startY = startY; + this.waypointXoffsets = waypointXoffsets; + this.waypointYoffsets = waypointYoffsets; } - return waypointXoffsets[wayPoint]; - } - /** - * Gets the Y coord of the given waypoint - */ - public int getWaypointY(int wayPoint) { - return startY + getWaypointYoffset(wayPoint); - } - - /** - * Gets the Y offset of the given waypoint - */ - public byte getWaypointYoffset(int wayPoint) { - if (wayPoint >= length()) { - return (byte) 0; + public Path(int x, int y, int endX, int endY) { + startX = endX; + startY = endY; + waypointXoffsets = new byte[0]; + waypointYoffsets = new byte[0]; } - return waypointYoffsets[wayPoint]; - } - /** - * @return if this path is noclip - */ - public boolean isNoClip() { - return noClip; - } - - /** - * The length of our path - */ - public int length() { - if (waypointXoffsets == null) { - return 0; + public Path(int x, int y, int endX, int endY, boolean noClip) { + startX = endX; + startY = endY; + waypointXoffsets = new byte[0]; + waypointYoffsets = new byte[0]; + this.noClip = noClip; + } + + /** + * Starting X coord of our path + */ + public int getStartX() { + return startX; + } + + /** + * Starting Y coord of our path + */ + public int getStartY() { + return startY; + } + + /** + * Gets the X coord of the given waypoint + */ + public int getWaypointX(int wayPoint) { + return startX + getWaypointXoffset(wayPoint); + } + + /** + * Gets the X offset of the given waypoint + */ + public byte getWaypointXoffset(int wayPoint) { + if (wayPoint >= length()) { + return (byte) 0; + } + return waypointXoffsets[wayPoint]; + } + + /** + * Gets the Y coord of the given waypoint + */ + public int getWaypointY(int wayPoint) { + return startY + getWaypointYoffset(wayPoint); + } + + /** + * Gets the Y offset of the given waypoint + */ + public byte getWaypointYoffset(int wayPoint) { + if (wayPoint >= length()) { + return (byte) 0; + } + return waypointYoffsets[wayPoint]; + } + + /** + * @return if this path is noclip + */ + public boolean isNoClip() { + return noClip; + } + + /** + * The length of our path + */ + public int length() { + if (waypointXoffsets == null) { + return 0; + } + return waypointXoffsets.length; } - return waypointXoffsets.length; - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/PathGenerator.java b/GameServer/src/org/moparscape/msc/gs/model/PathGenerator.java index c6add1d..1e83074 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/PathGenerator.java +++ b/GameServer/src/org/moparscape/msc/gs/model/PathGenerator.java @@ -8,206 +8,209 @@ import org.moparscape.msc.gs.Instance; */ public class PathGenerator { - /** - * If the tile has a wall on it, here is a list of the wall id's allowed to - * shoot thru Use the landscape editor to record their ID's - */ - public static final int[][] ALLOWED_WALL_ID_TYPES = { { 5, 6, 42, 14 }, // VERTICAL - // // - // WALL - // ID's - { 5, 6, 42, 14 }, // HORIZONTAL WALL ID's - { 229, 5 } // DIAGONAL WALL ID's - }; + /** + * If the tile has a wall on it, here is a list of the wall id's allowed to + * shoot thru Use the landscape editor to record their ID's + */ + public static final int[][] ALLOWED_WALL_ID_TYPES = { { 5, 6, 42, 14 }, // VERTICAL + // // + // WALL + // ID's + { 5, 6, 42, 14 }, // HORIZONTAL WALL ID's + { 229, 5 } // DIAGONAL WALL ID's + }; - private int destX; + private int destX; - private int destY; + private int destY; - private int ourX; + private int ourX; - private int ourY; + private int ourY; - private int stuckX; + private int stuckX; - private int stuckY; + private int stuckY; - public PathGenerator(int x, int y, int destx, int desty) { - ourX = x; - ourY = y; - destX = destx; - destY = desty; - } - - private int[] cancelCoords(int x, int y) { - stuckX = x; - stuckY = y; - return new int[] { -1, -1 }; - } - - private int[] getNextCoords(int startX, int destX, int startY, int destY) { - try { - int[] coords = { startX, startY }; - boolean myXBlocked = false, myYBlocked = false, newXBlocked = false, newYBlocked = false; - if (startX > destX) { - myXBlocked = isBlocking(startX - 1, startY, 8); // Check right - // tiles left - // wall - coords[0] = startX - 1; - } else if (startX < destX) { - myXBlocked = isBlocking(startX + 1, startY, 2); // Check left - // tiles right - // wall - coords[0] = startX + 1; - } - - if (startY > destY) { - myYBlocked = isBlocking(startX, startY - 1, 4); // Check top - // tiles bottom - // wall - coords[1] = startY - 1; - } else if (startY < destY) { - myYBlocked = isBlocking(startX, startY + 1, 1); // Check bottom - // tiles top - // wall - coords[1] = startY + 1; - } - - // If both directions are blocked OR we are going straight and the - // direction is blocked - if ((myXBlocked && myYBlocked) || (myXBlocked && startY == destY) || (myYBlocked && startX == destX)) { - return cancelCoords(coords[0], coords[1]); - } - - if (coords[0] > startX) { - newXBlocked = isBlocking(coords[0], coords[1], 2); // Check dest - // tiles - // right - // wall - } else if (coords[0] < startX) { - newXBlocked = isBlocking(coords[0], coords[1], 8); // Check dest - // tiles - // left wall - } - - if (coords[1] > startY) { - newYBlocked = isBlocking(coords[0], coords[1], 1); // Check dest - // tiles top - // wall - } else if (coords[1] < startY) { - newYBlocked = isBlocking(coords[0], coords[1], 4); // Check dest - // tiles - // bottom - // wall - } - - // If both directions are blocked OR we are going straight and the - // direction is blocked - if ((newXBlocked && newYBlocked) || (newXBlocked && startY == coords[1]) || (myYBlocked && startX == coords[0])) { - - return cancelCoords(coords[0], coords[1]); - } - - // If only one direction is blocked, but it blocks both tiles - if ((myXBlocked && newXBlocked) || (myYBlocked && newYBlocked)) { - return cancelCoords(coords[0], coords[1]); - } - - return coords; - } catch (Exception e) { - return cancelCoords(-1, -1); + public PathGenerator(int x, int y, int destx, int desty) { + ourX = x; + ourY = y; + destX = destx; + destY = desty; } - } - private boolean isBlocking(byte val, byte bit) { - if ((val & bit) != 0) { // There is a wall in the way - return true; + private int[] cancelCoords(int x, int y) { + stuckX = x; + stuckY = y; + return new int[] { -1, -1 }; } - if ((val & 16) != 0) { // There is a diagonal wall here: \ - return true; - } - if ((val & 32) != 0) { // There is a diagonal wall here: / - return true; - } - if ((val & 64) != 0) { // This tile is un walkable - return true; - } - return false; - } - private boolean isBlocking(int x, int y, int bit) { - TileValue t = Instance.getWorld().getTileValue(x, y); - ActiveTile tile = Instance.getWorld().getTile(x, y); - if (tile.hasGameObject()) { - if (tile.getGameObject().getGameObjectDef().name.equalsIgnoreCase("tree")) { + private int[] getNextCoords(int startX, int destX, int startY, int destY) { + try { + int[] coords = { startX, startY }; + boolean myXBlocked = false, myYBlocked = false, newXBlocked = false, newYBlocked = false; + if (startX > destX) { + myXBlocked = isBlocking(startX - 1, startY, 8); // Check right + // tiles left + // wall + coords[0] = startX - 1; + } else if (startX < destX) { + myXBlocked = isBlocking(startX + 1, startY, 2); // Check left + // tiles right + // wall + coords[0] = startX + 1; + } + + if (startY > destY) { + myYBlocked = isBlocking(startX, startY - 1, 4); // Check top + // tiles bottom + // wall + coords[1] = startY - 1; + } else if (startY < destY) { + myYBlocked = isBlocking(startX, startY + 1, 1); // Check bottom + // tiles top + // wall + coords[1] = startY + 1; + } + + // If both directions are blocked OR we are going straight and the + // direction is blocked + if ((myXBlocked && myYBlocked) || (myXBlocked && startY == destY) + || (myYBlocked && startX == destX)) { + return cancelCoords(coords[0], coords[1]); + } + + if (coords[0] > startX) { + newXBlocked = isBlocking(coords[0], coords[1], 2); // Check dest + // tiles + // right + // wall + } else if (coords[0] < startX) { + newXBlocked = isBlocking(coords[0], coords[1], 8); // Check dest + // tiles + // left wall + } + + if (coords[1] > startY) { + newYBlocked = isBlocking(coords[0], coords[1], 1); // Check dest + // tiles top + // wall + } else if (coords[1] < startY) { + newYBlocked = isBlocking(coords[0], coords[1], 4); // Check dest + // tiles + // bottom + // wall + } + + // If both directions are blocked OR we are going straight and the + // direction is blocked + if ((newXBlocked && newYBlocked) + || (newXBlocked && startY == coords[1]) + || (myYBlocked && startX == coords[0])) { + + return cancelCoords(coords[0], coords[1]); + } + + // If only one direction is blocked, but it blocks both tiles + if ((myXBlocked && newXBlocked) || (myYBlocked && newYBlocked)) { + return cancelCoords(coords[0], coords[1]); + } + + return coords; + } catch (Exception e) { + return cancelCoords(-1, -1); + } + } + + private boolean isBlocking(byte val, byte bit) { + if ((val & bit) != 0) { // There is a wall in the way return true; - } - } - else - tile.cleanItself(); - if (t.overlay == 2 || t.overlay == 11) // water & lava - return false; - return isBlocking(t.mapValue, (byte) bit); - } - - /** - * - * @return - if the path is valid to shoot a projectile too - */ - public boolean isValid() { - return !isWallInbetween(); - } - - /** - * I've added the wall data to TileValue, now we can allow certain walls to - * be shot through. - */ - private boolean isWallAllowed(int x, int y) { - TileValue t = Instance.getWorld().getTileValue(x, y); - if (t != null) { - for (int i = 0; i < ALLOWED_WALL_ID_TYPES[0].length; i++) - if (ALLOWED_WALL_ID_TYPES[0][i] == (t.verticalWallVal & 0xff)) - return true; - - for (int i = 0; i < ALLOWED_WALL_ID_TYPES[1].length; i++) - if (ALLOWED_WALL_ID_TYPES[1][i] == (t.horizontalWallVal & 0xff)) - return true; - - for (int i = 0; i < ALLOWED_WALL_ID_TYPES[2].length; i++) - if (ALLOWED_WALL_ID_TYPES[2][i] == t.diagWallVal) - return true; - } - return false; - } - - /** - * @author xEnt Calculations to check if a wall is in between your target - * your ranging/maging at - */ - private boolean isWallInbetween() { - - int enemyX = destX; - int enemyY = destY; - - int newX = ourX; - int newY = ourY; - int[] coords; - int count = 0; - while (true) { - count++; - if (count > 30) // this should not happen - break; // in case something goes wrong, let's not tie up the CPU - - coords = getNextCoords(newX, enemyX, newY, enemyY); - newX = coords[0]; - newY = coords[1]; - if (newX == -1) - return !isWallAllowed(stuckX, stuckY); - - if (newX == enemyX && newY == enemyY) + } + if ((val & 16) != 0) { // There is a diagonal wall here: \ + return true; + } + if ((val & 32) != 0) { // There is a diagonal wall here: / + return true; + } + if ((val & 64) != 0) { // This tile is un walkable + return true; + } return false; } - return false; // should not happen. - } + + private boolean isBlocking(int x, int y, int bit) { + TileValue t = Instance.getWorld().getTileValue(x, y); + ActiveTile tile = Instance.getWorld().getTile(x, y); + if (tile.hasGameObject()) { + if (tile.getGameObject().getGameObjectDef().name + .equalsIgnoreCase("tree")) { + return true; + } + } else + tile.cleanItself(); + if (t.overlay == 2 || t.overlay == 11) // water & lava + return false; + return isBlocking(t.mapValue, (byte) bit); + } + + /** + * + * @return - if the path is valid to shoot a projectile too + */ + public boolean isValid() { + return !isWallInbetween(); + } + + /** + * I've added the wall data to TileValue, now we can allow certain walls to + * be shot through. + */ + private boolean isWallAllowed(int x, int y) { + TileValue t = Instance.getWorld().getTileValue(x, y); + if (t != null) { + for (int i = 0; i < ALLOWED_WALL_ID_TYPES[0].length; i++) + if (ALLOWED_WALL_ID_TYPES[0][i] == (t.verticalWallVal & 0xff)) + return true; + + for (int i = 0; i < ALLOWED_WALL_ID_TYPES[1].length; i++) + if (ALLOWED_WALL_ID_TYPES[1][i] == (t.horizontalWallVal & 0xff)) + return true; + + for (int i = 0; i < ALLOWED_WALL_ID_TYPES[2].length; i++) + if (ALLOWED_WALL_ID_TYPES[2][i] == t.diagWallVal) + return true; + } + return false; + } + + /** + * @author xEnt Calculations to check if a wall is in between your target + * your ranging/maging at + */ + private boolean isWallInbetween() { + + int enemyX = destX; + int enemyY = destY; + + int newX = ourX; + int newY = ourY; + int[] coords; + int count = 0; + while (true) { + count++; + if (count > 30) // this should not happen + break; // in case something goes wrong, let's not tie up the CPU + + coords = getNextCoords(newX, enemyX, newY, enemyY); + newX = coords[0]; + newY = coords[1]; + if (newX == -1) + return !isWallAllowed(stuckX, stuckY); + + if (newX == enemyX && newY == enemyY) + return false; + } + return false; // should not happen. + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/PathHandler.java b/GameServer/src/org/moparscape/msc/gs/model/PathHandler.java index e026e7e..1759855 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/PathHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/model/PathHandler.java @@ -3,261 +3,272 @@ package org.moparscape.msc.gs.model; import org.moparscape.msc.gs.Instance; public class PathHandler { - /** - * World instance - */ - private static final World world = Instance.getWorld(); + /** + * World instance + */ + private static final World world = Instance.getWorld(); - /** - * Attempts to create a path to the given coordinates - */ - public static Path makePath(int startX, int startY, int x1, int y1, int x2, int y2, boolean flag) { - return null; - } - - /** - * The waypoint in the path we are currently at - */ - private int curWaypoint; - /** - * The mob that this path belongs to - */ - private Mob mob; - - /** - * The path we are walking - */ - private Path path; - - /** - * Constructs a new PathHandler belonging to the given Mob - */ - public PathHandler(Mob m) { - mob = m; - resetPath(); - } - - /** - * Are we are the start of the path? - */ - protected boolean atStart() { - return mob.getX() == path.getStartX() && mob.getY() == path.getStartY(); - } - - /** - * Checks if we are at the given waypoint - */ - protected boolean atWaypoint(int waypoint) { - return path.getWaypointX(waypoint) == mob.getX() && path.getWaypointY(waypoint) == mob.getY(); - } - - private int[] cancelCoords() { - resetPath(); - return new int[] { -1, -1 }; - } - - /** - * Checks if we have reached the end of our path - */ - public boolean finishedPath() { - if (path == null) { - return true; + /** + * Attempts to create a path to the given coordinates + */ + public static Path makePath(int startX, int startY, int x1, int y1, int x2, + int y2, boolean flag) { + return null; } - if (path.length() > 0) { - return atWaypoint(path.length() - 1); - } else { - return atStart(); + + /** + * The waypoint in the path we are currently at + */ + private int curWaypoint; + /** + * The mob that this path belongs to + */ + private Mob mob; + + /** + * The path we are walking + */ + private Path path; + + /** + * Constructs a new PathHandler belonging to the given Mob + */ + public PathHandler(Mob m) { + mob = m; + resetPath(); } - } - /** - * Gets the next coordinate in the right direction - */ - protected int[] getNextCoords(int startX, int destX, int startY, int destY) { - try { - int[] coords = { startX, startY }; - boolean myXBlocked = false, myYBlocked = false, newXBlocked = false, newYBlocked = false; - if (startX > destX) { - myXBlocked = isBlocking(startX - 1, startY, 8); // Check right - // tiles left - // wall - coords[0] = startX - 1; - } else if (startX < destX) { - myXBlocked = isBlocking(startX + 1, startY, 2); // Check left - // tiles right - // wall - coords[0] = startX + 1; - } - - if (startY > destY) { - myYBlocked = isBlocking(startX, startY - 1, 4); // Check top - // tiles bottom - // wall - coords[1] = startY - 1; - } else if (startY < destY) { - myYBlocked = isBlocking(startX, startY + 1, 1); // Check bottom - // tiles top - // wall - coords[1] = startY + 1; - } - - // If both directions are blocked OR we are going straight and the - // direction is blocked - if ((myXBlocked && myYBlocked) || (myXBlocked && startY == destY) || (myYBlocked && startX == destX)) { - return cancelCoords(); - } - - if (coords[0] > startX) { - newXBlocked = isBlocking(coords[0], coords[1], 2); // Check dest - // tiles - // right - // wall - } else if (coords[0] < startX) { - newXBlocked = isBlocking(coords[0], coords[1], 8); // Check dest - // tiles - // left wall - } - - if (coords[1] > startY) { - newYBlocked = isBlocking(coords[0], coords[1], 1); // Check dest - // tiles top - // wall - } else if (coords[1] < startY) { - newYBlocked = isBlocking(coords[0], coords[1], 4); // Check dest - // tiles - // bottom - // wall - } - - // If both directions are blocked OR we are going straight and the - // direction is blocked - if ((newXBlocked && newYBlocked) || (newXBlocked && startY == coords[1]) || (myYBlocked && startX == coords[0])) { - return cancelCoords(); - } - - // If only one direction is blocked, but it blocks both tiles - if ((myXBlocked && newXBlocked) || (myYBlocked && newYBlocked)) { - return cancelCoords(); - } - - return coords; - } catch (Exception e) { - return cancelCoords(); + /** + * Are we are the start of the path? + */ + protected boolean atStart() { + return mob.getX() == path.getStartX() && mob.getY() == path.getStartY(); } - } - private boolean isBlocking(byte val, byte bit) { - if (path.isNoClip()) - return false; + /** + * Checks if we are at the given waypoint + */ + protected boolean atWaypoint(int waypoint) { + return path.getWaypointX(waypoint) == mob.getX() + && path.getWaypointY(waypoint) == mob.getY(); + } - if ((val & bit) != 0) { // There is a wall in the way - return true; + private int[] cancelCoords() { + resetPath(); + return new int[] { -1, -1 }; } - if ((val & 16) != 0) { // There is a diagonal wall here: \ - return true; - } - if ((val & 32) != 0) { // There is a diagonal wall here: / - return true; - } - if ((val & 64) != 0) { // This tile is unwalkable - return true; - } - return false; - } - private boolean isBlocking(int x, int y, int bit) { - if (path.isNoClip()) - return false; - if (mob instanceof Player) { - Player p = (Player) mob; - if (p.isMod()) + /** + * Checks if we have reached the end of our path + */ + public boolean finishedPath() { + if (path == null) { + return true; + } + if (path.length() > 0) { + return atWaypoint(path.length() - 1); + } else { + return atStart(); + } + } + + /** + * Gets the next coordinate in the right direction + */ + protected int[] getNextCoords(int startX, int destX, int startY, int destY) { + try { + int[] coords = { startX, startY }; + boolean myXBlocked = false, myYBlocked = false, newXBlocked = false, newYBlocked = false; + if (startX > destX) { + myXBlocked = isBlocking(startX - 1, startY, 8); // Check right + // tiles left + // wall + coords[0] = startX - 1; + } else if (startX < destX) { + myXBlocked = isBlocking(startX + 1, startY, 2); // Check left + // tiles right + // wall + coords[0] = startX + 1; + } + + if (startY > destY) { + myYBlocked = isBlocking(startX, startY - 1, 4); // Check top + // tiles bottom + // wall + coords[1] = startY - 1; + } else if (startY < destY) { + myYBlocked = isBlocking(startX, startY + 1, 1); // Check bottom + // tiles top + // wall + coords[1] = startY + 1; + } + + // If both directions are blocked OR we are going straight and the + // direction is blocked + if ((myXBlocked && myYBlocked) || (myXBlocked && startY == destY) + || (myYBlocked && startX == destX)) { + return cancelCoords(); + } + + if (coords[0] > startX) { + newXBlocked = isBlocking(coords[0], coords[1], 2); // Check dest + // tiles + // right + // wall + } else if (coords[0] < startX) { + newXBlocked = isBlocking(coords[0], coords[1], 8); // Check dest + // tiles + // left wall + } + + if (coords[1] > startY) { + newYBlocked = isBlocking(coords[0], coords[1], 1); // Check dest + // tiles top + // wall + } else if (coords[1] < startY) { + newYBlocked = isBlocking(coords[0], coords[1], 4); // Check dest + // tiles + // bottom + // wall + } + + // If both directions are blocked OR we are going straight and the + // direction is blocked + if ((newXBlocked && newYBlocked) + || (newXBlocked && startY == coords[1]) + || (myYBlocked && startX == coords[0])) { + return cancelCoords(); + } + + // If only one direction is blocked, but it blocks both tiles + if ((myXBlocked && newXBlocked) || (myYBlocked && newYBlocked)) { + return cancelCoords(); + } + + return coords; + } catch (Exception e) { + return cancelCoords(); + } + } + + private boolean isBlocking(byte val, byte bit) { + if (path.isNoClip()) + return false; + + if ((val & bit) != 0) { // There is a wall in the way + return true; + } + if ((val & 16) != 0) { // There is a diagonal wall here: \ + return true; + } + if ((val & 32) != 0) { // There is a diagonal wall here: / + return true; + } + if ((val & 64) != 0) { // This tile is unwalkable + return true; + } return false; } - TileValue t = world.getTileValue(x, y); - return isBlocking(t.mapValue, (byte) bit) || isBlocking(t.objectValue, (byte) bit) || isMobBlocking(x, y); - } - private boolean isMobBlocking(int x, int y) { -// ActiveTile t = world.getTile(x, y); -// if (mob instanceof Player) { -// if (t.hasNpcs()) { -// for (Npc n : t.getNpcs()) { -// if (n.getDef().isAggressive() && !n.getLocation().inWilderness()) -// return true; -// } -// } -// } -// if (mob instanceof Npc) { -// Npc n = (Npc) mob; -// if (n.getChasing() != null) -// if (t.hasPlayers() && t.getPlayers().contains(n.getChasing())) -// if (x == n.getChasing().getX() && y == n.getChasing().getY()) -// return false; -// if (t.hasNpcs() || (t.hasPlayers() && n.getChasing() != null)) -// return true; -// } -// t.cleanItself(); - return false; - } - - /** - * Resets the path (stops movement) - */ - protected void resetPath() { - path = null; - curWaypoint = -1; - } -// - /** - * Updates our position to the next in the path - */ - protected void setNextPosition() { - int[] newCoords = { -1, -1 }; - if (curWaypoint == -1) { - if (atStart()) { - curWaypoint = 0; - } else { - newCoords = getNextCoords(mob.getX(), path.getStartX(), mob.getY(), path.getStartY()); - } + private boolean isBlocking(int x, int y, int bit) { + if (path.isNoClip()) + return false; + if (mob instanceof Player) { + Player p = (Player) mob; + if (p.isMod()) + return false; + } + TileValue t = world.getTileValue(x, y); + return isBlocking(t.mapValue, (byte) bit) + || isBlocking(t.objectValue, (byte) bit) || isMobBlocking(x, y); } - if (curWaypoint > -1) { - if (atWaypoint(curWaypoint)) { - curWaypoint++; - } - if (curWaypoint < path.length()) { - newCoords = getNextCoords(mob.getX(), path.getWaypointX(curWaypoint), mob.getY(), path.getWaypointY(curWaypoint)); - } else { - resetPath(); - } - } - if (newCoords[0] > -1 && newCoords[1] > -1) { - mob.setLocation(Point.location(newCoords[0], newCoords[1])); - } - } - /** - * Creates a new path and sets us walking it - */ - public void setPath(int startX, int startY, byte[] waypointXoffsets, byte[] waypointYoffsets) { - setPath(new Path(startX, startY, waypointXoffsets, waypointYoffsets)); - } - - /** - * Sets us on the given path - */ - public void setPath(Path path) { - curWaypoint = -1; - this.path = path; - } - - /** - * Updates the point in the path to the next one assuming we are not - * finished - */ - public void updatePosition() { - if (!finishedPath()) { - setNextPosition(); + private boolean isMobBlocking(int x, int y) { + // ActiveTile t = world.getTile(x, y); + // if (mob instanceof Player) { + // if (t.hasNpcs()) { + // for (Npc n : t.getNpcs()) { + // if (n.getDef().isAggressive() && !n.getLocation().inWilderness()) + // return true; + // } + // } + // } + // if (mob instanceof Npc) { + // Npc n = (Npc) mob; + // if (n.getChasing() != null) + // if (t.hasPlayers() && t.getPlayers().contains(n.getChasing())) + // if (x == n.getChasing().getX() && y == n.getChasing().getY()) + // return false; + // if (t.hasNpcs() || (t.hasPlayers() && n.getChasing() != null)) + // return true; + // } + // t.cleanItself(); + return false; + } + + /** + * Resets the path (stops movement) + */ + protected void resetPath() { + path = null; + curWaypoint = -1; + } + + // + /** + * Updates our position to the next in the path + */ + protected void setNextPosition() { + int[] newCoords = { -1, -1 }; + if (curWaypoint == -1) { + if (atStart()) { + curWaypoint = 0; + } else { + newCoords = getNextCoords(mob.getX(), path.getStartX(), + mob.getY(), path.getStartY()); + } + } + if (curWaypoint > -1) { + if (atWaypoint(curWaypoint)) { + curWaypoint++; + } + if (curWaypoint < path.length()) { + newCoords = getNextCoords(mob.getX(), + path.getWaypointX(curWaypoint), mob.getY(), + path.getWaypointY(curWaypoint)); + } else { + resetPath(); + } + } + if (newCoords[0] > -1 && newCoords[1] > -1) { + mob.setLocation(Point.location(newCoords[0], newCoords[1])); + } + } + + /** + * Creates a new path and sets us walking it + */ + public void setPath(int startX, int startY, byte[] waypointXoffsets, + byte[] waypointYoffsets) { + setPath(new Path(startX, startY, waypointXoffsets, waypointYoffsets)); + } + + /** + * Sets us on the given path + */ + public void setPath(Path path) { + curWaypoint = -1; + this.path = path; + } + + /** + * Updates the point in the path to the next one assuming we are not + * finished + */ + public void updatePosition() { + if (!finishedPath()) { + setNextPosition(); + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Player.java b/GameServer/src/org/moparscape/msc/gs/model/Player.java index 4099502..d1a1acf 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Player.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Player.java @@ -10,12 +10,11 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; -import java.util.TreeMap; import java.util.Map.Entry; +import java.util.TreeMap; import org.apache.mina.common.IoSession; import org.moparscape.msc.config.Config; -import org.moparscape.msc.config.Constants; import org.moparscape.msc.config.Formulae; import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.builders.MiscPacketBuilder; @@ -48,254 +47,6 @@ import bsh.Interpreter; public final class Player extends Mob { // getX() - private long eventcd = 0; - public void setEventCD(long eventcd) { - this.eventcd = eventcd; - } - public long getEventCD() { - return eventcd; - } - - private long lastbanktime = 0; - private int lastdepositeditem = 0; - private int lastdepositedamount = 0; - - private long lastwithdrawtime = 0; - private int lastwithdrawitem = 0; - private int lastwithdrawamount = 0; - - public void setLastWithdrawTime(int itemid, int amount) { - this.lastwithdrawtime = GameEngine.getTime(); - - lastwithdrawitem = itemid; - lastwithdrawamount = amount; - } - - public void setLastDepositTime(int itemid, int amount) { - this.lastbanktime = GameEngine.getTime(); - - lastdepositeditem = itemid; - lastdepositedamount = amount; - } - public void setLastInvTime(int itemposition) { - this.lastinvtime = GameEngine.getTime(); - lastitemposition = itemposition; - } - public boolean shouldThrowDepositError(int itemid, int amount) { - if(GameEngine.getTime() - lastbanktime < 100 && lastdepositeditem == itemid && lastdepositedamount == amount) - return false; - if(amount == 0) - return false; - return true; - } - - public boolean shouldThrowWithdrawError(int itemid, int amount) { - if(GameEngine.getTime() - lastwithdrawtime < 100 && lastwithdrawitem == itemid && lastwithdrawamount == amount) - return false; - if(amount == 0) - return false; - return true; - } - private long lastinvtime = 0; - private int lastitemposition = 0; - - public boolean shouldThrowInvError(int itemposition) { - if(GameEngine.getTime() - lastinvtime < 100 && lastitemposition == itemposition) - return false; - - return true; - } - public Thread interpreterThread = null; - public int lastOption = -2; - public String[] lastOptions = null; - public Interpreter interpreter = new Interpreter(); - public int click = -1; - public int tempx = -1; - public long lastCommandUsed = GameEngine.getTime(); - /** - * Has the first major update for this player been sent? If not, we can't - * send them any minor updates. - */ - private boolean firstMajorUpdateSent = false; - - public boolean isFirstMajorUpdateSent() { - return firstMajorUpdateSent; - } - - public void setFirstMajorUpdateSent(boolean firstMajorUpdateSent) { - this.firstMajorUpdateSent = firstMajorUpdateSent; - } - - public Thread getInterpreterThread() { - return interpreterThread; - } - - public void setInterpreterThread(Thread interpreterThread) { - this.interpreterThread = interpreterThread; - } - - public int getLastOption() { - return lastOption; - } - - public void setLastOption(int lastOption) { - this.lastOption = lastOption; - } - - public String[] getLastOptions() { - return lastOptions; - } - - public void setLastOptions(String[] lastOptions) { - this.lastOptions = lastOptions; - } - - public Interpreter getInterpreter() { - return interpreter; - } - - public void setInterpreter(Interpreter interpreter) { - this.interpreter = interpreter; - } - - public int getClick() { - return click; - } - - public void setClick(int click) { - this.click = click; - } - - public int getTempx() { - return tempx; - } - - public void setTempx(int tempx) { - this.tempx = tempx; - } - - public int getTempy() { - return tempy; - } - - public void setTempy(int tempy) { - this.tempy = tempy; - } - - public Npc getLastNpcChasingYou() { - return lastNpcChasingYou; - } - - public void setLastNpcChasingYou(Npc lastNpcChasingYou) { - this.lastNpcChasingYou = lastNpcChasingYou; - } - - public long getLastNPCChat() { - return lastNPCChat; - } - - public void setLastNPCChat(long lastNPCChat) { - this.lastNPCChat = lastNPCChat; - } - - public boolean isDoricDependency() { - return doricDependency; - } - - public void setDoricDependency(boolean doricDependency) { - this.doricDependency = doricDependency; - } - - public LinkedList getIntervals() { - return intervals; - } - - public void setIntervals(LinkedList intervals) { - this.intervals = intervals; - } - - public long getLastInterval() { - return lastInterval; - } - - public void setLastInterval(long lastInterval) { - this.lastInterval = lastInterval; - } - - public int getKillStreak() { - return killStreak; - } - - public void setKillStreak(int killStreak) { - this.killStreak = killStreak; - } - - public int tempy = -1; - public Npc lastNpcChasingYou = null; - public long lastNPCChat = GameEngine.getTime(); - public boolean doricDependency = false; - - public boolean flagCarrier = false; - - public boolean isFlagCarrier() { - return flagCarrier; - } - - public LinkedList intervals = new LinkedList(); - - public long lastInterval = 0; - - public void addInterval() { - if (lastInterval == 0) { - lastInterval = GameEngine.getTime(); - } else { - intervals.addFirst(GameEngine.getTime() - lastInterval); - if (intervals.size() > 75) { - intervals.removeLast(); - } - lastInterval = GameEngine.getTime(); - } - } - - public void setFlagCarrier(boolean flagCarrier) { - this.flagCarrier = flagCarrier; - getActionSender().sendEquipmentStats(); - } - - /** - * How long is this player muted? - */ - private long muted = 0; - - /** - * Sets the mute time. - * - * @param muted - * EPOCH time how long is the player muted. (Multiplied by 1000 - * in this) - */ - public void setMuted(long muted) { - this.muted = (muted * 1000); - } - - /** - * Is this player muted? - * - * @return - */ - public boolean isMuted() { - return (muted - GameEngine.getTime() > 0); - } - - /** - * How many days is the user muted for? - * - * @return day - */ - public int getDaysMuted() { - return (int) ((muted - GameEngine.getTime()) / 1000 / 3600 / 24); - } - /** * Methods to send packets related to actions */ @@ -308,17 +59,20 @@ public final class Player extends Mob { * The Players appearance */ private PlayerAppearance appearance; + /** * Players we have been attacked by signed login, used to check if we should * get a skull for attacking back */ private HashMap attackedBy = new HashMap(); // teleport - public boolean badClient = false; + private boolean badClient = false; /** * Bank for banked items */ private Bank bank; + + private boolean blink = false; /** * Bubbles needing displayed */ @@ -327,10 +81,12 @@ public final class Player extends Mob { * Controls if were allowed to accept appearance updates */ private boolean changingAppearance = false; + /** * Chat messages needing displayed */ private ArrayList chatMessagesNeedingDisplayed = new ArrayList(); + /** * List of chat messages to send */ @@ -339,16 +95,19 @@ public final class Player extends Mob { * The name of the client class they are connecting from */ private String className = "NOT_SET"; + private int click = -1; + private boolean clientWarn = false; /** * Combat style: 0 - all, 1 - str, 2 - att, 3 - def */ private int combatStyle = 0; private int Combo = 0; + /** * Added by Zerratar: Correct sleepword we are looking for! Case SenSitIvE */ - public String correctSleepword = ""; + private String correctSleepword = ""; /** * The current agility course object the player's on */ @@ -369,69 +128,97 @@ public final class Player extends Mob { * Should we destroy this player? */ private boolean destroy = false; + private boolean doricDependency = false; /** * DelayedEvent responsible for handling prayer drains */ private DelayedEvent drainer; - int drainerDelay = Integer.MAX_VALUE; + private int drainerDelay = Integer.MAX_VALUE; + /** * The drain rate of the prayers currently enabled */ private int drainRate = 0; + /** * If the second duel screen has been accepted */ private boolean duelConfirmAccepted = false; - public int killStreak = 0; + /** * List of items offered in the current duel */ private ArrayList duelOffer = new ArrayList(); + /** * If the first duel screen has been accepted */ private boolean duelOfferAccepted = false; + /** * Duel options */ private boolean[] duelOptions = new boolean[4]; + + private long eventcd = 0; + /** * The exp level array */ private int[] exp = new int[18]; + /** * Amount of fatigue - 0 to 100 */ private int fatigue = 0; + + /** + * Has the first major update for this player been sent? If not, we can't + * send them any minor updates. + */ + private boolean firstMajorUpdateSent = false; + + private boolean flagCarrier = false; + /** * Event to handle following */ private DelayedEvent followEvent; + /** * Who we are currently following (if anyone) */ private Mob following; + /** * Map of players on players friend list */ private TreeMap friendList = new TreeMap(); + /** * Users game settings, camera rotation preference etc */ private boolean[] gameSettings = new boolean[7]; // Why is 1 empty? + /** * The main accounts group is */ private int groupID = 1; - public boolean hasAnswered = false; + + private boolean hasAnswered = false; + /** * List of usernameHash's of players on players ignore list */ private ArrayList ignoreList = new ArrayList(); + /** * Is the player accessing their bank? */ private boolean inBank = false; + + private boolean infected = false; + /** * Quests */ @@ -439,88 +226,122 @@ public final class Player extends Mob { * Has the player been registered into the world? */ private boolean initialized = false; - public boolean inQuiz = false; + + private boolean inQuiz = false; + /** * The npc we are currently interacting with */ private Npc interactingNpc = null; + + private Interpreter interpreter = new Interpreter(); + + private Thread interpreterThread = null; + + private LinkedList intervals = new LinkedList(); + /** * Inventory to hold items */ private Inventory inventory; + private boolean invis = false; - private boolean blink = false; /** * The IO session of this player */ private IoSession ioSession; + /** * If the player is currently in a duel */ private boolean isDueling = false; - public boolean isMining = false; + private boolean isMining = false; /** * Added by Zerratar: Are we sleeping? */ - public boolean isSleeping = false; + private boolean isSleeping = false; /** * If the player is currently in a trade */ private boolean isTrading = false; + + private int killStreak = 0; + /** * List of players this player 'knows' (recieved from the client) about */ private HashMap knownPlayersAppearanceIDs = new HashMap(); - public String lastAnswer = null; + + private String lastAnswer = null; + /** * Last arrow fired */ private long lastArrow = 0; + + private long lastbanktime = 0; + /** * The last menu reply this player gave in a quest */ // - public long lastCast = GameEngine.getTime(); + private long lastCast = GameEngine.getTime(); + /** * Time of last charge spell */ private long lastCharge = 0; + + private long lastCommandUsed = GameEngine.getTime(); + /** * Last packet count time */ private long lastCount = 0; - public long lastDeath = GameEngine.getTime(); + + private long lastDeath = GameEngine.getTime(); + + private int lastdepositedamount = 0; + private int lastdepositeditem = 0; + private long lastInfected = GameEngine.getTime(); + private long lastInterval = 0; + private long lastinvtime = 0; /** * Stores the last IP address used */ private String lastIP = "0.0.0.0"; + private int lastitemposition = 0; /** * Unix time when the player last logged in */ private long lastLogin = 0; // Player(IoSession - public long lastMineTimer = 0; - public long lastPacketRecTime = GameEngine.getTime() / 1000; + private long lastMineTimer = 0; + private Npc lastNpcChasingYou = null; + private long lastNPCChat = GameEngine.getTime(); + private int lastOption = -2; + private String[] lastOptions = null; + private long lastPacketRecTime = GameEngine.getTime() / 1000; /** * Queue of last 100 packets, used for auto detection purposes */ private LinkedList lastPackets = new LinkedList(); - public long lastPacketTime = -1; + private long lastPacketTime = -1; /** * Last time a 'ping' was received */ private long lastPing = GameEngine.getTime(); - public String lastPlayerInfo2 = null; + private String lastPlayerInfo2 = null; private int lastQuestMenuReply = -1; // don't remove this. -xEnt - public int lastRandom = 0; - public long lastRange = GameEngine.getTime(); + private int lastRandom = 0; + private long lastRange = GameEngine.getTime(); /** * Time last report was sent, used to throttle reports */ private long lastReport = 0; - public long lastRun = GameEngine.getTime(); // Leave this here + private long lastRun = GameEngine.getTime(); // Leave this here private long lastSaveTime = GameEngine.getTime() + DataConversions.random(600000, 1800000); private long lastSleepTime = GameEngine.getTime(); @@ -532,12 +353,15 @@ public final class Player extends Mob { * Time of last trade/duel request */ private long lastTradeDuelRequest = 0; + private int lastwithdrawamount = 0; + private int lastwithdrawitem = 0; + private long lastwithdrawtime = 0; /** * Whether the player is currently logged in */ private boolean loggedIn = false; - public long loginTime = -1; - public int loops = 0; + private long loginTime = -1; + private int loops = 0; /** * Is the character male? */ @@ -550,6 +374,10 @@ public final class Player extends Mob { * A handler for any menu we are currently in */ private MenuHandler menuHandler = null; + /** + * How long is this player muted? + */ + private long muted = 0; // Player /** * Added by Konijn @@ -570,8 +398,8 @@ public final class Player extends Mob { /** * Thieving */ - public boolean[] npcThief = { false, false, false, false, false, false }; // Baker - // , + private boolean[] npcThief = { false, false, false, false, false, false }; // Baker + // , // Silver, // Spices, // Gem. @@ -579,6 +407,7 @@ public final class Player extends Mob { * The ID of the owning account */ private int owner = 1; + /** * Amount of packets since last count */ @@ -608,7 +437,7 @@ public final class Player extends Mob { * This player's quest stage array */ private HashMap questStage = new HashMap(); - public int quizPoints = 0; + private int quizPoints = 0; /** * Ranging event */ @@ -621,7 +450,7 @@ public final class Player extends Mob { * Is a trade/duel update required? */ private boolean requiresOfferUpdate = false; - public int sessionFlags = 0; + private int sessionFlags = 0; /** * Session keys for the players session */ @@ -638,7 +467,7 @@ public final class Player extends Mob { /** * Sleeping shit */ - String sleepword; + private String sleepword; /** * The current status of the player */ @@ -651,6 +480,8 @@ public final class Player extends Mob { * If the player has been sending suscicious packets */ private boolean suspicious = false; + private int tempx = -1; + private int tempy = -1; /** * If the second trade screen has been accepted */ @@ -701,48 +532,6 @@ public final class Player extends Mob { private int[] wornItems = new int[12]; private int wrongwords = 0; - /* - * Used for the Infected Blood world event - */ - - public boolean infected = false; - public long lastInfected = GameEngine.getTime(); - - /* - * Informs the server that the player has just used Infected Blood and activate the cooldown. - */ - - public void setLastInfected() { - lastInfected = GameEngine.getTime(); - } - - /* - * Returns the last time a player used Infected Blood. - */ - - public long lastInfected() { - return lastInfected; - } - - /* - * Is this player infected? - */ - - public boolean isInfected() { - return infected; - } - - - /* - * This method is used for the Infected Blood world event - * @author Ollie - */ - - public void setInfected() { - infected = true; - getActionSender().sendMessage("You have been afflicted by the plague."); - } - public Player(IoSession ios) { ioSession = ios; @@ -777,6 +566,18 @@ public final class Player extends Mob { ignoreList.add(id); } + public void addInterval() { + if (lastInterval == 0) { + lastInterval = GameEngine.getTime(); + } else { + intervals.addFirst(GameEngine.getTime() - lastInterval); + if (intervals.size() > 75) { + intervals.removeLast(); + } + lastInterval = GameEngine.getTime(); + } + } + public void addMessageToChatQueue(byte[] messageData) { chatQueue.add(new ChatMessage(this, messageData)); if (chatQueue.size() > 2) { @@ -835,8 +636,7 @@ public final class Player extends Mob { Instance.getDelayedEventHandler().add(skullEvent); super.setAppearnceChanged(true); } - skullEvent - .setLastRun(GameEngine.getTime() - (1200000 - timeLeft)); + skullEvent.setLastRun(GameEngine.getTime() - (1200000 - timeLeft)); } public void addToDuelOffer(InvItem item) { @@ -847,12 +647,19 @@ public final class Player extends Mob { tradeOffer.add(item); } + public boolean blink() { + return blink; + } + public boolean canLogout() { - if(this != null && this.location != null && this.location.inWilderness()) { - if(GameEngine.getTime() - this.getLastMoved() < 10000) { - getActionSender().sendMessage("You must stand peacefully in one place for 10 seconds!"); - return false; - } + if (this != null && this.location != null + && this.location.inWilderness()) { + if (GameEngine.getTime() - this.getLastMoved() < 10000) { + getActionSender() + .sendMessage( + "You must stand peacefully in one place for 10 seconds!"); + return false; + } } return !isBusy() && GameEngine.getTime() - getCombatTimer() > 10000; } @@ -868,22 +675,24 @@ public final class Player extends Mob { public boolean checkAttack(Mob mob, boolean missile) { if (mob instanceof Player) { Player victim = (Player) mob; - + if (victim.isNoPK()) { actionSender .sendMessage("You cannot attack this staff members"); return false; } - //KO9 - Konijn - check if PK'ing is disabled in this area - int i = 0; - for(Point place[] : world.getPlaces()) { - if(getLocation().inBounds(place[0].getX(), place[0].getY(), place[1].getX(), place[1].getY()) && !world.wildAttackable(i)) { - actionSender.sendMessage("You cannot attack in this area at the moment."); - return false; - } - } - + // KO9 - Konijn - check if PK'ing is disabled in this area + int i = 0; + for (Point place[] : world.getPlaces()) { + if (getLocation().inBounds(place[0].getX(), place[0].getY(), + place[1].getX(), place[1].getY()) + && !world.wildAttackable(i)) { + actionSender + .sendMessage("You cannot attack in this area at the moment."); + return false; + } + } if ((inCombat() && isDueling()) && (victim.inCombat() && victim.isDueling())) { @@ -968,6 +777,19 @@ public final class Player extends Mob { clientWarn = cw; } + public int combatStyleToIndex() { + if (getCombatStyle() == 1) { + return 2; + } + if (getCombatStyle() == 2) { + return 0; + } + if (getCombatStyle() == 3) { + return 1; + } + return -1; + } + public void destroy(boolean force) { if (destroy) { return; @@ -980,7 +802,9 @@ public final class Player extends Mob { Instance.getDelayedEventHandler().add(new DelayedEvent(this, 3000) { public void run() { - if (owner.canLogout() || (!(owner.inCombat() && owner.isDueling()) && GameEngine.getTime() - startDestroy > 600000*2)) { + if (owner.canLogout() + || (!(owner.inCombat() && owner.isDueling()) && GameEngine + .getTime() - startDestroy > 600000 * 2)) { owner.destroy(true); matchRunning = false; } @@ -1001,7 +825,9 @@ public final class Player extends Mob { Instance.getDelayedEventHandler().add(new DelayedEvent(this, 3000) { public void run() { - if (owner.canLogout() || (!(owner.inCombat() && owner.isDueling()) && GameEngine.getTime() - startDestroy > 60000)) { + if (owner.canLogout() + || (!(owner.inCombat() && owner.isDueling()) && GameEngine + .getTime() - startDestroy > 60000)) { owner.destroy(true); matchRunning = false; } @@ -1038,6 +864,10 @@ public final class Player extends Mob { return agilityCourseDef; } + public PlayerAppearance getAppearance() { + return appearance; + }// destroy + public int getArmourPoints() { int points = 1; for (InvItem item : inventory.getItems()) { @@ -1055,6 +885,14 @@ public final class Player extends Mob { return getCurStat(0); } + public HashMap getAttackedBy() { + return attackedBy; + } + + /* + * Used for the Infected Blood world event + */ + public Bank getBank() { return bank; } @@ -1063,18 +901,45 @@ public final class Player extends Mob { return bubblesNeedingDisplayed; } + /* + * Informs the server that the player has just used Infected Blood and + * activate the cooldown. + */ + public long getCastTimer() { return lastSpellCast; } + /* + * Returns the last time a player used Infected Blood. + */ + public List getChatMessagesNeedingDisplayed() { return chatMessagesNeedingDisplayed; } + /* + * Is this player infected? + */ + + public LinkedList getChatQueue() { + return chatQueue; + } + + /* + * This method is used for the Infected Blood world event + * + * @author Ollie + */ + public String getClassName() { return className; } + public int getClick() { + return click; + } + public int getCombatStyle() { return combatStyle; } @@ -1083,6 +948,10 @@ public final class Player extends Mob { return this.Combo; } + public String getCorrectSleepword() { + return correctSleepword; + } + /** * @return this player's current agility course */ @@ -1098,6 +967,10 @@ public final class Player extends Mob { return currentLogin; } + public int[] getCurStat() { + return curStat; + } + public int getCurStat(int id) { return curStat[id]; } @@ -1106,6 +979,15 @@ public final class Player extends Mob { return curStat; } + /** + * How many days is the user muted for? + * + * @return day + */ + public int getDaysMuted() { + return (int) ((muted - GameEngine.getTime()) / 1000 / 3600 / 24); + } + // piru.sytes.net public int getDaysSinceLastLogin() { long now = Calendar.getInstance().getTimeInMillis() / 1000; @@ -1124,6 +1006,14 @@ public final class Player extends Mob { return getCurStat(1); } + public DelayedEvent getDrainer() { + return drainer; + } + + public int getDrainerDelay() { + return drainerDelay; + } + public int getDrainRate() { return drainRate; } @@ -1132,6 +1022,10 @@ public final class Player extends Mob { return duelOffer; } + public boolean[] getDuelOptions() { + return duelOptions; + } + public boolean getDuelSetting(int i) { try { for (InvItem item : duelOffer) { @@ -1151,6 +1045,14 @@ public final class Player extends Mob { return duelOptions[i]; } + public long getEventCD() { + return eventcd; + } + + public int[] getExp() { + return exp; + } + public int getExp(int id) { return exp[id]; } @@ -1163,6 +1065,14 @@ public final class Player extends Mob { return fatigue; } + public DelayedEvent getFollowEvent() { + return followEvent; + } + + public Mob getFollowing() { + return following; + } + public Collection> getFriendList() { return friendList.entrySet(); } @@ -1171,6 +1081,10 @@ public final class Player extends Mob { return gameSettings[i]; } + public boolean[] getGameSettings() { + return gameSettings; + } + public int getGroupID() { return groupID; } @@ -1183,10 +1097,70 @@ public final class Player extends Mob { return ignoreList; } + public Npc getInteractingNpc() { + return interactingNpc; + } + + public Interpreter getInterpreter() { + return interpreter; + } + + public Thread getInterpreterThread() { + return interpreterThread; + } + + public LinkedList getIntervals() { + return intervals; + } + public Inventory getInventory() { return inventory; } + public IoSession getIoSession() { + return ioSession; + } + + public int getKillStreak() { + return killStreak; + } + + public HashMap getKnownPlayersAppearanceIDs() { + return knownPlayersAppearanceIDs; + } + + public String getLastAnswer() { + return lastAnswer; + } + + public long getLastArrow() { + return lastArrow; + } + + public long getLastCast() { + return lastCast; + } + + public long getLastCharge() { + return lastCharge; + } + + public long getLastCommandUsed() { + return lastCommandUsed; + } + + public long getLastCount() { + return lastCount; + } + + public long getLastDeath() { + return lastDeath; + } + + public long getLastInterval() { + return lastInterval; + } + public String getLastIP() { return lastIP; } @@ -1195,10 +1169,46 @@ public final class Player extends Mob { return lastLogin; } + public long getLastMineTimer() { + return lastMineTimer; + } + + public Npc getLastNpcChasingYou() { + return lastNpcChasingYou; + } + + public long getLastNPCChat() { + return lastNPCChat; + } + + public int getLastOption() { + return lastOption; + } + + public String[] getLastOptions() { + return lastOptions; + } + + public long getLastPacketRecTime() { + return lastPacketRecTime; + } + + public LinkedList getLastPackets() { + return lastPackets; + } + + public long getLastPacketTime() { + return lastPacketTime; + } + public long getLastPing() { return lastPing; } + public String getLastPlayerInfo2() { + return lastPlayerInfo2; + } + /** * @return this player's last quest menu reply */ @@ -1206,6 +1216,22 @@ public final class Player extends Mob { return lastQuestMenuReply; } + public int getLastRandom() { + return lastRandom; + } + + public long getLastRange() { + return lastRange; + } + + public long getLastReport() { + return lastReport; + } + + public long getLastRun() { + return lastRun; + } + public long getLastSaveTime() { return lastSaveTime; } @@ -1214,6 +1240,22 @@ public final class Player extends Mob { return lastSleepTime; } + public long getLastSpellCast() { + return lastSpellCast; + } + + public long getLastTradeDuelRequest() { + return lastTradeDuelRequest; + } + + public long getLoginTime() { + return loginTime; + } + + public int getLoops() { + return loops; + } + public int getMagicPoints() { int points = 1; for (InvItem item : inventory.getItems()) { @@ -1224,6 +1266,10 @@ public final class Player extends Mob { return points < 1 ? 1 : points; } + public int[] getMaxStat() { + return maxStat; + }// you have been granted + public int getMaxStat(int id) { return maxStat[id]; } @@ -1248,14 +1294,26 @@ public final class Player extends Mob { return npcMessagesNeedingDisplayed; } + public ArrayList getNpcsNeedingHitsUpdate() { + return npcsNeedingHitsUpdate; + } + public List getNpcsRequiringHitsUpdate() { return npcsNeedingHitsUpdate; } + public boolean[] getNpcThief() { + return npcThief; + } + public int getOwner() { return owner; } + public int getPacketCount() { + return packetCount; + } + public List getPackets() { return lastPackets; } @@ -1268,6 +1326,10 @@ public final class Player extends Mob { return appearance; } + public ArrayList getPlayersNeedingHitsUpdate() { + return playersNeedingHitsUpdate; + } + public List getPlayersRequiringAppearanceUpdate() { List needingUpdates = new ArrayList(); needingUpdates.addAll(watchedPlayers.getNewEntities()); @@ -1300,6 +1362,10 @@ public final class Player extends Mob { return privacySettings[i]; } + public boolean[] getPrivacySettings() { + return privacySettings; + } + public List getProjectilesNeedingDisplayed() { return projectilesNeedingDisplayed; } @@ -1308,6 +1374,10 @@ public final class Player extends Mob { return questPoints; } + public HashMap getQuestStage() { + return questStage; + } + public int getQuestStage(int questId) { return questStage.get(questId); } @@ -1320,6 +1390,10 @@ public final class Player extends Mob { return questStage; } + public int getQuizPoints() { + return quizPoints; + } + public int getRangeEquip() { for (InvItem item : inventory.getItems()) { if (item.isWielded() @@ -1331,6 +1405,10 @@ public final class Player extends Mob { return -1; } + public RangeEvent getRangeEvent() { + return rangeEvent; + } + public int getRangePoints() { int points = 1; for (InvItem item : inventory.getItems()) { @@ -1345,6 +1423,18 @@ public final class Player extends Mob { return ioSession; } + public int getSessionFlags() { + return sessionFlags; + } + + public int[] getSessionKeys() { + return sessionKeys; + } + + public ShortEvent getsEvent() { + return sEvent; + } + public Shop getShop() { return shop; } @@ -1361,6 +1451,10 @@ public final class Player extends Mob { return total; } + public DelayedEvent getSkullEvent() { + return skullEvent; + } + public int getSkullTime() { if (isSkulled()) { return skullEvent.timeTillNextRun(); @@ -1377,7 +1471,8 @@ public final class Player extends Mob { } public int getSpellWait() { - return DataConversions.roundUp((double) (1200 - (GameEngine.getTime() - lastSpellCast)) / 1000D); + return DataConversions + .roundUp((double) (1200 - (GameEngine.getTime() - lastSpellCast)) / 1000D); } public Action getStatus() { @@ -1388,6 +1483,18 @@ public final class Player extends Mob { return getCurStat(2); } + public long getSubscriptionExpires() { + return subscriptionExpires; + } + + public int getTempx() { + return tempx; + } + + public int getTempy() { + return tempy; + } + public ArrayList getTradeOffer() { return tradeOffer; } @@ -1450,6 +1557,10 @@ public final class Player extends Mob { return wornItems; } + public int getWrongwords() { + return wrongwords; + } + public int getWrongWords() { return wrongwords; } @@ -1466,17 +1577,9 @@ public final class Player extends Mob { } } - public int combatStyleToIndex() { - if (getCombatStyle() == 1) { - return 2; - } - if (getCombatStyle() == 2) { - return 0; - } - if (getCombatStyle() == 3) { - return 1; - } - return -1; + public void incExp(int i, int amount, boolean useFatigue) { + + incExp(i, amount, useFatigue, false); } public void incExp(int i, int amount, boolean useFatigue, boolean combat) { @@ -1513,9 +1616,11 @@ public final class Player extends Mob { exprate = Config.subExpRate; } - if(getLocation().wildernessLevel() > 1) { - if(combat) exprate = exprate*2; - if(getLocation().wildernessLevel() > 10 && !combat) exprate = exprate*2; + if (getLocation().wildernessLevel() > 1) { + if (combat) + exprate = exprate * 2; + if (getLocation().wildernessLevel() > 10 && !combat) + exprate = exprate * 2; } exp[i] += amount * exprate; @@ -1532,19 +1637,16 @@ public final class Player extends Mob { if (stat == 99) { for (Player p : world.getPlayers()) { if (p != null) { - p - .getActionSender() + p.getActionSender() .sendMessage( "#adm##pmd#@gre@**********************************#pmd##adm#"); - p - .getActionSender() + p.getActionSender() .sendMessage( "@yel@Congratulations " + this.getUsername() + " has just reached the maximum level (99)!! in " + Formulae.statArray[i]); - p - .getActionSender() + p.getActionSender() .sendMessage( "#adm##pmd#@gre@*********************************#pmd##adm#"); } @@ -1568,11 +1670,6 @@ public final class Player extends Mob { } } - public void incExp(int i, int amount, boolean useFatigue) { - - incExp(i, amount, useFatigue, false); - } - public void incMaxStat(int i, int amount) { maxStat[i] += amount; if (maxStat[i] < 0) { @@ -1584,6 +1681,19 @@ public final class Player extends Mob { setQuestPoints(getQuestPoints() + amount, true); } + public List infectedBlood() { + List playersInView = viewArea.getPlayersInView(); + List radiusPlayers = new ArrayList(); + for (Player p : playersInView) { + if ((p.getX() - getX() <= 2 || p.getX() - getY() >= -2) + && (p.getY() - getY() <= 2 || p.getY() - getY() >= -2) + && !p.isInfected()) { + radiusPlayers.add(p); + } + } + return radiusPlayers; + } + public void informOfBubble(Bubble b) { bubblesNeedingDisplayed.add(b); } @@ -1630,6 +1740,10 @@ public final class Player extends Mob { return groupID == 10; } + public boolean isBadClient() { + return badClient; + } + public boolean isChangingAppearance() { return changingAppearance; } @@ -1638,6 +1752,18 @@ public final class Player extends Mob { return GameEngine.getTime() - lastCharge < 600000; } + public boolean isClientWarn() { + return clientWarn; + } + + public boolean isDestroy() { + return destroy; + } + + public boolean isDoricDependency() { + return doricDependency; + } + public boolean isDuelConfirmAccepted() { return duelConfirmAccepted; } @@ -1650,6 +1776,14 @@ public final class Player extends Mob { return duelOfferAccepted; } + public boolean isFirstMajorUpdateSent() { + return firstMajorUpdateSent; + } + + public boolean isFlagCarrier() { + return flagCarrier; + } + public boolean isFollowing() { return followEvent != null && following != null; } @@ -1658,22 +1792,46 @@ public final class Player extends Mob { return friendList.containsKey(usernameHash); } + public boolean isHasAnswered() { + return hasAnswered; + } + public boolean isIgnoring(long usernameHash) { return ignoreList.contains(usernameHash); } + public boolean isInBank() { + return inBank; + } + + public boolean isInfected() { + return infected; + } + + public boolean isInitialized() { + return initialized; + } + + public boolean isInQuiz() { + return inQuiz; + } + public boolean isInvis() { return invis; } - public boolean blink() { - return blink; - } + public boolean isLoggedIn() { + return loggedIn; + } public boolean isMale() { return maleGender; } + public boolean isMaleGender() { + return maleGender; + } + public boolean isMining() { return isMining; } @@ -1686,14 +1844,35 @@ public final class Player extends Mob { return groupID == 7 || isAdmin(); } + /** + * Is this player muted? + * + * @return + */ + public boolean isMuted() { + return (muted - GameEngine.getTime() > 0); + } + + public boolean isNoclip() { + return noclip; + } + public boolean isNonaggro() { return nonaggro; } + public boolean isNopk() { + return nopk; + } + public boolean isNoPK() { return nopk; } + public boolean isPacketSpam() { + return packetSpam; + } + public boolean isPMod() { return groupID == 5 || isMod() || isAdmin(); } @@ -1706,10 +1885,18 @@ public final class Player extends Mob { return reconnecting; } + public boolean isRequiresOfferUpdate() { + return requiresOfferUpdate; + } + public boolean isSkulled() { return skullEvent != null; } + public boolean isSleeping() { + return isSleeping; + } + public boolean isSubscriber() { return groupID == 2; } @@ -1734,6 +1921,227 @@ public final class Player extends Mob { killedBy(mob, false); } + public void killedBy(Mob mob, boolean stake) { + if (!loggedIn) { + Logger.error(username + " not logged in, but killed!"); + return; + } + if (mob instanceof Player) { + Player player = (Player) mob; + player.getActionSender().sendMessage( + "You have defeated " + getUsername() + "!"); + player.getActionSender().sendSound("victory"); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendScreenshot(); + } + }); + Instance.getServer().getLoginConnector().getActionSender() + .logKill(player.getUsernameHash(), usernameHash, stake); + } + Mob opponent = super.getOpponent(); + if (opponent != null) { + opponent.resetCombat(CombatState.WON); + } + actionSender.sendSound("death"); + lastDeath = GameEngine.getTime(); + actionSender.sendDied(); + for (int i = 0; i < 18; i++) { + curStat[i] = maxStat[i]; + actionSender.sendStat(i); + } + + Player player = mob instanceof Player ? (Player) mob : null; + if (stake) { + if (player == null) { + Logger.println("Player is null (not dropping item): " + + this.getUsername()); + } + for (InvItem item : duelOffer) { + InvItem affectedItem = getInventory().get(item); + if (affectedItem == null) { + setSuspiciousPlayer(true); + Logger.error("Missing staked item [" + item.getID() + ", " + + item.getAmount() + "] from = " + usernameHash + + "; to = " + player.getUsernameHash() + ";"); + continue; + } + if (affectedItem.isWielded()) { + affectedItem.setWield(false); + updateWornItems( + affectedItem.getWieldableDef().getWieldPos(), + getPlayerAppearance().getSprite( + affectedItem.getWieldableDef() + .getWieldPos())); + } + getInventory().remove(item); + final long playerhash = DataConversions.usernameToHash(player + .getUsername()); + DuelLog.sendlog(playerhash, usernameHash, item.getID(), + item.getAmount(), getX(), getY(), 2); + // newItem.setdroppedby(getUsernameHash()); + world.registerItem(new Item(item.getID(), getX(), getY(), item + .getAmount(), player)); + } + } else { + inventory.sort(); + ListIterator iterator = inventory.iterator(); + if (!isSkulled()) { + for (int i = 0; i < 3 && iterator.hasNext(); i++) { + if ((iterator.next()).getDef().isStackable()) { + iterator.previous(); + break; + } + } + } + if (activatedPrayers[8] && iterator.hasNext()) { + if (((InvItem) iterator.next()).getDef().isStackable()) { + iterator.previous(); + } + } + for (int slot = 0; iterator.hasNext(); slot++) { + InvItem item = (InvItem) iterator.next(); + if (item.isWielded()) { + item.setWield(false); + updateWornItems(item.getWieldableDef().getWieldPos(), + appearance.getSprite(item.getWieldableDef() + .getWieldPos())); + } + iterator.remove(); + world.registerItem(new Item(item.getID(), getX(), getY(), item + .getAmount(), player)); + } + removeSkull(); + } + world.registerItem(new Item(20, getX(), getY(), 1, player)); + + for (int x = 0; x < activatedPrayers.length; x++) { + if (activatedPrayers[x]) { + activatedPrayers[x] = false; + } + removePrayerDrain(x); + } + actionSender.sendPrayers(); + + setLocation(Point.location(122, 647), true); + Collection allWatched = watchedPlayers.getAllEntities(); + for (Player p : allWatched) { + p.removeWatchedPlayer(this); + } + + resetPath(); + resetCombat(CombatState.LOST); + actionSender.sendWorldInfo(); + actionSender.sendEquipmentStats(); + actionSender.sendInventory(); + } + + public long lastAttackedBy(Player p) { + Long time = attackedBy.get(p.getUsernameHash()); + if (time != null) { + return time; + } + return 0; + } + + public long lastInfected() { + return lastInfected; + } + + public void load(String username, String password, int uid, + boolean reconnecting) { + try { + setID(uid); + this.password = password; + this.reconnecting = reconnecting; + usernameHash = DataConversions.usernameToHash(username); + this.username = DataConversions.hashToUsername(usernameHash); + + Instance.getServer().getLoginConnector().getActionSender() + .playerLogin(this); + Instance.getDelayedEventHandler().add( + new DelayedEvent(this, 60000) { + + private void checkStat(int statIndex) { + if (statIndex != 3 + && owner.getCurStat(statIndex) == owner + .getMaxStat(statIndex)) { + owner.getActionSender() + .sendMessage( + "Your " + + Formulae.statArray[statIndex] + + " ability has returned to normal."); + } + } + + public void run() { + for (int statIndex = 0; statIndex < 18; statIndex++) { + if (statIndex == 5) { + continue; + }// addByte(-1 + int curStat = getCurStat(statIndex); + int maxStat = getMaxStat(statIndex); + if (curStat > maxStat) { + setCurStat(statIndex, curStat - 1); + getActionSender().sendStat(statIndex); + checkStat(statIndex); + }// sendAppear + else if (curStat < maxStat) { + setCurStat(statIndex, curStat + 1); + getActionSender().sendStat(statIndex); + checkStat(statIndex); + } + } + } + }); + drainer = new DelayedEvent(this, Integer.MAX_VALUE) { + + public void run() { + int curPrayer = getCurStat(5); + if (getDrainRate() > 0 && curPrayer > 0) { + incCurStat(5, -1); + getActionSender().sendStat(5); + if (curPrayer <= 1) { + for (int prayerID = 0; prayerID < 14; prayerID++) { + setPrayer(prayerID, false); + } + setDrainRate(0); + setDelay(Integer.MAX_VALUE); + getActionSender() + .sendMessage( + "You have run out of prayer points. Return to a church to recharge"); + getActionSender().sendPrayers(); + } + } + if (drainRate != 0) { + setDelay((int) (240000 / drainRate)); + } + } + }; + Instance.getDelayedEventHandler().add(drainer); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public boolean loggedIn() { + return loggedIn; + } + + private boolean needsAppearanceUpdateFor(Player p) { + int playerServerIndex = p.getIndex(); + if (knownPlayersAppearanceIDs.containsKey(playerServerIndex)) { + int knownPlayerAppearanceID = knownPlayersAppearanceIDs + .get(playerServerIndex); + if (knownPlayerAppearanceID != p.getAppearanceID()) { + return true; + } + } else { + return true; + } + return false; + } + /** * Restricts P2P stuff in wilderness. */ @@ -1782,199 +2190,6 @@ public final class Player extends Mob { } } - public void killedBy(Mob mob, boolean stake) { - if (!loggedIn) { - Logger.error(username + " not logged in, but killed!"); - return; - } - if (mob instanceof Player) { - Player player = (Player) mob; - player.getActionSender().sendMessage("You have defeated " + getUsername() + "!"); - player.getActionSender().sendSound("victory"); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendScreenshot(); - } - }); - Instance.getServer().getLoginConnector().getActionSender().logKill(player.getUsernameHash(), usernameHash, stake); - } - Mob opponent = super.getOpponent(); - if (opponent != null) { - opponent.resetCombat(CombatState.WON); - } - actionSender.sendSound("death"); - lastDeath = GameEngine.getTime(); - actionSender.sendDied(); - for (int i = 0; i < 18; i++) { - curStat[i] = maxStat[i]; - actionSender.sendStat(i); - } - - Player player = mob instanceof Player ? (Player) mob : null; - if (stake) { - if (player == null) { - Logger.println("Player is null (not dropping item): " + this.getUsername()); - } - for (InvItem item : duelOffer) { - InvItem affectedItem = getInventory().get(item); - if (affectedItem == null) { - setSuspiciousPlayer(true); - Logger.error("Missing staked item [" + item.getID() + ", " + item.getAmount() + "] from = " + usernameHash + "; to = " + player.getUsernameHash() + ";"); - continue; - } - if (affectedItem.isWielded()) { - affectedItem.setWield(false); - updateWornItems(affectedItem.getWieldableDef().getWieldPos(), getPlayerAppearance().getSprite(affectedItem.getWieldableDef().getWieldPos())); - } - getInventory().remove(item); - final long playerhash = DataConversions.usernameToHash(player.getUsername()); - DuelLog.sendlog(playerhash, usernameHash, item.getID(), item.getAmount(), getX(), getY(), 2); - //newItem.setdroppedby(getUsernameHash()); - world.registerItem(new Item(item.getID(), getX(), getY(), item.getAmount(), player)); - } - } else { - inventory.sort(); - ListIterator iterator = inventory.iterator(); - if (!isSkulled()) { - for (int i = 0; i < 3 && iterator.hasNext(); i++) { - if ((iterator.next()).getDef().isStackable()) { - iterator.previous(); - break; - } - } - } - if (activatedPrayers[8] && iterator.hasNext()) { - if (((InvItem) iterator.next()).getDef().isStackable()) { - iterator.previous(); - } - } - for (int slot = 0; iterator.hasNext(); slot++) { - InvItem item = (InvItem) iterator.next(); - if (item.isWielded()) { - item.setWield(false); - updateWornItems(item.getWieldableDef().getWieldPos(), - appearance.getSprite(item.getWieldableDef() - .getWieldPos())); - } - iterator.remove(); - world.registerItem(new Item(item.getID(), getX(), getY(), item.getAmount(), player)); - } - removeSkull(); - } - world.registerItem(new Item(20, getX(), getY(), 1, player)); - - for (int x = 0; x < activatedPrayers.length; x++) { - if (activatedPrayers[x]) { - activatedPrayers[x] = false; - } - removePrayerDrain(x); - } - actionSender.sendPrayers(); - - setLocation(Point.location(122, 647), true); - Collection allWatched = watchedPlayers.getAllEntities(); - for (Player p : allWatched) { - p.removeWatchedPlayer(this); - } - - resetPath(); - resetCombat(CombatState.LOST); - actionSender.sendWorldInfo(); - actionSender.sendEquipmentStats(); - actionSender.sendInventory(); - } - - public long lastAttackedBy(Player p) { - Long time = attackedBy.get(p.getUsernameHash()); - if (time != null) { - return time; - } - return 0; - } - - public void load(String username, String password, int uid, boolean reconnecting) { - try { - setID(uid); - this.password = password; - this.reconnecting = reconnecting; - usernameHash = DataConversions.usernameToHash(username); - this.username = DataConversions.hashToUsername(usernameHash); - - Instance.getServer().getLoginConnector().getActionSender().playerLogin(this); - Instance.getDelayedEventHandler().add(new DelayedEvent(this, 60000) { - - private void checkStat(int statIndex) { - if (statIndex != 3 && owner.getCurStat(statIndex) == owner.getMaxStat(statIndex)) { - owner.getActionSender().sendMessage("Your " + Formulae.statArray[statIndex] + " ability has returned to normal."); - } - } - - public void run() { - for (int statIndex = 0; statIndex < 18; statIndex++) { - if (statIndex == 5) { - continue; - }// addByte(-1 - int curStat = getCurStat(statIndex); - int maxStat = getMaxStat(statIndex); - if (curStat > maxStat) { - setCurStat(statIndex, curStat - 1); - getActionSender().sendStat(statIndex); - checkStat(statIndex); - }// sendAppear - else if (curStat < maxStat) { - setCurStat(statIndex, curStat + 1); - getActionSender().sendStat(statIndex); - checkStat(statIndex); - } - } - } - }); - drainer = new DelayedEvent(this, Integer.MAX_VALUE) { - - public void run() { - int curPrayer = getCurStat(5); - if (getDrainRate() > 0 && curPrayer > 0) { - incCurStat(5, -1); - getActionSender().sendStat(5); - if (curPrayer <= 1) { - for (int prayerID = 0; prayerID < 14; prayerID++) { - setPrayer(prayerID, false); - } - setDrainRate(0); - setDelay(Integer.MAX_VALUE); - getActionSender().sendMessage("You have run out of prayer points. Return to a church to recharge"); - getActionSender().sendPrayers(); - } - } - if (drainRate != 0) { - setDelay((int) (240000 / drainRate)); - } - } - }; - Instance.getDelayedEventHandler().add(drainer); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public boolean loggedIn() { - return loggedIn; - } - - private boolean needsAppearanceUpdateFor(Player p) { - int playerServerIndex = p.getIndex(); - if (knownPlayersAppearanceIDs.containsKey(playerServerIndex)) { - int knownPlayerAppearanceID = knownPlayersAppearanceIDs - .get(playerServerIndex); - if (knownPlayerAppearanceID != p.getAppearanceID()) { - return true; - } - } else { - return true; - } - return false; - } - public void ping() { lastPing = GameEngine.getTime(); } @@ -1991,6 +2206,8 @@ public final class Player extends Mob { ignoreList.remove(id); } + // p2p + public void removePrayerDrain(int prayerID) { addPrayerDrain(prayerID); } @@ -2200,6 +2417,10 @@ public final class Player extends Mob { } } + public void setActionSender(MiscPacketBuilder actionSender) { + this.actionSender = actionSender; + } + /** * Sets this player's current agility course */ @@ -2215,10 +2436,27 @@ public final class Player extends Mob { lastArrow = GameEngine.getTime(); } + public void setAttackedBy(HashMap attackedBy) { + this.attackedBy = attackedBy; + } + + public void setBadClient(boolean badClient) { + this.badClient = badClient; + } + public void setBank(Bank b) { bank = b; } + public void setBlink(boolean arg) { + blink = arg; + } + + public void setBubblesNeedingDisplayed( + ArrayList bubblesNeedingDisplayed) { + this.bubblesNeedingDisplayed = bubblesNeedingDisplayed; + } + public void setCastTimer() { lastSpellCast = GameEngine.getTime(); } @@ -2231,10 +2469,27 @@ public final class Player extends Mob { lastCharge = GameEngine.getTime(); } + public void setChatMessagesNeedingDisplayed( + ArrayList chatMessagesNeedingDisplayed) { + this.chatMessagesNeedingDisplayed = chatMessagesNeedingDisplayed; + } + + public void setChatQueue(LinkedList chatQueue) { + this.chatQueue = chatQueue; + } + public void setClassName(String className) { this.className = className; } + public void setClick(int click) { + this.click = click; + } + + public void setClientWarn(boolean clientWarn) { + this.clientWarn = clientWarn; + } + public void setCombatStyle(int style) { combatStyle = style; } @@ -2243,6 +2498,10 @@ public final class Player extends Mob { this.Combo = combo; } + public void setCorrectSleepword(String correctSleepword) { + this.correctSleepword = correctSleepword; + } + /** * Sets this player's current course object */ @@ -2250,6 +2509,14 @@ public final class Player extends Mob { currentCourseObject = order; } + public void setCurrentIP(String currentIP) { + this.currentIP = currentIP; + } + + public void setCurrentLogin(long currentLogin) { + this.currentLogin = currentLogin; + } + public void setCurStat(int id, int lvl) { if (lvl <= 0) { lvl = 0; @@ -2257,7 +2524,25 @@ public final class Player extends Mob { curStat[id] = lvl; } - // p2p + public void setCurStat(int[] curStat) { + this.curStat = curStat; + } + + public void setDestroy(boolean destroy) { + this.destroy = destroy; + } + + public void setDoricDependency(boolean doricDependency) { + this.doricDependency = doricDependency; + } + + public void setDrainer(DelayedEvent drainer) { + this.drainer = drainer; + } + + public void setDrainerDelay(int drainerDelay) { + this.drainerDelay = drainerDelay; + } public void setDrainRate(int rate) { drainRate = rate; @@ -2271,14 +2556,26 @@ public final class Player extends Mob { isDueling = b; } + public void setDuelOffer(ArrayList duelOffer) { + this.duelOffer = duelOffer; + } + public void setDuelOfferAccepted(boolean b) { duelOfferAccepted = b; } + public void setDuelOptions(boolean[] duelOptions) { + this.duelOptions = duelOptions; + } + public void setDuelSetting(int i, boolean b) { duelOptions[i] = b; } + public void setEventCD(long eventcd) { + this.eventcd = eventcd; + } + public void setExp(int id, int lvl) { if (lvl < 0) { lvl = 0; @@ -2294,6 +2591,19 @@ public final class Player extends Mob { this.fatigue = fatigue; } + public void setFirstMajorUpdateSent(boolean firstMajorUpdateSent) { + this.firstMajorUpdateSent = firstMajorUpdateSent; + } + + public void setFlagCarrier(boolean flagCarrier) { + this.flagCarrier = flagCarrier; + getActionSender().sendEquipmentStats(); + } + + public void setFollowEvent(DelayedEvent followEvent) { + this.followEvent = followEvent; + } + public void setFollowing(Mob mob) { setFollowing(mob, 0); } @@ -2322,30 +2632,139 @@ public final class Player extends Mob { Instance.getDelayedEventHandler().add(followEvent); } + public void setFriendList(TreeMap friendList) { + this.friendList = friendList; + } + public void setGameSetting(int i, boolean b) { gameSettings[i] = b; } + public void setGameSettings(boolean[] gameSettings) { + this.gameSettings = gameSettings; + } + public void setGroupID(int id) { groupID = id; } + public void setHasAnswered(boolean hasAnswered) { + this.hasAnswered = hasAnswered; + } + public void setHits(int lvl) { setCurStat(3, lvl); } + public void setIgnoreList(ArrayList ignoreList) { + this.ignoreList = ignoreList; + } + + public void setInBank(boolean inBank) { + this.inBank = inBank; + } + + public void setInfected() { + infected = true; + getActionSender().sendMessage("You have been afflicted by the plague."); + } + public void setInitialized() { initialized = true; } + public void setInitialized(boolean initialized) { + this.initialized = initialized; + } + + public void setInQuiz(boolean inQuiz) { + this.inQuiz = inQuiz; + } + + public void setInteractingNpc(Npc interactingNpc) { + this.interactingNpc = interactingNpc; + } + + public void setInterpreter(Interpreter interpreter) { + this.interpreter = interpreter; + } + + public void setInterpreterThread(Thread interpreterThread) { + this.interpreterThread = interpreterThread; + } + + public void setIntervals(LinkedList intervals) { + this.intervals = intervals; + } + public void setInventory(Inventory i) { inventory = i; } - public void setBlink(boolean arg) { - blink = arg; - } + public void setInvis(boolean invis) { + this.invis = invis; + } + public void setIoSession(IoSession ioSession) { + this.ioSession = ioSession; + } + + public void setKillStreak(int killStreak) { + this.killStreak = killStreak; + } + + public void setKnownPlayersAppearanceIDs( + HashMap knownPlayersAppearanceIDs) { + this.knownPlayersAppearanceIDs = knownPlayersAppearanceIDs; + } + + public void setLastAnswer(String lastAnswer) { + this.lastAnswer = lastAnswer; + } + + public void setLastArrow(long lastArrow) { + this.lastArrow = lastArrow; + } + + public void setLastCast(long lastCast) { + this.lastCast = lastCast; + } + + public void setLastCharge(long lastCharge) { + this.lastCharge = lastCharge; + } + + public void setLastCommandUsed(long lastCommandUsed) { + this.lastCommandUsed = lastCommandUsed; + } + + public void setLastCount(long lastCount) { + this.lastCount = lastCount; + } + + public void setLastDeath(long lastDeath) { + this.lastDeath = lastDeath; + } + + public void setLastDepositTime(int itemid, int amount) { + this.lastbanktime = GameEngine.getTime(); + + lastdepositeditem = itemid; + lastdepositedamount = amount; + } + + public void setLastInfected() { + lastInfected = GameEngine.getTime(); + } + + public void setLastInterval(long lastInterval) { + this.lastInterval = lastInterval; + } + + public void setLastInvTime(int itemposition) { + this.lastinvtime = GameEngine.getTime(); + lastitemposition = itemposition; + } public void setLastIP(String ip) { lastIP = ip; @@ -2355,6 +2774,42 @@ public final class Player extends Mob { lastLogin = l; } + public void setLastMineTimer(long lastMineTimer) { + this.lastMineTimer = lastMineTimer; + } + + public void setLastNpcChasingYou(Npc lastNpcChasingYou) { + this.lastNpcChasingYou = lastNpcChasingYou; + } + + public void setLastNPCChat(long lastNPCChat) { + this.lastNPCChat = lastNPCChat; + } + + public void setLastOption(int lastOption) { + this.lastOption = lastOption; + } + + public void setLastOptions(String[] lastOptions) { + this.lastOptions = lastOptions; + } + + public void setLastPacketRecTime(long lastPacketRecTime) { + this.lastPacketRecTime = lastPacketRecTime; + } + + public void setLastPacketTime(long lastPacketTime) { + this.lastPacketTime = lastPacketTime; + } + + public void setLastPing(long lastPing) { + this.lastPing = lastPing; + } + + public void setLastPlayerInfo2(String lastPlayerInfo2) { + this.lastPlayerInfo2 = lastPlayerInfo2; + } + // Players Online // sendPlayers // killedby @@ -2365,10 +2820,26 @@ public final class Player extends Mob { lastQuestMenuReply = i; } + public void setLastRandom(int lastRandom) { + this.lastRandom = lastRandom; + } + + public void setLastRange(long lastRange) { + this.lastRange = lastRange; + } + public void setLastReport() { lastReport = GameEngine.getTime(); } + public void setLastReport(long lastReport) { + this.lastReport = lastReport; + } + + public void setLastRun(long lastRun) { + this.lastRun = lastRun; + } + public void setLastSaveTime(long save) { lastSaveTime = save; } @@ -2377,6 +2848,21 @@ public final class Player extends Mob { lastSleepTime = save; } + public void setLastSpellCast(long lastSpellCast) { + this.lastSpellCast = lastSpellCast; + } + + public void setLastTradeDuelRequest(long lastTradeDuelRequest) { + this.lastTradeDuelRequest = lastTradeDuelRequest; + } + + public void setLastWithdrawTime(int itemid, int amount) { + this.lastwithdrawtime = GameEngine.getTime(); + + lastwithdrawitem = itemid; + lastwithdrawamount = amount; + } + public void setLoggedIn(boolean loggedIn) { if (loggedIn) { currentLogin = GameEngine.getTime(); @@ -2384,10 +2870,22 @@ public final class Player extends Mob { this.loggedIn = loggedIn; } + public void setLoginTime(long loginTime) { + this.loginTime = loginTime; + } + + public void setLoops(int loops) { + this.loops = loops; + } + public void setMale(boolean male) { maleGender = male; } + public void setMaleGender(boolean maleGender) { + this.maleGender = maleGender; + } + public void setMaxStat(int id, int lvl) { if (lvl < 0) { lvl = 0; @@ -2395,11 +2893,30 @@ public final class Player extends Mob { maxStat[id] = lvl; } + public void setMaxStat(int[] maxStat) { + this.maxStat = maxStat; + } + public void setMenuHandler(MenuHandler menuHandler) { menuHandler.setOwner(this); this.menuHandler = menuHandler; } + public void setMining(boolean isMining) { + this.isMining = isMining; + } + + /** + * Sets the mute time. + * + * @param muted + * EPOCH time how long is the player muted. (Multiplied by 1000 + * in this) + */ + public void setMuted(long muted) { + this.muted = (muted * 1000); + } + // Added by Konijn public void setNoclip(boolean noclip) { this.noclip = noclip; @@ -2409,29 +2926,80 @@ public final class Player extends Mob { nonaggro = arg; } + public void setNonaggro(boolean nonaggro) { + this.nonaggro = nonaggro; + } + public void setnopk(boolean arg) { nopk = arg; } + public void setNopk(boolean nopk) { + this.nopk = nopk; + } + public void setNpc(Npc npc) { // Logging.debug("setNpc(npc)"); interactingNpc = npc; } + public void setNpcMessagesNeedingDisplayed( + ArrayList npcMessagesNeedingDisplayed) { + this.npcMessagesNeedingDisplayed = npcMessagesNeedingDisplayed; + } + + public void setNpcsNeedingHitsUpdate(ArrayList npcsNeedingHitsUpdate) { + this.npcsNeedingHitsUpdate = npcsNeedingHitsUpdate; + } + + public void setNpcThief(boolean[] npcThief) { + this.npcThief = npcThief; + } + public void setOwner(int owner) { this.owner = owner; } + public void setPacketCount(int packetCount) { + this.packetCount = packetCount; + } + + public void setPacketSpam(boolean packetSpam) { + this.packetSpam = packetSpam; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setPlayersNeedingHitsUpdate( + ArrayList playersNeedingHitsUpdate) { + this.playersNeedingHitsUpdate = playersNeedingHitsUpdate; + } + public void setPrivacySetting(int i, boolean b) { privacySettings[i] = b; } + public void setPrivacySettings(boolean[] privacySettings) { + this.privacySettings = privacySettings; + } + + public void setProjectilesNeedingDisplayed( + ArrayList projectilesNeedingDisplayed) { + this.projectilesNeedingDisplayed = projectilesNeedingDisplayed; + } + public void setQuestMenuHandler(MenuHandler menuHandler) { this.menuHandler = menuHandler; menuHandler.setOwner(this); actionSender.sendMenu(menuHandler.getOptions()); } + public void setQuestPoints(int questPoints) { + this.questPoints = questPoints; + } + public void setQuestPoints(int newquestPoints, boolean save) { int old = questPoints; questPoints = newquestPoints; @@ -2447,6 +3015,10 @@ public final class Player extends Mob { } } + public void setQuestStage(HashMap questStage) { + this.questStage = questStage; + } + public void setQuestStage(int qid, int stage) { setQuestStage(qid, stage, true); } @@ -2486,6 +3058,10 @@ public final class Player extends Mob { setQuestStage(quest.getUniqueID(), stage, true); } + public void setQuizPoints(int quizPoints) { + this.quizPoints = quizPoints; + } + // 335000 public void setRangeEvent(RangeEvent event) { if (isRanging()) { @@ -2497,6 +3073,10 @@ public final class Player extends Mob { Instance.getDelayedEventHandler().add(rangeEvent); } + public void setReconnecting(boolean reconnecting) { + this.reconnecting = reconnecting; + } + public void setRequiresOfferUpdate(boolean b) { requiresOfferUpdate = b; } @@ -2506,17 +3086,29 @@ public final class Player extends Mob { sessionKeys[3] = (int) key; } + public void setSessionFlags(int sessionFlags) { + this.sessionFlags = sessionFlags; + } + public boolean setSessionKeys(int[] keys) { boolean valid = (sessionKeys[2] == keys[2] && sessionKeys[3] == keys[3]); sessionKeys = keys; return valid; } + public void setsEvent(ShortEvent sEvent) { + this.sEvent = sEvent; + } + public void setSEvent(ShortEvent sEvent) { this.sEvent = sEvent; Instance.getDelayedEventHandler().add(sEvent); } + public void setShop(Shop shop) { + this.shop = shop; + } + public void setSkillLoops(int arg) { loops = arg; } @@ -2527,15 +3119,15 @@ public final class Player extends Mob { addSkull(1200000); } } - public boolean shouldRangePass() { - int percent = (int)((this.getMaxStat(5)-40) * 0.6); - percent += 60; - if(percent > 100) percent = 100; - if(DataConversions.random(0, 100) < percent) - return false; - else - return true; + + public void setSkullEvent(DelayedEvent skullEvent) { + this.skullEvent = skullEvent; } + + public void setSleeping(boolean isSleeping) { + this.isSleeping = isSleeping; + } + public void setSleepword(String sleepword) { this.sleepword = sleepword; } @@ -2556,24 +3148,46 @@ public final class Player extends Mob { subscriptionExpires = expires; }// 240000 / drainRate + public void setSuspicious(boolean suspicious) { + this.suspicious = suspicious; + } + public void setSuspiciousPlayer(boolean suspicious) { String stacktrace = ""; Exception e = new Exception(); StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw, true); - e.printStackTrace(pw); - pw.flush(); - sw.flush(); - stacktrace = sw.toString(); + PrintWriter pw = new PrintWriter(sw, true); + e.printStackTrace(pw); + pw.flush(); + sw.flush(); + stacktrace = sw.toString(); this.suspicious = suspicious; - Logger.println(this.getUsername() + " was set suspicious! Stacktrace: \n" + stacktrace); - Logger.systemerr(this.getUsername() + " was set suspicious! Stacktrace: \n" + stacktrace); - world.addEntryToSnapshots(new Activity(this.getUsername(),this.getUsername() + " was set suspicious! Stacktrace: \n" + stacktrace)); + Logger.println(this.getUsername() + + " was set suspicious! Stacktrace: \n" + stacktrace); + Logger.systemerr(this.getUsername() + + " was set suspicious! Stacktrace: \n" + stacktrace); + world.addEntryToSnapshots(new Activity(this.getUsername(), this + .getUsername() + + " was set suspicious! Stacktrace: \n" + + stacktrace)); } + + public void setTempx(int tempx) { + this.tempx = tempx; + } + + public void setTempy(int tempy) { + this.tempy = tempy; + } + public void setTradeConfirmAccepted(boolean b) { tradeConfirmAccepted = b; } + public void setTradeOffer(ArrayList tradeOffer) { + this.tradeOffer = tradeOffer; + } + public void setTradeOfferAccepted(boolean b) { tradeOfferAccepted = b; } @@ -2582,6 +3196,32 @@ public final class Player extends Mob { isTrading = b; } + public void setUsername(String username) { + this.username = username; + } + + public void setUsernameHash(long usernameHash) { + this.usernameHash = usernameHash; + } + + public void setWatchedItems(StatefulEntityCollection watchedItems) { + this.watchedItems = watchedItems; + } + + public void setWatchedNpcs(StatefulEntityCollection watchedNpcs) { + this.watchedNpcs = watchedNpcs; + } + + public void setWatchedObjects( + StatefulEntityCollection watchedObjects) { + this.watchedObjects = watchedObjects; + } + + public void setWatchedPlayers( + StatefulEntityCollection watchedPlayers) { + this.watchedPlayers = watchedPlayers; + } + public void setWishToDuel(Player p) { wishToDuel = p; } @@ -2595,10 +3235,51 @@ public final class Player extends Mob { super.ourAppearanceChanged = true; } + public void setWrongwords(int wrongwords) { + this.wrongwords = wrongwords; + } + public void setWrongWords() { wrongwords += 1; } + public boolean shouldRangePass() { + int percent = (int) ((this.getMaxStat(5) - 40) * 0.6); + percent += 60; + if (percent > 100) + percent = 100; + if (DataConversions.random(0, 100) < percent) + return false; + else + return true; + } + + public boolean shouldThrowDepositError(int itemid, int amount) { + if (GameEngine.getTime() - lastbanktime < 100 + && lastdepositeditem == itemid && lastdepositedamount == amount) + return false; + if (amount == 0) + return false; + return true; + } + + public boolean shouldThrowInvError(int itemposition) { + if (GameEngine.getTime() - lastinvtime < 100 + && lastitemposition == itemposition) + return false; + + return true; + } + + public boolean shouldThrowWithdrawError(int itemid, int amount) { + if (GameEngine.getTime() - lastwithdrawtime < 100 + && lastwithdrawitem == itemid && lastwithdrawamount == amount) + return false; + if (amount == 0) + return false; + return true; + } + public void teleport(int x, int y, boolean bubble) { Mob opponent = super.getOpponent(); if (inCombat()) { @@ -2635,6 +3316,11 @@ public final class Player extends Mob { actionSender.sendWorldInfo(); } + @Override + public String toString() { + return "[Player:" + username + "]"; + } + public boolean tradeDuelThrottling() { long now = GameEngine.getTime(); if (now - lastTradeDuelRequest > 1000) { @@ -2701,607 +3387,14 @@ public final class Player extends Mob { } } - public List infectedBlood() { - List playersInView = viewArea.getPlayersInView(); - List radiusPlayers = new ArrayList(); - for (Player p : playersInView) { - if((p.getX() - getX() <= 2 || p.getX() - getY() >= -2) && (p.getY() - getY() <= 2 || p.getY() - getY() >= -2) && !p.isInfected()) { - radiusPlayers.add(p); - } - } - return radiusPlayers; - } - public void updateWornItems(int index, int id) { wornItems[index] = id; super.ourAppearanceChanged = true; } - public HashMap getAttackedBy() { - return attackedBy; - } - - public void setAttackedBy(HashMap attackedBy) { - this.attackedBy = attackedBy; - } - - public boolean isBadClient() { - return badClient; - } - - public void setBadClient(boolean badClient) { - this.badClient = badClient; - } - - public LinkedList getChatQueue() { - return chatQueue; - } - - public void setChatQueue(LinkedList chatQueue) { - this.chatQueue = chatQueue; - } - - public boolean isClientWarn() { - return clientWarn; - } - - public void setClientWarn(boolean clientWarn) { - this.clientWarn = clientWarn; - } - - public String getCorrectSleepword() { - return correctSleepword; - } - - public void setCorrectSleepword(String correctSleepword) { - this.correctSleepword = correctSleepword; - } - - public int[] getCurStat() { - return curStat; - } - - public void setCurStat(int[] curStat) { - this.curStat = curStat; - } - - public boolean isDestroy() { - return destroy; - } - - public void setDestroy(boolean destroy) { - this.destroy = destroy; - } - - public DelayedEvent getDrainer() { - return drainer; - } - - public void setDrainer(DelayedEvent drainer) { - this.drainer = drainer; - } - - public int getDrainerDelay() { - return drainerDelay; - } - - public void setDrainerDelay(int drainerDelay) { - this.drainerDelay = drainerDelay; - } - - public boolean[] getDuelOptions() { - return duelOptions; - } - - public void setDuelOptions(boolean[] duelOptions) { - this.duelOptions = duelOptions; - } - - public DelayedEvent getFollowEvent() { - return followEvent; - } - - public void setFollowEvent(DelayedEvent followEvent) { - this.followEvent = followEvent; - } - - public boolean[] getGameSettings() { - return gameSettings; - } - - public void setGameSettings(boolean[] gameSettings) { - this.gameSettings = gameSettings; - } - - public boolean isHasAnswered() { - return hasAnswered; - } - - public void setHasAnswered(boolean hasAnswered) { - this.hasAnswered = hasAnswered; - } - - public boolean isInBank() { - return inBank; - } - - public void setInBank(boolean inBank) { - this.inBank = inBank; - } - - public boolean isInitialized() { - return initialized; - } - - public void setInitialized(boolean initialized) { - this.initialized = initialized; - } - - public boolean isInQuiz() { - return inQuiz; - } - - public void setInQuiz(boolean inQuiz) { - this.inQuiz = inQuiz; - } - - public Npc getInteractingNpc() { - return interactingNpc; - } - - public void setInteractingNpc(Npc interactingNpc) { - this.interactingNpc = interactingNpc; - } - - public IoSession getIoSession() { - return ioSession; - } - - public void setIoSession(IoSession ioSession) { - this.ioSession = ioSession; - } - - public boolean isSleeping() { - return isSleeping; - } - - public void setSleeping(boolean isSleeping) { - this.isSleeping = isSleeping; - } - - public HashMap getKnownPlayersAppearanceIDs() { - return knownPlayersAppearanceIDs; - } - - public void setKnownPlayersAppearanceIDs( - HashMap knownPlayersAppearanceIDs) { - this.knownPlayersAppearanceIDs = knownPlayersAppearanceIDs; - } - - public String getLastAnswer() { - return lastAnswer; - } - - public void setLastAnswer(String lastAnswer) { - this.lastAnswer = lastAnswer; - } - - public long getLastArrow() { - return lastArrow; - } - - public void setLastArrow(long lastArrow) { - this.lastArrow = lastArrow; - } - - public long getLastCast() { - return lastCast; - } - - public void setLastCast(long lastCast) { - this.lastCast = lastCast; - } - - public long getLastCharge() { - return lastCharge; - } - - public void setLastCharge(long lastCharge) { - this.lastCharge = lastCharge; - } - - public long getLastCount() { - return lastCount; - } - - public void setLastCount(long lastCount) { - this.lastCount = lastCount; - } - - public long getLastDeath() { - return lastDeath; - } - - public void setLastDeath(long lastDeath) { - this.lastDeath = lastDeath; - } - - public long getLastMineTimer() { - return lastMineTimer; - } - - public void setLastMineTimer(long lastMineTimer) { - this.lastMineTimer = lastMineTimer; - } - - public long getLastPacketRecTime() { - return lastPacketRecTime; - } - - public void setLastPacketRecTime(long lastPacketRecTime) { - this.lastPacketRecTime = lastPacketRecTime; - } - - public LinkedList getLastPackets() { - return lastPackets; - } - - - public long getLastPacketTime() { - return lastPacketTime; - } - - public void setLastPacketTime(long lastPacketTime) { - this.lastPacketTime = lastPacketTime; - } - - public String getLastPlayerInfo2() { - return lastPlayerInfo2; - } - - public void setLastPlayerInfo2(String lastPlayerInfo2) { - this.lastPlayerInfo2 = lastPlayerInfo2; - } - - public int getLastRandom() { - return lastRandom; - } - - public void setLastRandom(int lastRandom) { - this.lastRandom = lastRandom; - } - - public long getLastRange() { - return lastRange; - } - - public void setLastRange(long lastRange) { - this.lastRange = lastRange; - } - - public long getLastReport() { - return lastReport; - } - - public void setLastReport(long lastReport) { - this.lastReport = lastReport; - } - - public long getLastRun() { - return lastRun; - } - - public void setLastRun(long lastRun) { - this.lastRun = lastRun; - } - - public long getLastSpellCast() { - return lastSpellCast; - } - - public void setLastSpellCast(long lastSpellCast) { - this.lastSpellCast = lastSpellCast; - } - - public long getLastTradeDuelRequest() { - return lastTradeDuelRequest; - } - - public void setLastTradeDuelRequest(long lastTradeDuelRequest) { - this.lastTradeDuelRequest = lastTradeDuelRequest; - } - - public long getLoginTime() { - return loginTime; - } - - public void setLoginTime(long loginTime) { - this.loginTime = loginTime; - } - - public int getLoops() { - return loops; - } - - public void setLoops(int loops) { - this.loops = loops; - } - - public boolean isMaleGender() { - return maleGender; - } - - public void setMaleGender(boolean maleGender) { - this.maleGender = maleGender; - } - - public int[] getMaxStat() { - return maxStat; - }// you have been granted - - public void setMaxStat(int[] maxStat) { - this.maxStat = maxStat; - } - - public boolean isNopk() { - return nopk; - } - - public void setNopk(boolean nopk) { - this.nopk = nopk; - } - - public ArrayList getNpcsNeedingHitsUpdate() { - return npcsNeedingHitsUpdate; - } - - public void setNpcsNeedingHitsUpdate(ArrayList npcsNeedingHitsUpdate) { - this.npcsNeedingHitsUpdate = npcsNeedingHitsUpdate; - } - - public boolean[] getNpcThief() { - return npcThief; - } - - public void setNpcThief(boolean[] npcThief) { - this.npcThief = npcThief; - } - - public int getPacketCount() { - return packetCount; - } - - public void setPacketCount(int packetCount) { - this.packetCount = packetCount; - } - - public boolean isPacketSpam() { - return packetSpam; - } - - public void setPacketSpam(boolean packetSpam) { - this.packetSpam = packetSpam; - } - - public ArrayList getPlayersNeedingHitsUpdate() { - return playersNeedingHitsUpdate; - } - - public void setPlayersNeedingHitsUpdate( - ArrayList playersNeedingHitsUpdate) { - this.playersNeedingHitsUpdate = playersNeedingHitsUpdate; - } - - public boolean[] getPrivacySettings() { - return privacySettings; - } - - public void setPrivacySettings(boolean[] privacySettings) { - this.privacySettings = privacySettings; - } - - public HashMap getQuestStage() { - return questStage; - } - - public void setQuestStage(HashMap questStage) { - this.questStage = questStage; - } - - public int getQuizPoints() { - return quizPoints; - } - - public void setQuizPoints(int quizPoints) { - this.quizPoints = quizPoints; - } - - public int getSessionFlags() { - return sessionFlags; - } - - public void setSessionFlags(int sessionFlags) { - this.sessionFlags = sessionFlags; - } - - public ShortEvent getsEvent() { - return sEvent; - } - - public void setsEvent(ShortEvent sEvent) { - this.sEvent = sEvent; - } - - public DelayedEvent getSkullEvent() { - return skullEvent; - } - - public void setSkullEvent(DelayedEvent skullEvent) { - this.skullEvent = skullEvent; - } - - public int getWrongwords() { - return wrongwords; - } - - public void setWrongwords(int wrongwords) { - this.wrongwords = wrongwords; - } - - public PlayerAppearance getAppearance() { - return appearance; - }// destroy - - public int[] getExp() { - return exp; - } - - public Mob getFollowing() { - return following; - } - - public boolean isLoggedIn() { - return loggedIn; - } - - public boolean isNoclip() { - return noclip; - } - - public RangeEvent getRangeEvent() { - return rangeEvent; - } - - public boolean isRequiresOfferUpdate() { - return requiresOfferUpdate; - } - - public int[] getSessionKeys() { - return sessionKeys; - } - - public long getSubscriptionExpires() { - return subscriptionExpires; - } - - public void setActionSender(MiscPacketBuilder actionSender) { - this.actionSender = actionSender; - } - - public void setBubblesNeedingDisplayed( - ArrayList bubblesNeedingDisplayed) { - this.bubblesNeedingDisplayed = bubblesNeedingDisplayed; - } - - public void setChatMessagesNeedingDisplayed( - ArrayList chatMessagesNeedingDisplayed) { - this.chatMessagesNeedingDisplayed = chatMessagesNeedingDisplayed; - } - - public void setCurrentIP(String currentIP) { - this.currentIP = currentIP; - } - - public void setCurrentLogin(long currentLogin) { - this.currentLogin = currentLogin; - } - - public void setDuelOffer(ArrayList duelOffer) { - this.duelOffer = duelOffer; - } - - public void setFriendList(TreeMap friendList) { - this.friendList = friendList; - } - - public void setIgnoreList(ArrayList ignoreList) { - this.ignoreList = ignoreList; - } - - public void setInvis(boolean invis) { - this.invis = invis; - } - - public void setMining(boolean isMining) { - this.isMining = isMining; - } - - public void setLastPing(long lastPing) { - this.lastPing = lastPing; - } - - public void setNonaggro(boolean nonaggro) { - this.nonaggro = nonaggro; - } - - public void setNpcMessagesNeedingDisplayed( - ArrayList npcMessagesNeedingDisplayed) { - this.npcMessagesNeedingDisplayed = npcMessagesNeedingDisplayed; - } - - public void setPassword(String password) { - this.password = password; - } - - public void setProjectilesNeedingDisplayed( - ArrayList projectilesNeedingDisplayed) { - this.projectilesNeedingDisplayed = projectilesNeedingDisplayed; - } - - public void setQuestPoints(int questPoints) { - this.questPoints = questPoints; - } - - public void setReconnecting(boolean reconnecting) { - this.reconnecting = reconnecting; - } - - public void setShop(Shop shop) { - this.shop = shop; - } - - public void setSuspicious(boolean suspicious) { - this.suspicious = suspicious; - } - - public void setTradeOffer(ArrayList tradeOffer) { - this.tradeOffer = tradeOffer; - } - - public void setUsername(String username) { - this.username = username; - } - - public void setUsernameHash(long usernameHash) { - this.usernameHash = usernameHash; - } - - public void setWatchedItems(StatefulEntityCollection watchedItems) { - this.watchedItems = watchedItems; - } - - public void setWatchedNpcs(StatefulEntityCollection watchedNpcs) { - this.watchedNpcs = watchedNpcs; - } - - public void setWatchedObjects( - StatefulEntityCollection watchedObjects) { - this.watchedObjects = watchedObjects; - } - - public void setWatchedPlayers( - StatefulEntityCollection watchedPlayers) { - this.watchedPlayers = watchedPlayers; - } - public boolean withinRange(Entity e) { int xDiff = location.getX() - e.getLocation().getX(); int yDiff = location.getY() - e.getLocation().getY(); return xDiff <= 16 && xDiff >= -15 && yDiff <= 16 && yDiff >= -15; } - - @Override - public String toString() { - return "[Player:" + username + "]"; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/PlayerAppearance.java b/GameServer/src/org/moparscape/msc/gs/model/PlayerAppearance.java index ae54de0..b62b826 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/PlayerAppearance.java +++ b/GameServer/src/org/moparscape/msc/gs/model/PlayerAppearance.java @@ -5,67 +5,71 @@ import org.moparscape.msc.gs.tools.DataConversions; public class PlayerAppearance { - private int body; - private byte hairColour; - private int head; - private byte skinColour; + private int body; + private byte hairColour; + private int head; + private byte skinColour; - private byte topColour; - private byte trouserColour; + private byte topColour; + private byte trouserColour; - public PlayerAppearance(int hairColour, int topColour, int trouserColour, int skinColour, int head, int body) { - this.hairColour = (byte) hairColour; - this.topColour = (byte) topColour; - this.trouserColour = (byte) trouserColour; - this.skinColour = (byte) skinColour; - this.head = head; - this.body = body; - } - - public byte getHairColour() { - return hairColour; - } - - public byte getSkinColour() { - return skinColour; - } - - public int getSprite(int pos) { - switch (pos) { - case 0: - return head; - case 1: - return body; - case 2: - return 3; - default: - return 0; + public PlayerAppearance(int hairColour, int topColour, int trouserColour, + int skinColour, int head, int body) { + this.hairColour = (byte) hairColour; + this.topColour = (byte) topColour; + this.trouserColour = (byte) trouserColour; + this.skinColour = (byte) skinColour; + this.head = head; + this.body = body; } - } - public int[] getSprites() { - return new int[] { head, body, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - } - - public byte getTopColour() { - return topColour; - } - - public byte getTrouserColour() { - return trouserColour; - } - - public boolean isValid() { - if (!DataConversions.inArray(Formulae.headSprites, head) || !DataConversions.inArray(Formulae.bodySprites, body)) { - return false; + public byte getHairColour() { + return hairColour; } - if (hairColour < 0 || topColour < 0 || trouserColour < 0 || skinColour < 0) { - return false; + + public byte getSkinColour() { + return skinColour; } - if (hairColour > 9 || topColour > 14 || trouserColour > 14 || skinColour > 4) { - return false; + + public int getSprite(int pos) { + switch (pos) { + case 0: + return head; + case 1: + return body; + case 2: + return 3; + default: + return 0; + } + } + + public int[] getSprites() { + return new int[] { head, body, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + } + + public byte getTopColour() { + return topColour; + } + + public byte getTrouserColour() { + return trouserColour; + } + + public boolean isValid() { + if (!DataConversions.inArray(Formulae.headSprites, head) + || !DataConversions.inArray(Formulae.bodySprites, body)) { + return false; + } + if (hairColour < 0 || topColour < 0 || trouserColour < 0 + || skinColour < 0) { + return false; + } + if (hairColour > 9 || topColour > 14 || trouserColour > 14 + || skinColour > 4) { + return false; + } + return true; } - return true; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Point.java b/GameServer/src/org/moparscape/msc/gs/model/Point.java index b481b8e..2438287 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Point.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Point.java @@ -1,101 +1,106 @@ package org.moparscape.msc.gs.model; import org.moparscape.msc.config.Formulae; -import org.moparscape.msc.gs.Instance; public class Point { - public static Point location(int x, int y) { - if (x < 0 || y < 0) { - throw new IllegalArgumentException("Point may not contain non negative values x:" + x + " y:" + y); + public static Point location(int x, int y) { + if (x < 0 || y < 0) { + throw new IllegalArgumentException( + "Point may not contain non negative values x:" + x + " y:" + + y); + } + return new Point(x, y); } - return new Point(x, y); - } - protected int x; + protected int x; - protected int y; + protected int y; - protected Point() { - } - - public Point(int x, int y) { - this.x = x; - this.y = y; - } - - public final boolean equals(Object o) { - if (o instanceof Point) { - return this.x == ((Point) o).x && this.y == ((Point) o).y; + protected Point() { } - return false; - } - public String getDescription() { - if (inModRoom()) { - return "Mod Room"; + public Point(int x, int y) { + this.x = x; + this.y = y; } - int wild = wildernessLevel(); - if (wild > 0) { - return "Wilderness lvl-" + wild; - } - return "Unknown"; - } - public final int getX() { - return x; - } - - public final int getY() { - return y; - } - - public int hashCode() { - return x << 16 | y; - } - - public boolean inBounds(int x1, int y1, int x2, int y2) { - return x >= x1 && x <= x2 && y >= y1 && y <= y2; - } - - public boolean inModRoom() { - return inBounds(64, 1639, 80, 1643); - } - - public boolean inWilderness() { - return wildernessLevel() > 0; - } - - public String toString() { - return "(" + x + ", " + y + ")"; - } - public int wildernessLevel() { - int wild = 2203 - (y + (1776 - (944 * Formulae.getHeight(this)))); - if (x + 2304 >= 2640) { - wild = -50; - } - if (wild > 0) { - return 1 + wild / 6; - } - return 0; - } - - public static boolean inWilderness(int x, int y) { - int wild = 2203 - (y + (1776 - (944 * (int) (y / 944)))); - if (x + 2304 >= 2640) { - wild = -50; - } - if (wild > 0) { - return (1 + wild / 6) >= 1; - } - return false; - } - - public boolean atAltar() { - if(x >= 321 && y >= 183 && x <= 334 && y <= 197) return true; + public final boolean equals(Object o) { + if (o instanceof Point) { + return this.x == ((Point) o).x && this.y == ((Point) o).y; + } return false; } + + public String getDescription() { + if (inModRoom()) { + return "Mod Room"; + } + int wild = wildernessLevel(); + if (wild > 0) { + return "Wilderness lvl-" + wild; + } + return "Unknown"; + } + + public final int getX() { + return x; + } + + public final int getY() { + return y; + } + + public int hashCode() { + return x << 16 | y; + } + + public boolean inBounds(int x1, int y1, int x2, int y2) { + return x >= x1 && x <= x2 && y >= y1 && y <= y2; + } + + public boolean inModRoom() { + return inBounds(64, 1639, 80, 1643); + } + + public boolean inWilderness() { + return wildernessLevel() > 0; + } + + public String toString() { + return "(" + x + ", " + y + ")"; + } + + public int wildernessLevel() { + int wild = 2203 - (y + (1776 - (944 * Formulae.getHeight(this)))); + if (x + 2304 >= 2640) { + wild = -50; + } + if (wild > 0) { + return 1 + wild / 6; + } + return 0; + } + + public static boolean inWilderness(int x, int y) { + int wild = 2203 - (y + (1776 - (944 * (int) (y / 944)))); + if (x + 2304 >= 2640) { + wild = -50; + } + if (wild > 0) { + return (1 + wild / 6) >= 1; + } + return false; + } + + public boolean atAltar() { + if (x >= 321 && y >= 183 && x <= 334 && y <= 197) + return true; + return false; + } + public boolean nearAltar() { - if(x >= 321-4 && y >= 183-4 && x <= 334+4 && y <= 193+4) return true; + if (x >= 321 - 4 && y >= 183 - 4 && x <= 334 + 4 && y <= 193 + 4) + return true; return false; } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Projectile.java b/GameServer/src/org/moparscape/msc/gs/model/Projectile.java index 016b2fc..5a28a67 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Projectile.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Projectile.java @@ -1,35 +1,35 @@ package org.moparscape.msc.gs.model; public class Projectile { - /** - * Who fired the projectile - */ - private Mob caster; - /** - * The type: 1 = magic, 2 = ranged - */ - private int type; - /** - * Who the projectile is being fired at - */ - private Mob victim; + /** + * Who fired the projectile + */ + private Mob caster; + /** + * The type: 1 = magic, 2 = ranged + */ + private int type; + /** + * Who the projectile is being fired at + */ + private Mob victim; - public Projectile(Mob caster, Mob victim, int type) { - this.caster = caster; - this.victim = victim; - this.type = type; - } + public Projectile(Mob caster, Mob victim, int type) { + this.caster = caster; + this.victim = victim; + this.type = type; + } - public Mob getCaster() { - return caster; - } + public Mob getCaster() { + return caster; + } - public int getType() { - return type; - } + public int getType() { + return type; + } - public Mob getVictim() { - return victim; - } + public Mob getVictim() { + return victim; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Script.java b/GameServer/src/org/moparscape/msc/gs/model/Script.java index c3a59f4..5f91ff6 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Script.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Script.java @@ -12,365 +12,369 @@ import bsh.EvalError; public class Script { - public Player player; - public Npc npc; + public Player player; + public Npc npc; - /** - * DONT TOUCH THIS. Sets the Player and Npc instances for reach when - * scripting. - * - * @param p - * - the player - * @param n - * - the affected npc - */ - public Script(Player p, Npc n) { - player = p; - npc = n; + /** + * DONT TOUCH THIS. Sets the Player and Npc instances for reach when + * scripting. + * + * @param p + * - the player + * @param n + * - the affected npc + */ + public Script(Player p, Npc n) { + player = p; + npc = n; - try { - player.interpreter.getNameSpace().importObject(this); - player.interpreter.source(World.getWorld().npcScripts.get(npc.getID())); - player.interpreter.getNameSpace().clear(); - } catch (EvalError e) { - error(); - //e.printStackTrace(); - } catch (FileNotFoundException e) { - error(); - //e.printStackTrace(); - } catch (IOException e) { - error(); - //e.printStackTrace(); - } catch (ConcurrentModificationException cme) { - Logger.println("got cme"); - } catch (Exception e) { - error(); - //e.printStackTrace(); - } - - } - - /** - * Unblock the NPC/Player if something unhandled happens. - */ - private void error() { - npc.unblock(); - player.setBusy(false); - } - - /** - * Sends a normal Message to the player - * - * @param msg - * - the message - */ - public void SendMessage(String msg) { - player.getActionSender().sendMessage(msg); - } - - /** - * Sends a large black box Message to the player - * - * @param msg - * - the message - */ - public void SendBoxMessage(String msg) { - player.getActionSender().sendAlert(msg, true); - } - - /** - * Sends a medium or large black box message - * - * @param msg - * - the message - * @param big - * - true if large box, false if medium - */ - public void SendBoxMessage(String msg, boolean big) { - player.getActionSender().sendAlert(msg, big); - } - - /** - * Add item(s) to the players inventory (This is setup to handle the amount - * even when the item is non stackable) - * - * @param id - * - the item's ID - * @param amount - * - the amount given - */ - public void AddItem(int id, int amount) { - InvItem item = new InvItem(id, amount); - if (item.getDef().stackable) { - player.getInventory().add(new InvItem(id, amount)); - } else { - for (int i = 0; i < amount; i++) { - player.getInventory().add(new InvItem(id)); - } - } - player.getActionSender().sendInventory(); - } - - /** - * Says something to the NPC your talking too - * - * @param msg - * - the message - */ - public void PlayerTalk(String msg) { - player.informOfChatMessage(new ChatMessage(player, msg, npc)); - Wait(2000); - - } - - /** - * the Npc your interacting with says something to you - * - * @param msg - * - the message - */ - public void NpcTalk(String msg) { - player.informOfNpcMessage(new ChatMessage(npc, msg, player)); - Wait(2000); - } - - /** - * Sleeps for the default delay (2000) - */ - public void Wait() { - Wait(2000); - } - - /** - * Wait's the delay until the next line is executed - */ - public void Wait(int ms) { - try { - Thread.currentThread().sleep(ms); - } catch (InterruptedException e) { - SendMessage(e.getMessage()); - } - } - - /** - * AUTO EXPANDING arrays (String...) with BeanShell do not yet work. I know - * this looks dodgey, but easy-scripting support comes first. Currently set - * for 7 options max. - */ - public int PickOption(String s1, String s2, String s3, String s4, String s5, String s6, String s7) { - return PickOption(new String[] { s1, s2, s3, s4, s5, s6, s7 }); - } - - public int PickOption(String s1, String s2, String s3, String s4, String s5, String s6) { - return PickOption(new String[] { s1, s2, s3, s4, s5, s6 }); - } - - public int PickOption(String s1, String s2, String s3, String s4, String s5) { - return PickOption(new String[] { s1, s2, s3, s4, s5 }); - } - - public int PickOption(String s1, String s2, String s3, String s4) { - return PickOption(new String[] { s1, s2, s3, s4 }); - } - - public int PickOption(String s1, String s2, String s3) { - return PickOption(new String[] { s1, s2, s3 }); - } - - public int PickOption(String s1, String s2) { - return PickOption(new String[] { s1, s2 }); - } - - public int PickOption(String s1) { - return PickOption(new String[] { s1 }); - } - - /** - * Sends a question menu, waits for the response. - * - * @param strs - * - array of options - * @return the option number - */ - public int PickOption(String[] strs) { - try { - long time = GameEngine.getTime(); - player.setBusy(false); - player.lastOption = -2; - player.setMenuHandler(new MenuHandler(strs) { - public void handleReply(int option, String reply) { - if (option < 0 || option >= getOptions().length) { - npc.unblock(); - player.setBusy(false); - owner.lastOption = -1; - return; - } - owner.lastOption = option; + try { + player.getInterpreter().getNameSpace().importObject(this); + player.getInterpreter().source( + World.getWorld().npcScripts.get(npc.getID())); + player.getInterpreter().getNameSpace().clear(); + } catch (EvalError e) { + error(); + // e.printStackTrace(); + } catch (FileNotFoundException e) { + error(); + // e.printStackTrace(); + } catch (IOException e) { + error(); + // e.printStackTrace(); + } catch (ConcurrentModificationException cme) { + Logger.println("got cme"); + } catch (Exception e) { + error(); + // e.printStackTrace(); } - }); - player.getActionSender().sendMenu(strs); - while (player.lastOption == -2 && GameEngine.getTime() - time < 20000) { // timeout - Wait(25); - } - if (player.lastOption == -1 || player.lastOption == -2) { - player.setBusy(false); + + } + + /** + * Unblock the NPC/Player if something unhandled happens. + */ + private void error() { npc.unblock(); - return -1; - } - player.setBusy(true); - int newOpt = player.lastOption; - player.lastOption = -2; - PlayerTalk(strs[newOpt]); - return newOpt + 1; - } catch (Exception e) { - - e.printStackTrace(); - return -1; + player.setBusy(false); } - } - /** - * Teleports you from x to y (without a bubble) - * - * @param x - * - new x axis - * @param y - * - new y axis - */ - public void Teleport(int x, int y) { - player.teleport(x, y, false); - } - - /** - * Removes all the items from inventory that you specify - * - * @param id - * - the item id to remove - */ - public void RemoveAllItem(int id) { - RemoveItem(id, player.getInventory().countId(id)); - } - - /** - * Checks inventory for items/amounts. - * - * @param id - * - the items id - * @param amount - * - the amount - * @return true if it has the items. - */ - public boolean HasItem(int id, int amount) { - if (EntityHandler.getItemDef(id).stackable) { - for (InvItem i : player.getInventory().getItems()) { - if (i.getID() == id && i.getAmount() >= amount) - return true; - } - } else { - int count = 0; - for (InvItem i : player.getInventory().getItems()) { - if (i.getID() == id) - count++; - } - if (count >= amount) - return true; + /** + * Sends a normal Message to the player + * + * @param msg + * - the message + */ + public void SendMessage(String msg) { + player.getActionSender().sendMessage(msg); } - return false; - } - /** - * Removes item(s) from your inventory - * - * @param id - * - the item id - * @param amount - * - the amount - */ - public void RemoveItem(int id, int amount) { - if (EntityHandler.getItemDef(id).stackable) { - player.getInventory().remove(id, amount); - } else { - for (int i = 0; i < amount; i++) - player.getInventory().remove(id, 1); + /** + * Sends a large black box Message to the player + * + * @param msg + * - the message + */ + public void SendBoxMessage(String msg) { + player.getActionSender().sendAlert(msg, true); } - player.getActionSender().sendInventory(); - } - /** - * Adds experience to the selected Stat. - * - * @param stat - * - the stat number - * @param amount - * - the amount - * - */ - public void AddExp(int stat, int amount) { - player.incExp(stat, amount, true); - } + /** + * Sends a medium or large black box message + * + * @param msg + * - the message + * @param big + * - true if large box, false if medium + */ + public void SendBoxMessage(String msg, boolean big) { + player.getActionSender().sendAlert(msg, big); + } - /** - * Gets the free space in your inventory - * - * @return - the free slots - */ - public int GetInventoryFreeSpace() { - return 30 - player.getInventory().size(); - } + /** + * Add item(s) to the players inventory (This is setup to handle the amount + * even when the item is non stackable) + * + * @param id + * - the item's ID + * @param amount + * - the amount given + */ + public void AddItem(int id, int amount) { + InvItem item = new InvItem(id, amount); + if (item.getDef().stackable) { + player.getInventory().add(new InvItem(id, amount)); + } else { + for (int i = 0; i < amount; i++) { + player.getInventory().add(new InvItem(id)); + } + } + player.getActionSender().sendInventory(); + } - /** - * Gets the max level of a stat - * - * @param stat - * @return - */ - public int GetStatMaxLevel(int stat) { - return player.getMaxStat(stat); - } + /** + * Says something to the NPC your talking too + * + * @param msg + * - the message + */ + public void PlayerTalk(String msg) { + player.informOfChatMessage(new ChatMessage(player, msg, npc)); + Wait(2000); - /** - * Gets the current level of a stat - * - * @param stat - * @return - */ - public int GetStatCurLevel(int stat) { - return player.getCurStat(stat); - } + } - /** - * Adds an item to your bank - * - * @param id - * - the item id - * @param amount - * - the amount - */ - public void AddBankItem(int id, int amount) { - player.getBank().add(new InvItem(id, amount)); - } + /** + * the Npc your interacting with says something to you + * + * @param msg + * - the message + */ + public void NpcTalk(String msg) { + player.informOfNpcMessage(new ChatMessage(npc, msg, player)); + Wait(2000); + } - - public int CountItem(int id) { - return player.getInventory().countId(id); - } + /** + * Sleeps for the default delay (2000) + */ + public void Wait() { + Wait(2000); + } - public static final int ATTACK = 0; - public static final int DEFENSE = 1; - public static final int STRENGTH = 2; - public static final int HITS = 3; - public static final int RANGED = 4; - public static final int PRAYER = 5; - public static final int MAGIC = 6; - public static final int COOKING = 7; - public static final int WOODCUT = 8; - public static final int FLETCHING = 9; - public static final int FISHING = 10; - public static final int FIREMAKING = 11; - public static final int CRAFTING = 12; - public static final int SMITHING = 13; - public static final int MINING = 14; - public static final int HERBLAW = 15; - public static final int AGILITY = 16; - public static final int THIEVING = 17; + /** + * Wait's the delay until the next line is executed + */ + @SuppressWarnings("static-access") + public void Wait(int ms) { + try { + Thread.currentThread().sleep(ms); + } catch (InterruptedException e) { + SendMessage(e.getMessage()); + } + } + + /** + * AUTO EXPANDING arrays (String...) with BeanShell do not yet work. I know + * this looks dodgey, but easy-scripting support comes first. Currently set + * for 7 options max. + */ + public int PickOption(String s1, String s2, String s3, String s4, + String s5, String s6, String s7) { + return PickOption(new String[] { s1, s2, s3, s4, s5, s6, s7 }); + } + + public int PickOption(String s1, String s2, String s3, String s4, + String s5, String s6) { + return PickOption(new String[] { s1, s2, s3, s4, s5, s6 }); + } + + public int PickOption(String s1, String s2, String s3, String s4, String s5) { + return PickOption(new String[] { s1, s2, s3, s4, s5 }); + } + + public int PickOption(String s1, String s2, String s3, String s4) { + return PickOption(new String[] { s1, s2, s3, s4 }); + } + + public int PickOption(String s1, String s2, String s3) { + return PickOption(new String[] { s1, s2, s3 }); + } + + public int PickOption(String s1, String s2) { + return PickOption(new String[] { s1, s2 }); + } + + public int PickOption(String s1) { + return PickOption(new String[] { s1 }); + } + + /** + * Sends a question menu, waits for the response. + * + * @param strs + * - array of options + * @return the option number + */ + public int PickOption(String[] strs) { + try { + long time = GameEngine.getTime(); + player.setBusy(false); + player.setLastOption(-2); + player.setMenuHandler(new MenuHandler(strs) { + public void handleReply(int option, String reply) { + if (option < 0 || option >= getOptions().length) { + npc.unblock(); + player.setBusy(false); + owner.setLastOption(-1); + return; + } + owner.setLastOption(option); + } + }); + player.getActionSender().sendMenu(strs); + while (player.getLastOption() == -2 + && GameEngine.getTime() - time < 20000) { // timeout + Wait(25); + } + if (player.getLastOption() == -1 || player.getLastOption() == -2) { + player.setBusy(false); + npc.unblock(); + return -1; + } + player.setBusy(true); + int newOpt = player.getLastOption(); + player.setLastOption(-2); + PlayerTalk(strs[newOpt]); + return newOpt + 1; + } catch (Exception e) { + + e.printStackTrace(); + return -1; + } + } + + /** + * Teleports you from x to y (without a bubble) + * + * @param x + * - new x axis + * @param y + * - new y axis + */ + public void Teleport(int x, int y) { + player.teleport(x, y, false); + } + + /** + * Removes all the items from inventory that you specify + * + * @param id + * - the item id to remove + */ + public void RemoveAllItem(int id) { + RemoveItem(id, player.getInventory().countId(id)); + } + + /** + * Checks inventory for items/amounts. + * + * @param id + * - the items id + * @param amount + * - the amount + * @return true if it has the items. + */ + public boolean HasItem(int id, int amount) { + if (EntityHandler.getItemDef(id).stackable) { + for (InvItem i : player.getInventory().getItems()) { + if (i.getID() == id && i.getAmount() >= amount) + return true; + } + } else { + int count = 0; + for (InvItem i : player.getInventory().getItems()) { + if (i.getID() == id) + count++; + } + if (count >= amount) + return true; + } + return false; + } + + /** + * Removes item(s) from your inventory + * + * @param id + * - the item id + * @param amount + * - the amount + */ + public void RemoveItem(int id, int amount) { + if (EntityHandler.getItemDef(id).stackable) { + player.getInventory().remove(id, amount); + } else { + for (int i = 0; i < amount; i++) + player.getInventory().remove(id, 1); + } + player.getActionSender().sendInventory(); + } + + /** + * Adds experience to the selected Stat. + * + * @param stat + * - the stat number + * @param amount + * - the amount + * + */ + public void AddExp(int stat, int amount) { + player.incExp(stat, amount, true); + } + + /** + * Gets the free space in your inventory + * + * @return - the free slots + */ + public int GetInventoryFreeSpace() { + return 30 - player.getInventory().size(); + } + + /** + * Gets the max level of a stat + * + * @param stat + * @return + */ + public int GetStatMaxLevel(int stat) { + return player.getMaxStat(stat); + } + + /** + * Gets the current level of a stat + * + * @param stat + * @return + */ + public int GetStatCurLevel(int stat) { + return player.getCurStat(stat); + } + + /** + * Adds an item to your bank + * + * @param id + * - the item id + * @param amount + * - the amount + */ + public void AddBankItem(int id, int amount) { + player.getBank().add(new InvItem(id, amount)); + } + + public int CountItem(int id) { + return player.getInventory().countId(id); + } + + public static final int ATTACK = 0; + public static final int DEFENSE = 1; + public static final int STRENGTH = 2; + public static final int HITS = 3; + public static final int RANGED = 4; + public static final int PRAYER = 5; + public static final int MAGIC = 6; + public static final int COOKING = 7; + public static final int WOODCUT = 8; + public static final int FLETCHING = 9; + public static final int FISHING = 10; + public static final int FIREMAKING = 11; + public static final int CRAFTING = 12; + public static final int SMITHING = 13; + public static final int MINING = 14; + public static final int HERBLAW = 15; + public static final int AGILITY = 16; + public static final int THIEVING = 17; } diff --git a/GameServer/src/org/moparscape/msc/gs/model/Sector.java b/GameServer/src/org/moparscape/msc/gs/model/Sector.java index 672b120..e6da56d 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Sector.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Sector.java @@ -4,87 +4,87 @@ import java.io.IOException; import java.nio.ByteBuffer; public class Sector { - /** - * The height of a sector - */ - public static final short HEIGHT = 48; + /** + * The height of a sector + */ + public static final short HEIGHT = 48; - /** - * The width of a sector - */ - public static final short WIDTH = 48; + /** + * The width of a sector + */ + public static final short WIDTH = 48; - /** - * Create a new Sector from raw data packed into the given ByteBuffer - */ - public static Sector unpack(ByteBuffer in) throws IOException { - int length = Sector.WIDTH * Sector.HEIGHT; - if (in.remaining() < (10 * length)) { - throw new IOException("Provided buffer too short"); - } - Sector sector = new Sector(); + /** + * Create a new Sector from raw data packed into the given ByteBuffer + */ + public static Sector unpack(ByteBuffer in) throws IOException { + int length = Sector.WIDTH * Sector.HEIGHT; + if (in.remaining() < (10 * length)) { + throw new IOException("Provided buffer too short"); + } + Sector sector = new Sector(); - for (int i = 0; i < length; i++) { - sector.setTile(i, Tile.unpack(in)); + for (int i = 0; i < length; i++) { + sector.setTile(i, Tile.unpack(in)); + } + + return sector; } - return sector; - } + /** + * An array containing all the tiles within this Sector + */ + private Tile[] tiles; - /** - * An array containing all the tiles within this Sector - */ - private Tile[] tiles; - - /** - * Creates a new Sector full of blank tiles - */ - public Sector() { - tiles = new Tile[Sector.WIDTH * Sector.HEIGHT]; - for (int i = 0; i < tiles.length; i++) { - tiles[i] = new Tile(); - } - } - - /** - * Gets the Tile at the given index - */ - public Tile getTile(int i) { - return tiles[i]; - } - - /** - * Gets the Tile at the given coords - */ - public Tile getTile(int x, int y) { - return getTile(x * Sector.WIDTH + y); - } - - /** - * Writes the Sector raw data into a ByteBuffer - */ - public ByteBuffer pack() throws IOException { - ByteBuffer out = ByteBuffer.allocate(10 * tiles.length); - - for (int i = 0; i < tiles.length; i++) { - out.put(tiles[i].pack()); + /** + * Creates a new Sector full of blank tiles + */ + public Sector() { + tiles = new Tile[Sector.WIDTH * Sector.HEIGHT]; + for (int i = 0; i < tiles.length; i++) { + tiles[i] = new Tile(); + } } - out.flip(); - return out; - } + /** + * Gets the Tile at the given index + */ + public Tile getTile(int i) { + return tiles[i]; + } - /** - * Sets the the Tile at the given coords - */ - public void setTile(int x, int y, Tile t) { - setTile(x * Sector.WIDTH + y, t); - } + /** + * Gets the Tile at the given coords + */ + public Tile getTile(int x, int y) { + return getTile(x * Sector.WIDTH + y); + } - /** - * Sets the Tile at the given index - */ - public void setTile(int i, Tile t) { - tiles[i] = t; - } + /** + * Writes the Sector raw data into a ByteBuffer + */ + public ByteBuffer pack() throws IOException { + ByteBuffer out = ByteBuffer.allocate(10 * tiles.length); + + for (int i = 0; i < tiles.length; i++) { + out.put(tiles[i].pack()); + } + + out.flip(); + return out; + } + + /** + * Sets the the Tile at the given coords + */ + public void setTile(int x, int y, Tile t) { + setTile(x * Sector.WIDTH + y, t); + } + + /** + * Sets the Tile at the given index + */ + public void setTile(int i, Tile t) { + tiles[i] = t; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/Shop.java b/GameServer/src/org/moparscape/msc/gs/model/Shop.java index 943dcca..6c55bc7 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Shop.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Shop.java @@ -9,238 +9,245 @@ import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.event.DelayedEvent; import org.moparscape.msc.gs.tools.DataConversions; - public class Shop { - /** - * The maximum size of a shop - */ - private static int MAX_SIZE = 40; - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * The maximum size of a shop + */ + private static int MAX_SIZE = 40; + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private int buyModifier; - private int[] equilibriumAmounts; - private int[] equilibriumIds; - private boolean general; - private String greeting; - private ArrayList items; - private int minX, maxX, minY, maxY; - private String name; - private String[] options; - private ArrayList players; - private int respawnRate; - private int sellModifier; + private int buyModifier; + private int[] equilibriumAmounts; + private int[] equilibriumIds; + private boolean general; + private String greeting; + private ArrayList items; + private int minX, maxX, minY, maxY; + private String name; + private String[] options; + private ArrayList players; + private int respawnRate; + private int sellModifier; - public int add(InvItem item) { - if (item.getAmount() <= 0) { - return -1; - } - for (int index = 0; index < items.size(); index++) { - if (item.equals(items.get(index))) { - items.get(index).setAmount(items.get(index).getAmount() + item.getAmount()); - return index; - } - } - items.add(item); - return items.size() - 2; - } - - public void addPlayer(Player player) { - players.add(player); - } - - public boolean canHold(ArrayList items) { - return (MAX_SIZE - items.size()) >= getRequiredSlots(items); - } - - public boolean canHold(InvItem item) { - return (MAX_SIZE - items.size()) >= getRequiredSlots(item); - } - - public boolean contains(InvItem i) { - return items.contains(i); - } - - public int countId(int id) { - for (InvItem i : items) { - if (i.getID() == id) { - return i.getAmount(); - } - } - return 0; - } - - public boolean equals(Object o) { - if (o instanceof Shop) { - Shop shop = (Shop) o; - return shop.getName().equals(name); - } - return false; - } - - public boolean full() { - return items.size() >= MAX_SIZE; - } - - public int getBuyModifier() { - return buyModifier; - } - - public int getEquilibrium(int id) { - for (int idx = 0; idx < equilibriumIds.length; idx++) { - if (equilibriumIds[idx] == id) { - return equilibriumAmounts[idx]; - } - } - return 0; - } - - public InvItem getFirstById(int id) { - for (int index = 0; index < items.size(); index++) { - if (items.get(index).getID() == id) { - return items.get(index); - } - } - return null; - } - - public String getGreeting() { - return greeting; - } - - public ArrayList getItems() { - return items; - } - - public String getName() { - return name; - } - - public String[] getOptions() { - return options; - } - - public int getRequiredSlots(InvItem item) { - return (items.contains(item) ? 0 : 1); - } - - public int getRequiredSlots(List items) { - int requiredSlots = 0; - for (InvItem item : items) { - if (items.contains(item)) { - continue; - } - requiredSlots++; - } - return requiredSlots; - } - - public int getSellModifier() { - return sellModifier; - } - - public void initRestock() { - players = new ArrayList(); - final Shop shop = this; - Instance.getDelayedEventHandler().add(new DelayedEvent(null, respawnRate) { - private int iterations = 0; - - public void run() { - boolean changed = false; - Iterator iterator = items.iterator(); - iterations++; - while (iterator.hasNext()) { - InvItem shopItem = iterator.next(); - int eq = shop.getEquilibrium(shopItem.getID()); - if ((iterations % 4 == 0) && shopItem.getAmount() > eq) { - shopItem.setAmount(shopItem.getAmount() - 1); - if (shopItem.getAmount() <= 0 && !DataConversions.inArray(equilibriumIds, shopItem.getID())) { - iterator.remove(); + public int add(InvItem item) { + if (item.getAmount() <= 0) { + return -1; + } + for (int index = 0; index < items.size(); index++) { + if (item.equals(items.get(index))) { + items.get(index).setAmount( + items.get(index).getAmount() + item.getAmount()); + return index; } - changed = true; - } else if (shopItem.getAmount() < eq) { - shopItem.setAmount(shopItem.getAmount() + 1); - changed = true; - } } - if (changed) { - shop.updatePlayers(); + items.add(item); + return items.size() - 2; + } + + public void addPlayer(Player player) { + players.add(player); + } + + public boolean canHold(ArrayList items) { + return (MAX_SIZE - items.size()) >= getRequiredSlots(items); + } + + public boolean canHold(InvItem item) { + return (MAX_SIZE - items.size()) >= getRequiredSlots(item); + } + + public boolean contains(InvItem i) { + return items.contains(i); + } + + public int countId(int id) { + for (InvItem i : items) { + if (i.getID() == id) { + return i.getAmount(); + } } - } - }); - } + return 0; + } - public boolean isGeneral() { - return general; - } - - public ListIterator iterator() { - return items.listIterator(); - } - - public int remove(InvItem item) { - Iterator iterator = items.iterator(); - for (int index = 0; iterator.hasNext(); index++) { - InvItem i = iterator.next(); - if (item.getID() == i.getID()) { - if (item.getAmount() < i.getAmount()) { - i.setAmount(i.getAmount() - item.getAmount()); - } else if (DataConversions.inArray(equilibriumIds, item.getID())) { - i.setAmount(0); - } else { - iterator.remove(); + public boolean equals(Object o) { + if (o instanceof Shop) { + Shop shop = (Shop) o; + return shop.getName().equals(name); } - return index; - } + return false; } - return -1; - } - public void removePlayer(Player player) { - players.remove(player); - } - - public void setEquilibrium() { - equilibriumIds = new int[items.size()]; - equilibriumAmounts = new int[items.size()]; - for (int idx = 0; idx < items.size(); idx++) { - equilibriumIds[idx] = items.get(idx).getID(); - equilibriumAmounts[idx] = items.get(idx).getAmount(); + public boolean full() { + return items.size() >= MAX_SIZE; } - } - public boolean shouldStock(int id) { - if (general) { - return true; + public int getBuyModifier() { + return buyModifier; } - for (int eqID : equilibriumIds) { - if (eqID == id) { - return true; - } + + public int getEquilibrium(int id) { + for (int idx = 0; idx < equilibriumIds.length; idx++) { + if (equilibriumIds[idx] == id) { + return equilibriumAmounts[idx]; + } + } + return 0; } - return false; - } - public int size() { - return items.size(); - } - - public void updatePlayers() { - Iterator iterator = players.iterator(); - while (iterator.hasNext()) { - Player p = iterator.next(); - if (!equals(p.getShop())) { - iterator.remove(); - continue; - } - p.getActionSender().showShop(this); + public InvItem getFirstById(int id) { + for (int index = 0; index < items.size(); index++) { + if (items.get(index).getID() == id) { + return items.get(index); + } + } + return null; } - } - public boolean withinShop(Point p) { - return p.getX() >= minX && p.getX() <= maxX && p.getY() >= minY && p.getY() <= maxY; - } + public String getGreeting() { + return greeting; + } + + public ArrayList getItems() { + return items; + } + + public String getName() { + return name; + } + + public String[] getOptions() { + return options; + } + + public int getRequiredSlots(InvItem item) { + return (items.contains(item) ? 0 : 1); + } + + public int getRequiredSlots(List items) { + int requiredSlots = 0; + for (InvItem item : items) { + if (items.contains(item)) { + continue; + } + requiredSlots++; + } + return requiredSlots; + } + + public int getSellModifier() { + return sellModifier; + } + + public void initRestock() { + players = new ArrayList(); + final Shop shop = this; + Instance.getDelayedEventHandler().add( + new DelayedEvent(null, respawnRate) { + private int iterations = 0; + + public void run() { + boolean changed = false; + Iterator iterator = items.iterator(); + iterations++; + while (iterator.hasNext()) { + InvItem shopItem = iterator.next(); + int eq = shop.getEquilibrium(shopItem.getID()); + if ((iterations % 4 == 0) + && shopItem.getAmount() > eq) { + shopItem.setAmount(shopItem.getAmount() - 1); + if (shopItem.getAmount() <= 0 + && !DataConversions.inArray( + equilibriumIds, + shopItem.getID())) { + iterator.remove(); + } + changed = true; + } else if (shopItem.getAmount() < eq) { + shopItem.setAmount(shopItem.getAmount() + 1); + changed = true; + } + } + if (changed) { + shop.updatePlayers(); + } + } + }); + } + + public boolean isGeneral() { + return general; + } + + public ListIterator iterator() { + return items.listIterator(); + } + + public int remove(InvItem item) { + Iterator iterator = items.iterator(); + for (int index = 0; iterator.hasNext(); index++) { + InvItem i = iterator.next(); + if (item.getID() == i.getID()) { + if (item.getAmount() < i.getAmount()) { + i.setAmount(i.getAmount() - item.getAmount()); + } else if (DataConversions + .inArray(equilibriumIds, item.getID())) { + i.setAmount(0); + } else { + iterator.remove(); + } + return index; + } + } + return -1; + } + + public void removePlayer(Player player) { + players.remove(player); + } + + public void setEquilibrium() { + equilibriumIds = new int[items.size()]; + equilibriumAmounts = new int[items.size()]; + for (int idx = 0; idx < items.size(); idx++) { + equilibriumIds[idx] = items.get(idx).getID(); + equilibriumAmounts[idx] = items.get(idx).getAmount(); + } + } + + public boolean shouldStock(int id) { + if (general) { + return true; + } + for (int eqID : equilibriumIds) { + if (eqID == id) { + return true; + } + } + return false; + } + + public int size() { + return items.size(); + } + + public void updatePlayers() { + Iterator iterator = players.iterator(); + while (iterator.hasNext()) { + Player p = iterator.next(); + if (!equals(p.getShop())) { + iterator.remove(); + continue; + } + p.getActionSender().showShop(this); + } + } + + public boolean withinShop(Point p) { + return p.getX() >= minX && p.getX() <= maxX && p.getY() >= minY + && p.getY() <= maxY; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/Syndicate.java b/GameServer/src/org/moparscape/msc/gs/model/Syndicate.java index f1bccc5..778b1fc 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Syndicate.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Syndicate.java @@ -1,6 +1,5 @@ package org.moparscape.msc.gs.model; -import java.util.Collection; import java.util.Map; import java.util.WeakHashMap; @@ -34,8 +33,8 @@ public class Syndicate { public void distributeExp(final Npc npc) { final Map dmgs = getDamages(); - final int exp = DataConversions.roundUp(Formulae - .combatExperience(npc) / 4D); + final int exp = DataConversions + .roundUp(Formulae.combatExperience(npc) / 4D); int newXP = 0; for (final Player p : dmgs.keySet()) { Damage dmg = dmgs.get(p); @@ -82,7 +81,7 @@ public class Syndicate { } } } - + public int roundAndCast(double d) { return (int) Math.round(d); } diff --git a/GameServer/src/org/moparscape/msc/gs/model/TelePoint.java b/GameServer/src/org/moparscape/msc/gs/model/TelePoint.java index 377ff15..e809d56 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/TelePoint.java +++ b/GameServer/src/org/moparscape/msc/gs/model/TelePoint.java @@ -1,9 +1,9 @@ package org.moparscape.msc.gs.model; public class TelePoint extends Point { - public String command; + public String command; - public String getCommand() { - return command; - } + public String getCommand() { + return command; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/Tile.java b/GameServer/src/org/moparscape/msc/gs/model/Tile.java index 46f72d6..74bffb6 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/Tile.java +++ b/GameServer/src/org/moparscape/msc/gs/model/Tile.java @@ -7,77 +7,77 @@ import java.nio.ByteBuffer; * A representation of one tile within our world map */ public class Tile { - /** - * Create a new tile from raw data packed into the given ByteBuffer - */ - public static Tile unpack(ByteBuffer in) throws IOException { - if (in.remaining() < 10) { - throw new IOException("Provided buffer too short"); + /** + * Create a new tile from raw data packed into the given ByteBuffer + */ + public static Tile unpack(ByteBuffer in) throws IOException { + if (in.remaining() < 10) { + throw new IOException("Provided buffer too short"); + } + Tile tile = new Tile(); + + tile.groundElevation = in.get(); + tile.groundTexture = in.get(); + tile.groundOverlay = in.get(); + tile.roofTexture = in.get(); + tile.horizontalWall = in.get(); + tile.verticalWall = in.get(); + tile.diagonalWalls = in.getInt(); + + return tile; } - Tile tile = new Tile(); - tile.groundElevation = in.get(); - tile.groundTexture = in.get(); - tile.groundOverlay = in.get(); - tile.roofTexture = in.get(); - tile.horizontalWall = in.get(); - tile.verticalWall = in.get(); - tile.diagonalWalls = in.getInt(); + /** + * The ID of any diagonal walls on this tile + */ + public int diagonalWalls = 0; - return tile; - } + /** + * The elevation of this tile + */ + public byte groundElevation = 0; - /** - * The ID of any diagonal walls on this tile - */ - public int diagonalWalls = 0; + /** + * The overlay texture ID + */ + public byte groundOverlay = 0; - /** - * The elevation of this tile - */ - public byte groundElevation = 0; + /** + * The texture ID of this tile + */ + public byte groundTexture = 0; - /** - * The overlay texture ID - */ - public byte groundOverlay = 0; + /** + * The texture ID of any horizontal wall on this tile + */ + public byte horizontalWall = 0; - /** - * The texture ID of this tile - */ - public byte groundTexture = 0; + /** + * The texture ID of the roof of this tile + */ + public byte roofTexture = 0; - /** - * The texture ID of any horizontal wall on this tile - */ - public byte horizontalWall = 0; + /** + * The texture ID of any vertical wall on this tile + */ + public byte verticalWall = 0; - /** - * The texture ID of the roof of this tile - */ - public byte roofTexture = 0; + /** + * Writes the Tile raw data into a ByteBuffer + */ + public ByteBuffer pack() throws IOException { + ByteBuffer out = ByteBuffer.allocate(10); - /** - * The texture ID of any vertical wall on this tile - */ - public byte verticalWall = 0; + out.put(groundElevation); + out.put(groundTexture); + out.put(groundOverlay); + out.put(roofTexture); - /** - * Writes the Tile raw data into a ByteBuffer - */ - public ByteBuffer pack() throws IOException { - ByteBuffer out = ByteBuffer.allocate(10); + out.put(horizontalWall); + out.put(verticalWall); + out.putInt(diagonalWalls); - out.put(groundElevation); - out.put(groundTexture); - out.put(groundOverlay); - out.put(roofTexture); - - out.put(horizontalWall); - out.put(verticalWall); - out.putInt(diagonalWalls); - - out.flip(); - return out; - } + out.flip(); + return out; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/TileValue.java b/GameServer/src/org/moparscape/msc/gs/model/TileValue.java index 61d4d47..9af71bb 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/TileValue.java +++ b/GameServer/src/org/moparscape/msc/gs/model/TileValue.java @@ -1,11 +1,11 @@ package org.moparscape.msc.gs.model; public class TileValue { - public int diagWallVal = 0; - public byte horizontalWallVal = 0; - public byte mapValue = 0; - public byte objectValue = 0; - public byte overlay = 0; - public byte verticalWallVal = 0; - public byte elevation = 0; + public int diagWallVal = 0; + public byte horizontalWallVal = 0; + public byte mapValue = 0; + public byte objectValue = 0; + public byte overlay = 0; + public byte verticalWallVal = 0; + public byte elevation = 0; } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/model/ViewArea.java b/GameServer/src/org/moparscape/msc/gs/model/ViewArea.java index 4a57846..0d6147d 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/ViewArea.java +++ b/GameServer/src/org/moparscape/msc/gs/model/ViewArea.java @@ -5,116 +5,115 @@ import java.util.List; import org.moparscape.msc.gs.Instance; - public class ViewArea { - private static World world = Instance.getWorld(); - private Mob mob; + private static World world = Instance.getWorld(); + private Mob mob; - public ViewArea(Mob mob) { - this.mob = mob; - } + public ViewArea(Mob mob) { + this.mob = mob; + } - public List getGameObjectsInView() { - List objects = new ArrayList(); - ActiveTile[][] viewArea = getViewedArea(21, 21, 21, 21); - for (int x = 0; x < viewArea.length; x++) { - for (int y = 0; y < viewArea[x].length; y++) { - ActiveTile t = viewArea[x][y]; - if (t != null) { - if (t.hasGameObject()) { - objects.add(t.getGameObject()); - } + public List getGameObjectsInView() { + List objects = new ArrayList(); + ActiveTile[][] viewArea = getViewedArea(21, 21, 21, 21); + for (int x = 0; x < viewArea.length; x++) { + for (int y = 0; y < viewArea[x].length; y++) { + ActiveTile t = viewArea[x][y]; + if (t != null) { + if (t.hasGameObject()) { + objects.add(t.getGameObject()); + } + } + } } - } + return objects; } - return objects; - } - public List getItemsInView() { - List items = new ArrayList(); - ActiveTile[][] viewArea = getViewedArea(21, 21, 21, 21); - for (int x = 0; x < viewArea.length; x++) { - for (int y = 0; y < viewArea[x].length; y++) { - ActiveTile t = viewArea[x][y]; - if (t != null) { - items.addAll(t.getItems()); + public List getItemsInView() { + List items = new ArrayList(); + ActiveTile[][] viewArea = getViewedArea(21, 21, 21, 21); + for (int x = 0; x < viewArea.length; x++) { + for (int y = 0; y < viewArea[x].length; y++) { + ActiveTile t = viewArea[x][y]; + if (t != null) { + items.addAll(t.getItems()); + } + } } - } + return items; } - return items; - } - public List getNpcsInView() { - List npcs = new ArrayList(); - ActiveTile[][] viewArea = getViewedArea(15, 15, 16, 16); - for (int x = 0; x < viewArea.length; x++) - for (int y = 0; y < viewArea[x].length; y++) { - ActiveTile t = viewArea[x][y]; - if (t != null) { - List temp = t.getNpcs(); - if (temp != null) { - npcs.addAll(temp); - } + public List getNpcsInView() { + List npcs = new ArrayList(); + ActiveTile[][] viewArea = getViewedArea(15, 15, 16, 16); + for (int x = 0; x < viewArea.length; x++) + for (int y = 0; y < viewArea[x].length; y++) { + ActiveTile t = viewArea[x][y]; + if (t != null) { + List temp = t.getNpcs(); + if (temp != null) { + npcs.addAll(temp); + } + } + } + return npcs; + } + + public List getPlayersInView() { + List players = new ArrayList(); + ActiveTile[][] viewArea = getViewedArea(15, 15, 16, 16); + for (int x = 0; x < viewArea.length; x++) + for (int y = 0; y < viewArea[x].length; y++) { + ActiveTile t = viewArea[x][y]; + if (t != null) { + List temp = t.getPlayers(); + if (temp != null) { + players.addAll(temp); + } + } + } + return players; + } + + public ActiveTile[][] getViewedArea(int x1, int y1, int x2, int y2) { + int mobX = mob.getX(); + int mobY = mob.getY(); + int startX, startY, endX, endY; + startX = mobX - x1; + if (startX < 0) { + startX = 0; } - } - return npcs; - } - - public List getPlayersInView() { - List players = new ArrayList(); - ActiveTile[][] viewArea = getViewedArea(15, 15, 16, 16); - for (int x = 0; x < viewArea.length; x++) - for (int y = 0; y < viewArea[x].length; y++) { - ActiveTile t = viewArea[x][y]; - if (t != null) { - List temp = t.getPlayers(); - if (temp != null) { - players.addAll(temp); - } + startY = mobY - y1; + if (startY < 0) { + startY = 0; } - } - return players; - } - - public ActiveTile[][] getViewedArea(int x1, int y1, int x2, int y2) { - int mobX = mob.getX(); - int mobY = mob.getY(); - int startX, startY, endX, endY; - startX = mobX - x1; - if (startX < 0) { - startX = 0; + endX = mobX + x2; + if (endX >= World.MAX_WIDTH) { + endX = World.MAX_WIDTH - 1; + } + endY = mobY + y2; + if (endY >= World.MAX_HEIGHT) { + endY = World.MAX_HEIGHT - 1; + } + int xWidth; + int yWidth; + if (startX > endX) { + xWidth = startX - endX; + } else { + xWidth = endX - startX; + } + if (startY > endY) { + yWidth = startY - endY; + } else { + yWidth = endY - startY; + } + ActiveTile[][] temp = new ActiveTile[xWidth][yWidth]; + for (int x = 0; (x + startX) < endX; x++) { + for (int y = 0; (y + startY) < endY; y++) { + temp[x][y] = world.tiles[x + startX][y + startY]; + } + } + return temp; } - startY = mobY - y1; - if (startY < 0) { - startY = 0; - } - endX = mobX + x2; - if (endX >= World.MAX_WIDTH) { - endX = World.MAX_WIDTH - 1; - } - endY = mobY + y2; - if (endY >= World.MAX_HEIGHT) { - endY = World.MAX_HEIGHT - 1; - } - int xWidth; - int yWidth; - if (startX > endX) { - xWidth = startX - endX; - } else { - xWidth = endX - startX; - } - if (startY > endY) { - yWidth = startY - endY; - } else { - yWidth = endY - startY; - } - ActiveTile[][] temp = new ActiveTile[xWidth][yWidth]; - for (int x = 0; (x + startX) < endX; x++) { - for (int y = 0; (y + startY) < endY; y++) { - temp[x][y] = world.tiles[x + startX][y + startY]; - } - } - return temp; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/model/World.java b/GameServer/src/org/moparscape/msc/gs/model/World.java index 99dc4c6..9848d0f 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/World.java +++ b/GameServer/src/org/moparscape/msc/gs/model/World.java @@ -27,7 +27,6 @@ import org.moparscape.msc.gs.util.EntityList; import org.moparscape.msc.gs.util.Logger; import org.moparscape.msc.gs.util.PersistenceManager; - public final class World { /** @@ -45,18 +44,21 @@ public final class World { public synchronized Deque getSnapshots() { return snapshots; } + /** * Add entry to snapshots */ public synchronized void addEntryToSnapshots(Snapshot snapshot) { snapshots.offerFirst(snapshot); } + public void loadScripts() { int npccount = 0; int error = 0; for (File files : new File("scripts/").listFiles()) { try { - int id = Integer.parseInt(files.getName().substring(0, 3).trim()); + int id = Integer.parseInt(files.getName().substring(0, 3) + .trim()); npcScripts.put(id, files.getAbsolutePath()); } catch (Exception e) { error++; @@ -65,15 +67,16 @@ public final class World { npccount++; } } - Logger.println(npccount + " NPC Scripts loaded! " + (error > 1 ? ((error - 1) + " Error scripts") : "")); + Logger.println(npccount + " NPC Scripts loaded! " + + (error > 1 ? ((error - 1) + " Error scripts") : "")); } - public void sendWorldMessage(String msg) { for (Player p : getPlayers()) { p.getActionSender().sendMessage(msg); } } + public void sendWorldAnnouncement(String msg) { for (Player p : getPlayers()) { p.getActionSender().sendMessage("%" + msg); @@ -85,19 +88,21 @@ public final class World { } /* Places */ - protected Point[][] places = { { new Point(252,349), new Point(260,356) } }; + protected Point[][] places = { { new Point(252, 349), new Point(260, 356) } }; /* Can attack in these places? */ public boolean[] wildAttackable = { false }; // 0 = No public final Point[][] getPlaces() { - return places; + return places; } + public final boolean wildAttackable(int i) { - return wildAttackable[i]; + return wildAttackable[i]; } + /* End of Places */ - + /** * Allow Dueling? */ @@ -130,12 +135,13 @@ public final class World { public static boolean isMembers() { return Config.members; } + public WorldLoader wl; /** * Database connection */ private static DBConnection db; - + public DBConnection getDB() { return db; } @@ -143,11 +149,12 @@ public final class World { public boolean dbKeepAlive() { return db.isConnected(); } - + public static void initilizeDB() { db = new DBConnection(); db.initilizePreparedStatements(db); } + /** * returns the only instance of this world, if there is not already one, * makes it and loads everything @@ -171,6 +178,7 @@ public final class World { } return worldInstance; } + /** * The client updater instance */ @@ -253,7 +261,8 @@ public final class World { /** * Adds a DelayedEvent that will spawn a GameObject */ - public void delayedSpawnObject(final GameObjectLoc loc, final int respawnTime) { + public void delayedSpawnObject(final GameObjectLoc loc, + final int respawnTime) { delayedEventHandler.add(new SingleEvent(null, respawnTime) { public void action() { @@ -300,7 +309,8 @@ public final class World { */ public Npc getNpc(int id, int minX, int maxX, int minY, int maxY) { for (Npc npc : npcs) { - if (npc.getID() == id && npc.getX() >= minX && npc.getX() <= maxX && npc.getY() >= minY && npc.getY() <= maxY) { + if (npc.getID() == id && npc.getX() >= minX && npc.getX() <= maxX + && npc.getY() >= minY && npc.getY() <= maxY) { return npc; } } @@ -310,12 +320,12 @@ public final class World { /** * Gets an npc by their coords and id] */ - public Npc getNpc(int id, int minX, int maxX, int minY, int maxY, boolean notNull) { + public Npc getNpc(int id, int minX, int maxX, int minY, int maxY, + boolean notNull) { for (Npc npc : npcs) { - if (npc.getID() == id && npc.getX() >= minX && npc.getX() <= maxX && npc.getY() >= minY && npc.getY() <= maxY) { - if (npc == null) { - continue; - } else if (!npc.inCombat()) { + if (npc.getID() == id && npc.getX() >= minX && npc.getX() <= maxX + && npc.getY() >= minY && npc.getY() <= maxY) { + if (!npc.inCombat()) { return npc; } } @@ -461,11 +471,12 @@ public final class World { */ private void loadNpcHandlers() { - NpcHandlerDef[] handlerDefs = (NpcHandlerDef[]) PersistenceManager.load("NpcHandlers.xml"); + NpcHandlerDef[] handlerDefs = (NpcHandlerDef[]) PersistenceManager + .load("NpcHandlers.xml"); for (NpcHandlerDef handlerDef : handlerDefs) { try { String className = handlerDef.getClassName(); - Class c = Class.forName(className); + Class c = Class.forName(className); if (c != null) { NpcHandler handler = (NpcHandler) c.newInstance(); for (int npcID : handlerDef.getAssociatedNpcs()) { @@ -513,6 +524,7 @@ public final class World { break; } } + /** * Registers an item to be removed after 3 minutes */ @@ -520,7 +532,7 @@ public final class World { try { if (i.getLoc() == null) { delayedEventHandler.add(new DelayedEvent(null, 180000) { - + public void run() { ActiveTile tile = getTile(i.getLocation()); if (tile.hasItem(i)) { @@ -530,8 +542,7 @@ public final class World { } }); } - } - catch(Exception e) { + } catch (Exception e) { i.remove(); e.printStackTrace(); } @@ -542,8 +553,12 @@ public final class World { */ public void registerNpc(Npc n) { NPCLoc npc = n.getLoc(); - if (npc.startX < npc.minX || npc.startX > npc.maxX || npc.startY < npc.minY || npc.startY > npc.maxY || (getTileValue(npc.startX, npc.startY).mapValue & 64) != 0) { - Logger.println("Fucked Npc: " + npc.id + "" + npc.startX + "" + npc.startY + ""); + if (npc.startX < npc.minX || npc.startX > npc.maxX + || npc.startY < npc.minY || npc.startY > npc.maxY + || (getTileValue(npc.startX, npc.startY).mapValue & 64) != 0) { + Logger.println("Fucked Npc: " + npc.id + "" + + npc.startX + "" + npc.startY + + ""); } npcs.add(n); } @@ -552,7 +567,8 @@ public final class World { * Updates the map to include a new object */ public void registerObject(GameObject o) { - if (o.getGameObjectDef().getType() != 1 && o.getGameObjectDef().getType() != 2) { + if (o.getGameObjectDef().getType() != 1 + && o.getGameObjectDef().getType() != 2) { return; } int dir = o.getDirection(); @@ -583,7 +599,7 @@ public final class World { } } } - + } /** @@ -592,7 +608,8 @@ public final class World { */ public void registerPlayer(Player p) { if (players.contains(p)) { - Logger.println("IMPORTANT. Players array already contains player: " + p.getUsername() + ". I don't think this should happen ;c"); + Logger.println("IMPORTANT. Players array already contains player: " + + p.getUsername() + ". I don't think this should happen ;c"); } p.setInitialized(); players.add(p); @@ -613,14 +630,17 @@ public final class World { public void sendBroadcastMessage(String user, String message) { for (Player p : getPlayers()) { - p.getActionSender().sendMessage("%#adm#" + user + ": @gre@" + message); + p.getActionSender().sendMessage( + "%#adm#" + user + ": @gre@" + message); } } - public void sendBroadcastMessage(String user, String message, boolean modonly) { + public void sendBroadcastMessage(String user, String message, + boolean modonly) { for (Player p : getPlayers()) { if (p.isPMod()) { - p.getActionSender().sendMessage("%#adm#" + user + ": @gre@" + message); + p.getActionSender().sendMessage( + "%#adm#" + user + ": @gre@" + message); } } } @@ -733,7 +753,8 @@ public final class World { * Removes an object from the map */ public void unregisterObject(GameObject o) { - if (o.getGameObjectDef().getType() != 1 && o.getGameObjectDef().getType() != 2) { + if (o.getGameObjectDef().getType() != 1 + && o.getGameObjectDef().getType() != 2) { return; } int dir = o.getDirection(); @@ -778,7 +799,8 @@ public final class World { p.resetCombat(CombatState.ERROR); opponent.resetCombat(CombatState.ERROR); } - server.getLoginConnector().getActionSender().playerLogout(p.getUsernameHash()); + server.getLoginConnector().getActionSender() + .playerLogout(p.getUsernameHash()); delayedEventHandler.removePlayersEvents(p); players.remove(p); setLocation(p, p.getLocation(), null); diff --git a/GameServer/src/org/moparscape/msc/gs/model/snapshot/Activity.java b/GameServer/src/org/moparscape/msc/gs/model/snapshot/Activity.java index 1bd363f..b6b9a8e 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/snapshot/Activity.java +++ b/GameServer/src/org/moparscape/msc/gs/model/snapshot/Activity.java @@ -1,11 +1,11 @@ package org.moparscape.msc.gs.model.snapshot; -import org.moparscape.msc.gs.model.Player; - /** - * Activity log class, stores activity string, time of activity and activity owner + * Activity log class, stores activity string, time of activity and activity + * owner + * * @author Pets - * + * */ public class Activity extends Snapshot { @@ -16,8 +16,11 @@ public class Activity extends Snapshot { /** * Constructor - * @param player player that performed the activity - * @param activity the activity that was performed + * + * @param player + * player that performed the activity + * @param activity + * the activity that was performed */ public Activity(String sender, String activity) { super(sender); diff --git a/GameServer/src/org/moparscape/msc/gs/model/snapshot/Chatlog.java b/GameServer/src/org/moparscape/msc/gs/model/snapshot/Chatlog.java index 091bd0c..ebd8a84 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/snapshot/Chatlog.java +++ b/GameServer/src/org/moparscape/msc/gs/model/snapshot/Chatlog.java @@ -1,15 +1,13 @@ package org.moparscape.msc.gs.model.snapshot; import java.util.ArrayList; -import java.util.List; - -import org.moparscape.msc.gs.model.Player; - /** - * Chat log class, stores chat string, time of message, message owner and set of players that saw the message + * Chat log class, stores chat string, time of message, message owner and set of + * players that saw the message + * * @author Pets - * + * */ public class Chatlog extends Snapshot { @@ -24,9 +22,13 @@ public class Chatlog extends Snapshot { /** * Constructor - * @param sender player that sent the message - * @param chatstring the message that was sent - * @param recievers players that saw the public message + * + * @param sender + * player that sent the message + * @param chatstring + * the message that was sent + * @param recievers + * players that saw the public message * */ public Chatlog(String sender, String chatstring, ArrayList recievers) { diff --git a/GameServer/src/org/moparscape/msc/gs/model/snapshot/Snapshot.java b/GameServer/src/org/moparscape/msc/gs/model/snapshot/Snapshot.java index 8e2bd11..eac07bc 100644 --- a/GameServer/src/org/moparscape/msc/gs/model/snapshot/Snapshot.java +++ b/GameServer/src/org/moparscape/msc/gs/model/snapshot/Snapshot.java @@ -2,11 +2,11 @@ package org.moparscape.msc.gs.model.snapshot; import org.moparscape.msc.gs.core.GameEngine; - /** * Snapshot abstract class + * * @author Pets - * + * */ public abstract class Snapshot { diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Aggie.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Aggie.java index 9e2e31e..e5ffc33 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Aggie.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Aggie.java @@ -18,87 +18,140 @@ import org.moparscape.msc.gs.model.World; */ public class Aggie implements NpcHandler { - public static final World world = Instance.getWorld(); + public static final World world = Instance.getWorld(); - int[] dyes = { 238, 239, 272 }; + int[] dyes = { 238, 239, 272 }; - int[] itemReq = { 236, 241, 281 }; - String[] names = { "Red dye please", "Yellow dye please", "Blue dye please", "No thanks" }; + int[] itemReq = { 236, 241, 281 }; + String[] names = { "Red dye please", "Yellow dye please", + "Blue dye please", "No thanks" }; - int ourOption = -1; + int ourOption = -1; - public void handleNpc(final Npc npc, Player player) throws Exception { - player.setBusy(false); - player.informOfNpcMessage(new ChatMessage(npc, "Hi traveller, i specialize in creating different colored dyes", player)); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "Would you like me to create you any dyes?", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setMenuHandler(new MenuHandler(names) { - public void handleReply(final int option, final String reply) { - if (option < 0 && option > names.length || option == 3) - return; - ourOption = option; - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); + public void handleNpc(final Npc npc, Player player) throws Exception { + player.setBusy(false); + player.informOfNpcMessage(new ChatMessage( + npc, + "Hi traveller, i specialize in creating different colored dyes", + player)); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.informOfNpcMessage(new ChatMessage(npc, + "Would you like me to create you any dyes?", owner)); Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "You will need 1 " + EntityHandler.getItemDef(itemReq[ourOption]).name + " and 30gp for me to create this dye", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - String[] diag = { "Yes i have them", "Ill come back when i have the ingrediants" }; - owner.setMenuHandler(new MenuHandler(diag) { - public void handleReply(final int option, final String reply) { - if (option == 0) { - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().countId(itemReq[ourOption]) < 1 || owner.getInventory().countId(10) < 30) { - owner.informOfNpcMessage(new ChatMessage(npc, "It seems like you don't have all what's Required, come back later.", owner)); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); + public void action() { + owner.setMenuHandler(new MenuHandler(names) { + public void handleReply(final int option, + final String reply) { + if (option < 0 && option > names.length + || option == 3) return; - } + ourOption = option; + owner.informOfChatMessage(new ChatMessage( + owner, reply, npc)); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.informOfNpcMessage(new ChatMessage( + npc, + "You will need 1 " + + EntityHandler + .getItemDef(itemReq[ourOption]).name + + " and 30gp for me to create this dye", + owner)); + Instance.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + String[] diag = { + "Yes i have them", + "Ill come back when i have the ingrediants" }; + owner.setMenuHandler(new MenuHandler( + diag) { + public void handleReply( + final int option, + final String reply) { + if (option == 0) { + owner.informOfChatMessage(new ChatMessage( + owner, + reply, + npc)); + world.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + if (owner + .getInventory() + .countId( + itemReq[ourOption]) < 1 + || owner.getInventory() + .countId( + 10) < 30) { + owner.informOfNpcMessage(new ChatMessage( + npc, + "It seems like you don't have all what's Required, come back later.", + owner)); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } - owner.informOfNpcMessage(new ChatMessage(npc, "Here is your new Dye, enjoy.", owner)); - world.getDelayedEventHandler().add(new MiniEvent(owner, 1000) { - public void action() { - if (owner.getInventory().remove(itemReq[ourOption], 1) > -1 && owner.getInventory().remove(10, 30) > -1) { + owner.informOfNpcMessage(new ChatMessage( + npc, + "Here is your new Dye, enjoy.", + owner)); + world.getDelayedEventHandler() + .add(new MiniEvent( + owner, + 1000) { + public void action() { + if (owner + .getInventory() + .remove(itemReq[ourOption], + 1) > -1 + && owner.getInventory() + .remove(10, + 30) > -1) { - owner.getInventory().add(new InvItem(dyes[ourOption])); - owner.getActionSender().sendInventory(); - } - } - }); + owner.getInventory() + .add(new InvItem( + dyes[ourOption])); + owner.getActionSender() + .sendInventory(); + } + } + }); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } - }); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + }); - } else { - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; + } else { + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + } + }); + owner.getActionSender() + .sendMenu( + diag); + } + }); + } + }); } - } }); - owner.getActionSender().sendMenu(diag); - } - }); - } + owner.getActionSender().sendMenu(names); + } }); - } - }); - owner.getActionSender().sendMenu(names); - } + } }); - } - }); - } + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Apothecary.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Apothecary.java index bfdf90b..61780b7 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Apothecary.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Apothecary.java @@ -16,98 +16,148 @@ import org.moparscape.msc.gs.model.World; */ public class Apothecary implements NpcHandler { - public static final World world = Instance.getWorld(); + public static final World world = Instance.getWorld(); - String[] names = { "Do you have a potion to make my hair fall out?", "I am in need of a strength potion", "No thanks" }; + String[] names = { "Do you have a potion to make my hair fall out?", + "I am in need of a strength potion", "No thanks" }; - public void handleNpc(final Npc npc, Player player) throws Exception { - player.setBusy(false); - player.informOfNpcMessage(new ChatMessage(npc, "Hello, can i help you?", player)); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { + public void handleNpc(final Npc npc, Player player) throws Exception { + player.setBusy(false); + player.informOfNpcMessage(new ChatMessage(npc, + "Hello, can i help you?", player)); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { - owner.setMenuHandler(new MenuHandler(names) { - public void handleReply(final int option, final String reply) { - if (option < 0 && option > names.length) - return; + owner.setMenuHandler(new MenuHandler(names) { + public void handleReply(final int option, final String reply) { + if (option < 0 && option > names.length) + return; - if (option == 0) { - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "Here you are, enjoy this", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("Apothecary hands you a mysterious potion"); - owner.getInventory().add(new InvItem(58)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } - }); - } - }); + if (option == 0) { + owner.informOfChatMessage(new ChatMessage(owner, + reply, npc)); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.informOfNpcMessage(new ChatMessage( + npc, + "Here you are, enjoy this", + owner)); + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "Apothecary hands you a mysterious potion"); + owner.getInventory() + .add(new InvItem( + 58)); + owner.getActionSender() + .sendInventory(); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + }); + } + }); - } else if (option == 1) { + } else if (option == 1) { - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "Bring me a limpwurt root and a spider egg and i will make you one", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - String[] s = { "I have the ingredients", "Ok ill find them." }; - owner.setMenuHandler(new MenuHandler(s) { - public void handleReply(final int option, final String reply) { - if (option == 0) { - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().countId(220) < 1 || owner.getInventory().countId(219) < 1) { - owner.informOfNpcMessage(new ChatMessage(npc, "It seems you don't have everything i asked for, come back later.", owner)); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } else { - if (owner.getInventory().remove(220, 1) > -1 && owner.getInventory().remove(219, 1) > -1) { - owner.getInventory().add(new InvItem(221)); - owner.getActionSender().sendMessage("Apothecary hands you a Strength Potion (4 dose)"); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } - } - } - }); - } else { + owner.informOfChatMessage(new ChatMessage(owner, + reply, npc)); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.informOfNpcMessage(new ChatMessage( + npc, + "Bring me a limpwurt root and a spider egg and i will make you one", + owner)); + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + String[] s = { + "I have the ingredients", + "Ok ill find them." }; + owner.setMenuHandler(new MenuHandler( + s) { + public void handleReply( + final int option, + final String reply) { + if (option == 0) { + owner.informOfChatMessage(new ChatMessage( + owner, + reply, + npc)); + world.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + if (owner + .getInventory() + .countId( + 220) < 1 + || owner.getInventory() + .countId( + 219) < 1) { + owner.informOfNpcMessage(new ChatMessage( + npc, + "It seems you don't have everything i asked for, come back later.", + owner)); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } else { + if (owner + .getInventory() + .remove(220, + 1) > -1 + && owner.getInventory() + .remove(219, + 1) > -1) { + owner.getInventory() + .add(new InvItem( + 221)); + owner.getActionSender() + .sendMessage( + "Apothecary hands you a Strength Potion (4 dose)"); + owner.getActionSender() + .sendInventory(); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + } + } + }); + } else { + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + } + } + }); + owner.getActionSender() + .sendMenu(s); + } + }); + } + }); + + } else { owner.setBusy(false); npc.setBusy(false); npc.unblock(); - } } - }); - owner.getActionSender().sendMenu(s); + } - }); - } - }); - - } else { - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); + }); + owner.getActionSender().sendMenu(names); } - - } }); - owner.getActionSender().sendMenu(names); - } - }); - } + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Bananas.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Bananas.java index 7d9abd2..e49d288 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Bananas.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Bananas.java @@ -16,92 +16,130 @@ import org.moparscape.msc.gs.model.World; */ public class Bananas implements NpcHandler { - public static final World world = Instance.getWorld(); + public static final World world = Instance.getWorld(); - String[] names = { "Yes i will sell you 20 bananas", "No sorry, i don't have any" }; + String[] names = { "Yes i will sell you 20 bananas", + "No sorry, i don't have any" }; - public void handleNpc(final Npc npc, Player player) throws Exception { - player.setBusy(false); - player.informOfNpcMessage(new ChatMessage(npc, "Hello, i am after 20 Bananas, do you have 20 you can sell?", player)); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { + public void handleNpc(final Npc npc, Player player) throws Exception { + player.setBusy(false); + player.informOfNpcMessage(new ChatMessage(npc, + "Hello, i am after 20 Bananas, do you have 20 you can sell?", + player)); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { - owner.setMenuHandler(new MenuHandler(names) { - public void handleReply(final int option, final String reply) { - if (option < 0 && option > names.length) - return; + owner.setMenuHandler(new MenuHandler(names) { + public void handleReply(final int option, final String reply) { + if (option < 0 && option > names.length) + return; - if (option == 0) { - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { + if (option == 0) { + owner.informOfChatMessage(new ChatMessage(owner, + reply, npc)); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "I will give you 30gp for your 20 bananas is that ok?", owner)); - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - String[] s = { "Sure", "Sorry, i would rather eat them" }; - owner.setMenuHandler(new MenuHandler(s) { - public void handleReply(final int option, final String reply) { - if (option == 0) { + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + owner.informOfNpcMessage(new ChatMessage( + npc, + "I will give you 30gp for your 20 bananas is that ok?", + owner)); + world.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + String[] s = { + "Sure", + "Sorry, i would rather eat them" }; + owner.setMenuHandler(new MenuHandler( + s) { + public void handleReply( + final int option, + final String reply) { + if (option == 0) { - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().countId(249) < 20) { - owner.informOfNpcMessage(new ChatMessage(npc, "It looks like you don't have enough Bananas, don't waste my time.", owner)); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } else { - int count = 0; - for (int i = 0; i < 20; i++) { - if (owner.getInventory().remove(249, 1) > -1) { - count++; + owner.informOfChatMessage(new ChatMessage( + owner, + reply, + npc)); + world.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + if (owner + .getInventory() + .countId( + 249) < 20) { + owner.informOfNpcMessage(new ChatMessage( + npc, + "It looks like you don't have enough Bananas, don't waste my time.", + owner)); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } else { + int count = 0; + for (int i = 0; i < 20; i++) { + if (owner + .getInventory() + .remove(249, + 1) > -1) { + count++; + } + } + if (count == 20) { + owner.getInventory() + .add(new InvItem( + 10, + 30)); + owner.getActionSender() + .sendMessage( + "You receive 30gp"); + owner.getActionSender() + .sendInventory(); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + } + } + }); + } else { + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + } + }); + owner.getActionSender() + .sendMenu( + s); + + } + }); + + } + }); } - } - if (count == 20) { - owner.getInventory().add(new InvItem(10, 30)); - owner.getActionSender().sendMessage("You receive 30gp"); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } - } - } - }); - } else { - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } - } - }); - owner.getActionSender().sendMenu(s); - + }); + } else { + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; } - }); } - }); - } - }); - } else { - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; + }); + owner.getActionSender().sendMenu(names); } - - } }); - owner.getActionSender().sendMenu(names); - } - }); - } + } } diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Bankers.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Bankers.java index eebe1e6..b0e2537 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Bankers.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Bankers.java @@ -8,28 +8,30 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class Bankers implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - player.setBusy(true); - player.informOfChatMessage(new ChatMessage(player, "I'd like to access my bank account please", npc)); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "Certainly " + (owner.isMale() ? "sir" : "miss"), owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.setAccessingBank(true); - owner.getActionSender().showBank(); - } + public void handleNpc(final Npc npc, Player player) throws Exception { + player.setBusy(true); + player.informOfChatMessage(new ChatMessage(player, + "I'd like to access my bank account please", npc)); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.informOfNpcMessage(new ChatMessage(npc, "Certainly " + + (owner.isMale() ? "sir" : "miss"), owner)); + Instance.getDelayedEventHandler().add(new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.setAccessingBank(true); + owner.getActionSender().showBank(); + } + }); + npc.unblock(); + } }); - npc.unblock(); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Boat.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Boat.java index 565b46d..1cad89c 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Boat.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Boat.java @@ -10,66 +10,85 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class Boat implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { + public void handleNpc(final Npc npc, Player player) throws Exception { - player.informOfNpcMessage(new ChatMessage(npc, "G'day sailor, where would you like to go?", player)); - player.setBusy(true); - final String[] temp; - if (npc.getID() == 163) { - temp = new String[] { "Port Sarim" }; - } else { - temp = new String[] { "Karamja" }; - } - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.setBusy(false); - owner.setMenuHandler(new MenuHandler(temp) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy() || option < 0 || option >= temp.length) { - npc.unblock(); - return; - } - owner.informOfChatMessage(new ChatMessage(owner, reply + " please", npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("You board the ship"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - int count = owner.getInventory().countId(318); - if (count > 0) { - for (int i = 0; i < count; i++) { - owner.getActionSender().sendMessage("The Officer confiscates your Karamaja rum"); - if (owner.getInventory().remove(new InvItem(318)) > -1) - continue; - else - break; - } - owner.getActionSender().sendInventory(); + player.informOfNpcMessage(new ChatMessage(npc, + "G'day sailor, where would you like to go?", player)); + player.setBusy(true); + final String[] temp; + if (npc.getID() == 163) { + temp = new String[] { "Port Sarim" }; + } else { + temp = new String[] { "Karamja" }; + } + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.setBusy(false); + owner.setMenuHandler(new MenuHandler(temp) { + public void handleReply(final int option, final String reply) { + if (owner.isBusy() || option < 0 + || option >= temp.length) { + npc.unblock(); + return; + } + owner.informOfChatMessage(new ChatMessage(owner, reply + + " please", npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender().sendMessage( + "You board the ship"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + int count = owner + .getInventory() + .countId(318); + if (count > 0) { + for (int i = 0; i < count; i++) { + owner.getActionSender() + .sendMessage( + "The Officer confiscates your Karamaja rum"); + if (owner + .getInventory() + .remove(new InvItem( + 318)) > -1) + continue; + else + break; + } + owner.getActionSender() + .sendInventory(); + } + if (npc.getID() == 163) { + owner.teleport(269, + 648, false); + } else { + owner.teleport(324, + 713, false); + } + + owner.getActionSender() + .sendMessage( + "The ship arrives at " + + reply); + owner.setBusy(false); + npc.unblock(); + } + }); + } + }); } - if (npc.getID() == 163) { - owner.teleport(269, 648, false); - } else { - owner.teleport(324, 713, false); - } - - owner.getActionSender().sendMessage("The ship arrives at " + reply); - owner.setBusy(false); - npc.unblock(); - } }); - } - }); - } + owner.getActionSender().sendMenu(temp); + } }); - owner.getActionSender().sendMenu(temp); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Certer.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Certer.java index 138dc2f..3dcb92b 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Certer.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Certer.java @@ -12,150 +12,281 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class Certer implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - final CerterDef certerDef = EntityHandler.getCerterDef(npc.getID()); - if (certerDef == null) { - return; - } - final String[] names = certerDef.getCertNames(); - player.informOfNpcMessage(new ChatMessage(npc, "Welcome to my " + certerDef.getType() + " exchange stall", player)); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.setBusy(false); - String[] options = new String[] { "I have some certificates to trade in", "I have some " + certerDef.getType() + " to trade in" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy()) { - return; - } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { + public void handleNpc(final Npc npc, Player player) throws Exception { + final CerterDef certerDef = EntityHandler.getCerterDef(npc.getID()); + if (certerDef == null) { + return; + } + final String[] names = certerDef.getCertNames(); + player.informOfNpcMessage(new ChatMessage(npc, "Welcome to my " + + certerDef.getType() + " exchange stall", player)); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { owner.setBusy(false); - switch (option) { - case 0: - owner.getActionSender().sendMessage("What sort of certificate do you wish to trade in?"); - owner.setMenuHandler(new MenuHandler(names) { - public void handleReply(final int index, String reply) { - owner.getActionSender().sendMessage("How many certificates do you wish to trade in?"); - String[] options = new String[] { "One", "Two", "Three", "Four", "Five", "All to bank" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(int certAmount, String reply) { - owner.resetPath(); - int certID = certerDef.getCertID(index); - if (certID < 0) { // This - // shouldn't - // happen + String[] options = new String[] { + "I have some certificates to trade in", + "I have some " + certerDef.getType() + " to trade in" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + if (owner.isBusy()) { return; - } - int itemID = certerDef.getItemID(index); - if (certAmount == 5) { - certAmount = owner.getInventory().countId(certID); - if (certAmount <= 0) { - owner.getActionSender().sendMessage("You don't have any " + names[index] + " certificates"); - return; - } - // MIGHT - // BE - // SMART - // TO - // CHECK - // THEIR - // BANK - // ISN'T - // FULL - InvItem bankItem = new InvItem(itemID, certAmount * 5); - if (owner.getInventory().remove(new InvItem(certID, certAmount)) > -1) { - owner.getActionSender().sendMessage("You exchange the certificates, " + bankItem.getAmount() + " " + bankItem.getDef().getName() + " is added to your bank"); - owner.getBank().add(bankItem); - } - } else { - certAmount += 1; - int itemAmount = certAmount * 5; - if (owner.getInventory().countId(certID) < certAmount) { - owner.getActionSender().sendMessage("You don't have that many certificates"); - return; - } - if (owner.getInventory().remove(certID, certAmount) > -1) { - owner.getActionSender().sendMessage("You exchange the certificates for " + certerDef.getType() + "."); - for (int x = 0; x < itemAmount; x++) { - owner.getInventory().add(new InvItem(itemID, 1)); - } - } - } - owner.getActionSender().sendInventory(); } - }); - owner.getActionSender().sendMenu(options); + owner.informOfChatMessage(new ChatMessage(owner, reply, + npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + switch (option) { + case 0: + owner.getActionSender() + .sendMessage( + "What sort of certificate do you wish to trade in?"); + owner.setMenuHandler(new MenuHandler( + names) { + public void handleReply( + final int index, + String reply) { + owner.getActionSender() + .sendMessage( + "How many certificates do you wish to trade in?"); + String[] options = new String[] { + "One", "Two", + "Three", "Four", + "Five", + "All to bank" }; + owner.setMenuHandler(new MenuHandler( + options) { + public void handleReply( + int certAmount, + String reply) { + owner.resetPath(); + int certID = certerDef + .getCertID(index); + if (certID < 0) { // This + // shouldn't + // happen + return; + } + int itemID = certerDef + .getItemID(index); + if (certAmount == 5) { + certAmount = owner + .getInventory() + .countId( + certID); + if (certAmount <= 0) { + owner.getActionSender() + .sendMessage( + "You don't have any " + + names[index] + + " certificates"); + return; + } + // MIGHT + // BE + // SMART + // TO + // CHECK + // THEIR + // BANK + // ISN'T + // FULL + InvItem bankItem = new InvItem( + itemID, + certAmount * 5); + if (owner + .getInventory() + .remove(new InvItem( + certID, + certAmount)) > -1) { + owner.getActionSender() + .sendMessage( + "You exchange the certificates, " + + bankItem + .getAmount() + + " " + + bankItem + .getDef() + .getName() + + " is added to your bank"); + owner.getBank() + .add(bankItem); + } + } else { + certAmount += 1; + int itemAmount = certAmount * 5; + if (owner + .getInventory() + .countId( + certID) < certAmount) { + owner.getActionSender() + .sendMessage( + "You don't have that many certificates"); + return; + } + if (owner + .getInventory() + .remove(certID, + certAmount) > -1) { + owner.getActionSender() + .sendMessage( + "You exchange the certificates for " + + certerDef + .getType() + + "."); + for (int x = 0; x < itemAmount; x++) { + owner.getInventory() + .add(new InvItem( + itemID, + 1)); + } + } + } + owner.getActionSender() + .sendInventory(); + } + }); + owner.getActionSender() + .sendMenu(options); + } + }); + owner.getActionSender().sendMenu( + names); + break; + case 1: + owner.getActionSender() + .sendMessage( + "What sort of " + + certerDef + .getType() + + " do you wish to trade in?"); + owner.setMenuHandler(new MenuHandler( + names) { + public void handleReply( + final int index, + String reply) { + owner.getActionSender() + .sendMessage( + "How many " + + certerDef + .getType() + + " do you wish to trade in?"); + String[] options = new String[] { + "Five", "Ten", + "Fifteen", + "Twenty", + "Twentyfive", + "All from bank" }; + owner.setMenuHandler(new MenuHandler( + options) { + public void handleReply( + int certAmount, + String reply) { + owner.resetPath(); + int certID = certerDef + .getCertID(index); + if (certID < 0) { // This + // shouldn't + // happen + return; + } + int itemID = certerDef + .getItemID(index); + if (certAmount == 5) { + certAmount = (int) (owner + .getBank() + .countId( + itemID) / 5); + int itemAmount = certAmount * 5; + if (itemAmount <= 0) { + owner.getActionSender() + .sendMessage( + "You don't have any " + + names[index] + + " to cert"); + return; + } + if (owner + .getBank() + .remove(itemID, + itemAmount) > -1) { + owner.getActionSender() + .sendMessage( + "You exchange the " + + certerDef + .getType() + + ", " + + itemAmount + + " " + + EntityHandler + .getItemDef( + itemID) + .getName() + + " is taken from your bank"); + owner.getInventory() + .add(new InvItem( + certID, + certAmount)); + } + } else { + certAmount += 1; + int itemAmount = certAmount * 5; + if (owner + .getInventory() + .countId( + itemID) < itemAmount) { + owner.getActionSender() + .sendMessage( + "You don't have that many " + + certerDef + .getType()); + return; + } + owner.getActionSender() + .sendMessage( + "You exchange the " + + certerDef + .getType() + + " for certificates."); + for (int x = 0; x < itemAmount; x++) { + owner.getInventory() + .remove(itemID, + 1); + } + owner.getInventory() + .add(new InvItem( + certID, + certAmount)); + } + owner.getActionSender() + .sendInventory(); + } + }); + owner.getActionSender() + .sendMenu(options); + } + }); + owner.getActionSender().sendMenu( + names); + break; + } + npc.unblock(); + } + }); } - }); - owner.getActionSender().sendMenu(names); - break; - case 1: - owner.getActionSender().sendMessage("What sort of " + certerDef.getType() + " do you wish to trade in?"); - owner.setMenuHandler(new MenuHandler(names) { - public void handleReply(final int index, String reply) { - owner.getActionSender().sendMessage("How many " + certerDef.getType() + " do you wish to trade in?"); - String[] options = new String[] { "Five", "Ten", "Fifteen", "Twenty", "Twentyfive", "All from bank" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(int certAmount, String reply) { - owner.resetPath(); - int certID = certerDef.getCertID(index); - if (certID < 0) { // This - // shouldn't - // happen - return; - } - int itemID = certerDef.getItemID(index); - if (certAmount == 5) { - certAmount = (int) (owner.getBank().countId(itemID) / 5); - int itemAmount = certAmount * 5; - if (itemAmount <= 0) { - owner.getActionSender().sendMessage("You don't have any " + names[index] + " to cert"); - return; - } - if (owner.getBank().remove(itemID, itemAmount) > -1) { - owner.getActionSender().sendMessage("You exchange the " + certerDef.getType() + ", " + itemAmount + " " + EntityHandler.getItemDef(itemID).getName() + " is taken from your bank"); - owner.getInventory().add(new InvItem(certID, certAmount)); - } - } else { - certAmount += 1; - int itemAmount = certAmount * 5; - if (owner.getInventory().countId(itemID) < itemAmount) { - owner.getActionSender().sendMessage("You don't have that many " + certerDef.getType()); - return; - } - owner.getActionSender().sendMessage("You exchange the " + certerDef.getType() + " for certificates."); - for (int x = 0; x < itemAmount; x++) { - owner.getInventory().remove(itemID, 1); - } - owner.getInventory().add(new InvItem(certID, certAmount)); - } - owner.getActionSender().sendInventory(); - } - }); - owner.getActionSender().sendMenu(options); - } - }); - owner.getActionSender().sendMenu(names); - break; - } - npc.unblock(); - } - }); - } + }); + owner.getActionSender().sendMenu(options); + } }); - owner.getActionSender().sendMenu(options); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/EntranaMonks.java b/GameServer/src/org/moparscape/msc/gs/npchandler/EntranaMonks.java index 5409c79..b320ada 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/EntranaMonks.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/EntranaMonks.java @@ -9,40 +9,76 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class EntranaMonks implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - final boolean toEntrana = !player.getLocation().inBounds(390, - 530, 440, 580); player.informOfNpcMessage(new ChatMessage(npc, - toEntrana ? - "Are you looking to take passage to our holy island?" : - "Are you ready to go back to the mainland?", player)); + public void handleNpc(final Npc npc, Player player) throws Exception { + final boolean toEntrana = !player.getLocation().inBounds(390, 530, 440, + 580); + player.informOfNpcMessage(new ChatMessage( + npc, + toEntrana ? "Are you looking to take passage to our holy island?" + : "Are you ready to go back to the mainland?", player)); player.setBusy(true); Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { owner.setBusy(false); String[] options - = {"Yes okay I'm ready to go", "No thanks"}; - owner.setMenuHandler(new MenuHandler(options) { public void - handleReply(final int option, final String reply) { - if(owner.isBusy()) { npc.unblock(); return; } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); Instance.getDelayedEventHandler().add(new - ShortEvent(owner) { public void action() { if(option == 0) { - owner.getActionSender().sendMessage("You board the ship"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { if(toEntrana) { owner.teleport(418, - 570, false); } else { owner.teleport(263, 659, false); } - owner.getActionSender().sendMessage("The ship arrives at " + - (toEntrana ? "Entrana" : "Port Sarim")); owner.setBusy(false); - npc.unblock(); } }); } else { owner.setBusy(false); - npc.unblock(); } } }); } }); - owner.getActionSender().sendMenu(options); } }); + public void action() { + owner.setBusy(false); + String[] options = { "Yes okay I'm ready to go", "No thanks" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + if (owner.isBusy()) { + npc.unblock(); + return; + } + owner.informOfChatMessage(new ChatMessage(owner, reply, + npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (option == 0) { + owner.getActionSender() + .sendMessage( + "You board the ship"); + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + if (toEntrana) { + owner.teleport( + 418, + 570, + false); + } else { + owner.teleport( + 263, + 659, + false); + } + owner.getActionSender() + .sendMessage( + "The ship arrives at " + + (toEntrana ? "Entrana" + : "Port Sarim")); + owner.setBusy(false); + npc.unblock(); + } + }); + } else { + owner.setBusy(false); + npc.unblock(); + } + } + }); + } + }); + owner.getActionSender().sendMenu(options); + } + }); npc.blockedBy(player); return; - - } + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/KebabSeller.java b/GameServer/src/org/moparscape/msc/gs/npchandler/KebabSeller.java index 81df855..63e83e1 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/KebabSeller.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/KebabSeller.java @@ -10,56 +10,73 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class KebabSeller implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - player.informOfNpcMessage(new ChatMessage(npc, "Would you like to buy a nice kebab? Only 1 gold", player)); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.setBusy(false); - String[] options = new String[] { "I think I'll give it a miss", "Yes please" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy()) { - return; - } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { + public void handleNpc(final Npc npc, Player player) throws Exception { + player.informOfNpcMessage(new ChatMessage(npc, + "Would you like to buy a nice kebab? Only 1 gold", player)); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { owner.setBusy(false); - if (option == 1) { - if (owner.getInventory().remove(10, 1) > -1) { - owner.getActionSender().sendMessage("You buy a kebab"); - owner.getInventory().add(new InvItem(210, 1)); - owner.getActionSender().sendInventory(); - npc.unblock(); - } else { - owner.informOfChatMessage(new ChatMessage(owner, "Oops I forgot to bring any money with me", npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.informOfNpcMessage(new ChatMessage(npc, "Come back when you have some", owner)); - npc.unblock(); - } - }); - } - } else { - npc.unblock(); - } - } - }); - } + String[] options = new String[] { + "I think I'll give it a miss", "Yes please" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + if (owner.isBusy()) { + return; + } + owner.informOfChatMessage(new ChatMessage(owner, reply, + npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + if (option == 1) { + if (owner.getInventory().remove(10, + 1) > -1) { + owner.getActionSender() + .sendMessage( + "You buy a kebab"); + owner.getInventory().add( + new InvItem(210, 1)); + owner.getActionSender() + .sendInventory(); + npc.unblock(); + } else { + owner.informOfChatMessage(new ChatMessage( + owner, + "Oops I forgot to bring any money with me", + npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + owner.setBusy(false); + owner.informOfNpcMessage(new ChatMessage( + npc, + "Come back when you have some", + owner)); + npc.unblock(); + } + }); + } + } else { + npc.unblock(); + } + } + }); + } + }); + owner.getActionSender().sendMenu(options); + } }); - owner.getActionSender().sendMenu(options); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/MakeOverMage.java b/GameServer/src/org/moparscape/msc/gs/npchandler/MakeOverMage.java index 62dad4e..1a351d9 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/MakeOverMage.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/MakeOverMage.java @@ -9,53 +9,70 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class MakeOverMage implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - player.informOfNpcMessage(new ChatMessage(npc, "Are you happy with your looks?", player)); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "If not i can change them for the cheap cheap price of 3000 coins", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - String[] options = new String[] { "I'm happy with how I look thank you", "Yes change my looks please" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy()) { - return; - } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); + public void handleNpc(final Npc npc, Player player) throws Exception { + player.informOfNpcMessage(new ChatMessage(npc, + "Are you happy with your looks?", player)); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.informOfNpcMessage(new ChatMessage( + npc, + "If not i can change them for the cheap cheap price of 3000 coins", + owner)); Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - switch (option) { - case 1: - if (owner.getInventory().countId(10) < 3000) { - owner.informOfChatMessage(new ChatMessage(owner, "I'll just go get the cash", npc)); - } else if (owner.getInventory().remove(10, 3000) > -1) { - owner.setChangingAppearance(true); - owner.getActionSender().sendAppearanceScreen(); - owner.getActionSender().sendInventory(); - } - break; + public void action() { + owner.setBusy(false); + String[] options = new String[] { + "I'm happy with how I look thank you", + "Yes change my looks please" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, + final String reply) { + if (owner.isBusy()) { + return; + } + owner.informOfChatMessage(new ChatMessage( + owner, reply, npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + switch (option) { + case 1: + if (owner.getInventory() + .countId(10) < 3000) { + owner.informOfChatMessage(new ChatMessage( + owner, + "I'll just go get the cash", + npc)); + } else if (owner + .getInventory() + .remove(10, 3000) > -1) { + owner.setChangingAppearance(true); + owner.getActionSender() + .sendAppearanceScreen(); + owner.getActionSender() + .sendInventory(); + } + break; + } + npc.unblock(); + } + }); + } + }); + owner.getActionSender().sendMenu(options); } - npc.unblock(); - } }); - } - }); - owner.getActionSender().sendMenu(options); - } + } }); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/MonkHealer.java b/GameServer/src/org/moparscape/msc/gs/npchandler/MonkHealer.java index f26c5e6..47f48dc 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/MonkHealer.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/MonkHealer.java @@ -9,55 +9,69 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class MonkHealer implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - player.informOfNpcMessage(new ChatMessage(npc, "Greetings traveller", player)); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.setBusy(false); - String[] options = new String[] { "Can you heal me? I'm injured" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy()) { - return; - } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (option == 0) { - owner.informOfNpcMessage(new ChatMessage(npc, "Ok", owner)); - owner.getActionSender().sendMessage("The monk places his hands on your head"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You feel a little better"); - int newHp = owner.getCurStat(3) + 10; - if (newHp > owner.getMaxStat(3)) { - newHp = owner.getMaxStat(3); - } - owner.setCurStat(3, newHp); - owner.getActionSender().sendStat(3); - npc.unblock(); + public void handleNpc(final Npc npc, Player player) throws Exception { + player.informOfNpcMessage(new ChatMessage(npc, "Greetings traveller", + player)); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.setBusy(false); + String[] options = new String[] { "Can you heal me? I'm injured" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + if (owner.isBusy()) { + return; + } + owner.informOfChatMessage(new ChatMessage(owner, reply, + npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (option == 0) { + owner.informOfNpcMessage(new ChatMessage( + npc, "Ok", owner)); + owner.getActionSender() + .sendMessage( + "The monk places his hands on your head"); + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You feel a little better"); + int newHp = owner + .getCurStat(3) + 10; + if (newHp > owner + .getMaxStat(3)) { + newHp = owner + .getMaxStat(3); + } + owner.setCurStat(3, + newHp); + owner.getActionSender() + .sendStat(3); + npc.unblock(); + } + }); + } else { + owner.setBusy(false); + npc.unblock(); + } + } + }); } - }); - } else { - owner.setBusy(false); - npc.unblock(); - } - } - }); - } + }); + owner.getActionSender().sendMenu(options); + } }); - owner.getActionSender().sendMenu(options); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandler.java b/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandler.java index 1058f03..5a274e0 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandler.java @@ -4,5 +4,5 @@ import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; public interface NpcHandler { - public void handleNpc(final Npc npc, Player player) throws Exception; + public void handleNpc(final Npc npc, Player player) throws Exception; } diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandlerDef.java b/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandlerDef.java index d75eb2e..f8536db 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandlerDef.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/NpcHandlerDef.java @@ -4,45 +4,45 @@ package org.moparscape.msc.gs.npchandler; * The definition of a npc handler, for use with XStream. */ public class NpcHandlerDef { - /** - * The name of the handler class - */ - public String className; - /** - * The IDs of npcs which the handler is responsible for - */ - public int[] ids; + /** + * The name of the handler class + */ + public String className; + /** + * The IDs of npcs which the handler is responsible for + */ + public int[] ids; - /** - * Constructs a new packet handler definition, entailing that npcs with the - * given IDs are to be handled by the specified class. - * - * @param ids - * The IDs of npcs to be handled - * @param className - * The name of the packet handler class - */ - public NpcHandlerDef(int[] ids, String className) { - this.ids = ids; - this.className = className; - } + /** + * Constructs a new packet handler definition, entailing that npcs with the + * given IDs are to be handled by the specified class. + * + * @param ids + * The IDs of npcs to be handled + * @param className + * The name of the packet handler class + */ + public NpcHandlerDef(int[] ids, String className) { + this.ids = ids; + this.className = className; + } - /** - * Returns the IDs of npcs to be handled. - * - * @return An int array containing the IDs of npcs to be - * handled. - */ - public int[] getAssociatedNpcs() { - return ids; - } + /** + * Returns the IDs of npcs to be handled. + * + * @return An int array containing the IDs of npcs to be + * handled. + */ + public int[] getAssociatedNpcs() { + return ids; + } - /** - * Returns the name of the npc handler class. - * - * @return The name of the npc handler's class - */ - public String getClassName() { - return className; - } + /** + * Returns the name of the npc handler class. + * + * @return The name of the npc handler's class + */ + public String getClassName() { + return className; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/OtherNPC.java b/GameServer/src/org/moparscape/msc/gs/npchandler/OtherNPC.java index f578075..cf04cfb 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/OtherNPC.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/OtherNPC.java @@ -15,45 +15,66 @@ import org.moparscape.msc.gs.model.World; */ public class OtherNPC implements NpcHandler { - public static final World world = Instance.getWorld(); + public static final World world = Instance.getWorld(); - String[][] chats = { { "I have nothing to say, leave me be!", "Ok sorry to bother you" }, { "Hi there, do you have a quest for me?", "No, I have no need of your time." }, { "Can you tell me where I can find catherby", "I'm sorry, but I am not familiar with this area either" }, { "I'm not your buddy, pal", "I'm not your pal, guy." }, { "Be gone, ye haughty, swill-fed baggage!", "Uh, okay." }, { "I've lost my marbles!", "Okay I'll just leave you alone then Tootles." }, { "I'm captain jack sparrow, leader of the black perl!", "really? thats so 3 years ago.." }, { "Hi, are you selling any godswords??", "What the hell are you doing here mate?" }, { "This great town needs a makeover don't you think?", "I like it the way it is" }, { "Huh was that you talkin to me?", "No, of course not." }, { "Your name is -name- huh? i have heard of a legend by that name", "Clearly your not mistaken" }, { "-name- please go away", "Fine" } }; + String[][] chats = { + { "I have nothing to say, leave me be!", "Ok sorry to bother you" }, + { "Hi there, do you have a quest for me?", + "No, I have no need of your time." }, + { "Can you tell me where I can find catherby", + "I'm sorry, but I am not familiar with this area either" }, + { "I'm not your buddy, pal", "I'm not your pal, guy." }, + { "Be gone, ye haughty, swill-fed baggage!", "Uh, okay." }, + { "I've lost my marbles!", + "Okay I'll just leave you alone then Tootles." }, + { "I'm captain jack sparrow, leader of the black perl!", + "really? thats so 3 years ago.." }, + { "Hi, are you selling any godswords??", + "What the hell are you doing here mate?" }, + { "This great town needs a makeover don't you think?", + "I like it the way it is" }, + { "Huh was that you talkin to me?", "No, of course not." }, + { "Your name is -name- huh? i have heard of a legend by that name", + "Clearly your not mistaken" }, + { "-name- please go away", "Fine" } }; - public void handleNpc(final Npc npc, Player player) throws Exception { + public void handleNpc(final Npc npc, Player player) throws Exception { - if (npc.getID() == 28) { - player.informOfNpcMessage(new ChatMessage(npc, "Hello sir, spare me some money please?", player)); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.informOfChatMessage(new ChatMessage(owner, "No sorry, i'm broke.", npc)); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; + if (npc.getID() == 28) { + player.informOfNpcMessage(new ChatMessage(npc, + "Hello sir, spare me some money please?", player)); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.informOfChatMessage(new ChatMessage(owner, + "No sorry, i'm broke.", npc)); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + }); + } else if (!npc.getDef().isAttackable()) { + + /** + * ALL NPC's will get this, random chats. + */ + int rnd = Formulae.Rand(0, chats.length); + player.setLastRandom(rnd); + String chat = chats[rnd][0]; + chat = chat.replace("-name-", player.getUsername()); + player.informOfNpcMessage(new ChatMessage(npc, chat, player)); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + String chat2 = chats[owner.getLastRandom()][1]; + chat2 = chat2.replace("-name-", owner.getUsername()); + owner.informOfChatMessage(new ChatMessage(owner, chat2, npc)); + owner.setBusy(false); + npc.setBusy(false); + npc.unblock(); + return; + } + }); } - }); - } else if (!npc.getDef().isAttackable()) { - - /** - * ALL NPC's will get this, random chats. - */ - int rnd = Formulae.Rand(0, chats.length); - player.lastRandom = rnd; - String chat = chats[rnd][0]; - chat = chat.replace("-name-", player.getUsername()); - player.informOfNpcMessage(new ChatMessage(npc, chat, player)); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - String chat2 = chats[owner.lastRandom][1]; - chat2 = chat2.replace("-name-", owner.getUsername()); - owner.informOfChatMessage(new ChatMessage(owner, chat2, npc)); - owner.setBusy(false); - npc.setBusy(false); - npc.unblock(); - return; - } - }); } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/ShopKeeper.java b/GameServer/src/org/moparscape/msc/gs/npchandler/ShopKeeper.java index 9a9e0c5..8517130 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/ShopKeeper.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/ShopKeeper.java @@ -10,76 +10,100 @@ import org.moparscape.msc.gs.model.Shop; import org.moparscape.msc.gs.model.World; public class ShopKeeper implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - final Shop shop = world.getShop(npc.getLocation()); - if (shop == null) { - return; - } - try { + public void handleNpc(final Npc npc, Player player) throws Exception { + final Shop shop = world.getShop(npc.getLocation()); + if (shop == null) { + return; + } + try { - if (shop.getGreeting() != null) { + if (shop.getGreeting() != null) { - if (shop.getGreeting().equals("Good day monsieur, Would you like ze nice freshly baked bread?")) { - if (player.npcThief[0] == true) { - player.informOfNpcMessage(new ChatMessage(npc, org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving.Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], player)); - return; - } - } - if (player.npcThief[3] == true) { - if (shop.getGreeting().equals("Silver! Silver!")) { - player.informOfNpcMessage(new ChatMessage(npc, org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving.Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], player)); - return; - } - } - if (player.npcThief[4] == true) { - if (shop.getGreeting().equals("Get your exotic spices here, rare very valuable spices here")) { - player.informOfNpcMessage(new ChatMessage(npc, org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving.Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], player)); - return; - } - } - if (player.npcThief[5] == true) { - if (shop.getGreeting().equals("Here, look at my lovely gems")) { - player.informOfNpcMessage(new ChatMessage(npc, org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving.Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], player)); - return; - } - } - player.informOfNpcMessage(new ChatMessage(npc, shop.getGreeting(), player)); - } - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.setBusy(false); - owner.setMenuHandler(new MenuHandler(shop.getOptions()) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy()) { - return; - } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - if (option == 0) { - owner.setAccessingShop(shop); - owner.getActionSender().showShop(shop); - } - npc.unblock(); + if (shop.getGreeting() + .equals("Good day monsieur, Would you like ze nice freshly baked bread?")) { + if (player.getNpcThief()[0] == true) { + player.informOfNpcMessage(new ChatMessage( + npc, + org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving + .Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], + player)); + return; + } } - }); + if (player.getNpcThief()[3] == true) { + if (shop.getGreeting().equals("Silver! Silver!")) { + player.informOfNpcMessage(new ChatMessage( + npc, + org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving + .Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], + player)); + return; + } + } + if (player.getNpcThief()[4] == true) { + if (shop.getGreeting() + .equals("Get your exotic spices here, rare very valuable spices here")) { + player.informOfNpcMessage(new ChatMessage( + npc, + org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving + .Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], + player)); + return; + } + } + if (player.getNpcThief()[5] == true) { + if (shop.getGreeting().equals( + "Here, look at my lovely gems")) { + player.informOfNpcMessage(new ChatMessage( + npc, + org.moparscape.msc.gs.plugins.extras.Thieving.StealChats[org.moparscape.msc.gs.plugins.extras.Thieving + .Rands(org.moparscape.msc.gs.plugins.extras.Thieving.StealChats.length)], + player)); + return; + } + } + player.informOfNpcMessage(new ChatMessage(npc, shop + .getGreeting(), player)); } - }); - owner.getActionSender().sendMenu(shop.getOptions()); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.setBusy(false); + owner.setMenuHandler(new MenuHandler(shop.getOptions()) { + public void handleReply(final int option, + final String reply) { + if (owner.isBusy()) { + return; + } + owner.informOfChatMessage(new ChatMessage(owner, + reply, npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + if (option == 0) { + owner.setAccessingShop(shop); + owner.getActionSender() + .showShop(shop); + } + npc.unblock(); + } + }); + } + }); + owner.getActionSender().sendMenu(shop.getOptions()); + } + }); + npc.blockedBy(player); + } catch (Exception e) { + e.printStackTrace(); } - }); - npc.blockedBy(player); - } catch (Exception e) { - e.printStackTrace(); } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java index 886ccd0..3dcb868 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Tanner.java @@ -11,81 +11,120 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class Tanner implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - player.informOfNpcMessage(new ChatMessage(npc, "Greeting friend i'm a manufacturer of leather", player)); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.setBusy(false); - String[] options = new String[] { "Can I buy some leather then?", "Here's some cow hides, can I buy some leather now?", "Leather is rather weak stuff" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy()) { - return; + public void handleNpc(final Npc npc, Player player) throws Exception { + player.informOfNpcMessage(new ChatMessage(npc, + "Greeting friend i'm a manufacturer of leather", player)); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.setBusy(false); + String[] options = new String[] { + "Can I buy some leather then?", + "Here's some cow hides, can I buy some leather now?", + "Leather is rather weak stuff" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + if (owner.isBusy()) { + return; + } + owner.informOfChatMessage(new ChatMessage(owner, reply, + npc)); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + switch (option) { + case 0: + owner.informOfNpcMessage(new ChatMessage( + npc, + "I make leather from cow hides", + owner)); + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.informOfNpcMessage(new ChatMessage( + npc, + "Bring me some of them and a gold coin per hide", + owner)); + npc.unblock(); + } + }); + break; + case 1: + owner.informOfNpcMessage(new ChatMessage( + npc, "Ok", owner)); + world.getDelayedEventHandler() + .add(new DelayedEvent( + owner, 500) { + public void run() { + InvItem hides = owner + .getInventory() + .get(owner + .getInventory() + .getLastIndexById( + 147)); + if (hides == null) { + owner.getActionSender() + .sendMessage( + "You have run out of cow hides"); + matchRunning = false; + owner.setBusy(false); + } else if (owner + .getInventory() + .countId(10) < 1) { + owner.getActionSender() + .sendMessage( + "You have run out of coins"); + matchRunning = false; + owner.setBusy(false); + } else if (owner + .getInventory() + .remove(hides) > -1 + && owner.getInventory() + .remove(10, + 1) > -1) { + owner.getInventory() + .add(new InvItem( + 148, + 1)); + owner.getActionSender() + .sendInventory(); + } else { + matchRunning = false; + owner.setBusy(false); + } + } + }); + npc.unblock(); + break; + case 2: + owner.setBusy(false); + owner.informOfNpcMessage(new ChatMessage( + npc, + "Well yes if all you're concerned with is how much it will protect you in a fight", + owner)); + npc.unblock(); + break; + default: + owner.setBusy(false); + npc.unblock(); + break; + } + + } + }); + } + }); + owner.getActionSender().sendMenu(options); } - owner.informOfChatMessage(new ChatMessage(owner, reply, npc)); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - switch (option) { - case 0: - owner.informOfNpcMessage(new ChatMessage(npc, "I make leather from cow hides", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.informOfNpcMessage(new ChatMessage(npc, "Bring me some of them and a gold coin per hide", owner)); - npc.unblock(); - } - }); - break; - case 1: - owner.informOfNpcMessage(new ChatMessage(npc, "Ok", owner)); - world.getDelayedEventHandler().add(new DelayedEvent(owner, 500) { - public void run() { - InvItem hides = owner.getInventory().get(owner.getInventory().getLastIndexById(147)); - if (hides == null) { - owner.getActionSender().sendMessage("You have run out of cow hides"); - matchRunning = false; - owner.setBusy(false); - } else if (owner.getInventory().countId(10) < 1) { - owner.getActionSender().sendMessage("You have run out of coins"); - matchRunning = false; - owner.setBusy(false); - } else if (owner.getInventory().remove(hides) > -1 && owner.getInventory().remove(10, 1) > -1) { - owner.getInventory().add(new InvItem(148, 1)); - owner.getActionSender().sendInventory(); - } else { - matchRunning = false; - owner.setBusy(false); - } - } - }); - npc.unblock(); - break; - case 2: - owner.setBusy(false); - owner.informOfNpcMessage(new ChatMessage(npc, "Well yes if all you're concerned with is how much it will protect you in a fight", owner)); - npc.unblock(); - break; - default: - owner.setBusy(false); - npc.unblock(); - break; - } - - } - }); - } }); - owner.getActionSender().sendMenu(options); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/npchandler/Thrander.java b/GameServer/src/org/moparscape/msc/gs/npchandler/Thrander.java index 5a1d281..f3de8e9 100644 --- a/GameServer/src/org/moparscape/msc/gs/npchandler/Thrander.java +++ b/GameServer/src/org/moparscape/msc/gs/npchandler/Thrander.java @@ -8,27 +8,36 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; public class Thrander implements NpcHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handleNpc(final Npc npc, Player player) throws Exception { - player.informOfNpcMessage(new ChatMessage(npc, "Hello i'm thrander the smith, I'm an expert in armour modification", player)); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - owner.informOfNpcMessage(new ChatMessage(npc, "Give me your armour designed for men and I can convert it", owner)); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.informOfNpcMessage(new ChatMessage(npc, "Into something more comfortable for a woman, and vice versa", owner)); - npc.unblock(); - } + public void handleNpc(final Npc npc, Player player) throws Exception { + player.informOfNpcMessage(new ChatMessage( + npc, + "Hello i'm thrander the smith, I'm an expert in armour modification", + player)); + player.setBusy(true); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + owner.informOfNpcMessage(new ChatMessage( + npc, + "Give me your armour designed for men and I can convert it", + owner)); + Instance.getDelayedEventHandler().add(new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.informOfNpcMessage(new ChatMessage( + npc, + "Into something more comfortable for a woman, and vice versa", + owner)); + npc.unblock(); + } + }); + } }); - } - }); - npc.blockedBy(player); - } + npc.blockedBy(player); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandler.java index c163007..04e1965 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandler.java @@ -3,7 +3,6 @@ package org.moparscape.msc.gs.phandler; import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.connection.Packet; - public interface PacketHandler { - public void handlePacket(Packet p, IoSession session) throws Exception; + public void handlePacket(Packet p, IoSession session) throws Exception; } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandlerDef.java b/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandlerDef.java index abbcbaf..5cb506e 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandlerDef.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/PacketHandlerDef.java @@ -4,45 +4,45 @@ package org.moparscape.msc.gs.phandler; * The definition of a packet handler, for use with XStream. */ public class PacketHandlerDef { - /** - * The name of the handler class - */ - public String className; - /** - * The IDs of packets which the handler is responsible for - */ - public int[] ids; + /** + * The name of the handler class + */ + public String className; + /** + * The IDs of packets which the handler is responsible for + */ + public int[] ids; - /** - * Constructs a new packet handler definition, entailing that packets with - * the given IDs are to be handled by the specified class. - * - * @param ids - * The IDs of packets to be handled - * @param className - * The name of the packet handler class - */ - public PacketHandlerDef(int[] ids, String className) { - this.ids = ids; - this.className = className; - } + /** + * Constructs a new packet handler definition, entailing that packets with + * the given IDs are to be handled by the specified class. + * + * @param ids + * The IDs of packets to be handled + * @param className + * The name of the packet handler class + */ + public PacketHandlerDef(int[] ids, String className) { + this.ids = ids; + this.className = className; + } - /** - * Returns the IDs of packets to be handled. - * - * @return An int array containing the IDs of packets to be - * handled. - */ - public int[] getAssociatedPackets() { - return ids; - } + /** + * Returns the IDs of packets to be handled. + * + * @return An int array containing the IDs of packets to be + * handled. + */ + public int[] getAssociatedPackets() { + return ids; + } - /** - * Returns the name of the packet handler class. - * - * @return The name of the packet handler's class - */ - public String getClassName() { - return className; - } + /** + * Returns the name of the packet handler class. + * + * @return The name of the packet handler's class + */ + public String getClassName() { + return className; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/PlayerLogin.java b/GameServer/src/org/moparscape/msc/gs/phandler/PlayerLogin.java index 2bc808c..31ef75c 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/PlayerLogin.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/PlayerLogin.java @@ -17,236 +17,258 @@ import org.moparscape.msc.gs.phandler.client.WieldHandler; import org.moparscape.msc.gs.quest.Quest; import org.moparscape.msc.gs.tools.DataConversions; - public class PlayerLogin implements PacketHandler { - /** - * World instance - */ - private static final World world = Instance.getWorld(); + /** + * World instance + */ + private static final World world = Instance.getWorld(); - /** - * The player to update - */ - private Player player; + /** + * The player to update + */ + private Player player; - public PlayerLogin(Player player) { - this.player = player; - } - - public void handlePacket(org.moparscape.msc.gs.connection.Packet p, IoSession session) throws Exception { - byte loginCode = p.readByte(); - if(world.getPlayer(player.getUsernameHash()) != null) { - Exception e = new Exception("Double log from " + player.getUsername() + " | " + player.getUsernameHash()); - e.printStackTrace(); - loginCode = 5; - player.destroy(true); - player.getSession().close(); - return; + public PlayerLogin(Player player) { + this.player = player; } - boolean newchar = false; - RSCPacketBuilder pb = new RSCPacketBuilder(); - pb.setBare(true); - pb.addByte(loginCode); - player.getSession().write(pb.toPacket()); - if (loginCode == 0 || loginCode == 1 || loginCode == 99) { - player.setOwner(p.readInt()); - player.setGroupID(p.readInt()); - player.setSubscriptionExpires(p.readLong()); - - player.setLastIP(DataConversions.IPToString(p.readLong())); - player.setLastLogin(p.readLong()); - /** - * Check if account is a new account - */ - if (player.getLastLogin() == 0L) { - player.setLocation(Point.location(121, 647), true); - int x = p.readShort(); - int y = p.readShort(); - newchar = true; - } - else { - player.setLocation(Point.location(p.readShort(), p.readShort()), true); - } - player.setFatigue(p.readShort()); - player.setCombatStyle((int) p.readByte()); - - player.setPrivacySetting(0, p.readByte() == 1); - player.setPrivacySetting(1, p.readByte() == 1); - player.setPrivacySetting(2, p.readByte() == 1); - player.setPrivacySetting(3, p.readByte() == 1); - - player.setGameSetting(0, p.readByte() == 1); - player.setGameSetting(2, p.readByte() == 1); - player.setGameSetting(3, p.readByte() == 1); - player.setGameSetting(4, p.readByte() == 1); - player.setGameSetting(5, p.readByte() == 1); - player.setGameSetting(6, p.readByte() == 1); - - PlayerAppearance appearance = new PlayerAppearance(p.readShort(), p.readShort(), p.readShort(), p.readShort(), p.readShort(), p.readShort()); - if (!appearance.isValid()) { - loginCode = 7; + public void handlePacket(org.moparscape.msc.gs.connection.Packet p, + IoSession session) throws Exception { + byte loginCode = p.readByte(); + if (world.getPlayer(player.getUsernameHash()) != null) { + Exception e = new Exception("Double log from " + + player.getUsername() + " | " + player.getUsernameHash()); + e.printStackTrace(); + loginCode = 5; player.destroy(true); player.getSession().close(); - } - - /* - * if(World.isMembers() && !player.isMod()) { loginCode = 7; - * player.destroy(true); player.getSession().close(); } - */ - player.setAppearance(appearance); - player.setWornItems(player.getPlayerAppearance().getSprites()); - - player.setMale(p.readByte() == 1); - long skull = p.readLong(); - if (skull > 0) - player.addSkull(skull); - - for (int i = 0; i < 18; i++) { - int exp = (int) p.readLong(); - player.setExp(i, exp); - player.setMaxStat(i, Formulae.experienceToLevel(exp)); - player.setCurStat(i, p.readShort()); - } - - player.setCombatLevel(Formulae.getCombatlevel(player.getMaxStats())); - - Inventory inventory = new Inventory(player); - int invCount = p.readShort(); - for (int i = 0; i < invCount; i++) { - InvItem item = new InvItem(p.readShort(), p.readInt()); - if (p.readByte() == 1 && item.isWieldable()) { - item.setWield(true); - player.updateWornItems(item.getWieldableDef().getWieldPos(), item.getWieldableDef().getSprite()); + return; } - inventory.add(item); - } + boolean newchar = false; + RSCPacketBuilder pb = new RSCPacketBuilder(); + pb.setBare(true); + pb.addByte(loginCode); + player.getSession().write(pb.toPacket()); + if (loginCode == 0 || loginCode == 1 || loginCode == 99) { + player.setOwner(p.readInt()); + player.setGroupID(p.readInt()); - player.setInventory(inventory); + player.setSubscriptionExpires(p.readLong()); - Bank bank = new Bank(); - int bnkCount = p.readShort(); - for (int i = 0; i < bnkCount; i++) - bank.add(new InvItem(p.readShort(), p.readInt())); - - player.setBank(bank); - - int friendCount = p.readShort(); - for (int i = 0; i < friendCount; i++) - player.addFriend(p.readLong(), p.readShort()); - - int ignoreCount = p.readShort(); - for (int i = 0; i < ignoreCount; i++) - player.addIgnore(p.readLong()); - - player.setQuestPoints(p.readShort(), false); - int questCount = p.readShort(); - // Logging.debug(questCount); - for (int i = 0; i < questCount; i++) - player.setQuestStage(p.readShort(), p.readShort(), false, false); - - /* Muted */ - - player.setMuted(p.readLong()); - if(player.isMuted()) { - player.getActionSender().sendMessage("@red@You are muted for " + player.getDaysMuted() + " days!"); - } - - long eventcd = p.readLong(); - player.setEventCD(eventcd); - - /* End of loading methods */ - - - /* Send client data */ - world.registerPlayer(player); - - player.updateViewedPlayers(); - player.updateViewedObjects(); - - org.moparscape.msc.gs.builders.MiscPacketBuilder sender = player.getActionSender(); - sender.sendServerInfo(); - sender.sendFatigue(); - sender.sendWorldInfo(); // sends info for the client to load terrain - sender.sendInventory(); - sender.sendEquipmentStats(); - sender.sendStats(); - sender.sendPrivacySettings(); - sender.sendGameSettings(); - sender.sendFriendList(); - sender.sendIgnoreList(); - sender.sendCombatStyle(); - sender.sendQuestData(); - sender.sendQuestInfo(); - - for (InvItem i : player.getInventory().getItems()) { - if (i.isWielded() && (i.getID() == 407 || i.getID() == 401)) { - int count = 0; - for (Quest q : World.getQuestManager().getQuests()) { - if (player.getQuestStage(q.getUniqueID()) == Quest.COMPLETE) - count++; - } - if (player.getCurStat(6) < 31 || count <= World.getQuestManager().getQuests().size() - 1) { - player.getActionSender().sendMessage("You must have at least 31 magic & completed " + (World.getQuestManager().getQuests().size() - 1) + " quests"); - WieldHandler.unWieldItem(player, i, true); - player.getActionSender().sendInventory(); - } - } - if(i.getID() == 1288 && i.isWielded()) { - boolean found = false; - for(int it=0; it < 18; it++) { - if(player.getMaxStat(it) == 99) { - found = true; - break; - } + player.setLastIP(DataConversions.IPToString(p.readLong())); + player.setLastLogin(p.readLong()); + /** + * Check if account is a new account + */ + if (player.getLastLogin() == 0L) { + player.setLocation(Point.location(121, 647), true); + @SuppressWarnings("unused") + int x = p.readShort(); + @SuppressWarnings("unused") + int y = p.readShort(); + newchar = true; + } else { + player.setLocation( + Point.location(p.readShort(), p.readShort()), true); } - if(!found) { - player.getActionSender().sendMessage("Sorry, you need any skill of level 99 to wield this cape of legends"); - WieldHandler.unWieldItem(player, i, true); - } - } - } - if(player.getLocation().inWilderness()) - player.p2pWildy(); + player.setFatigue(p.readShort()); + player.setCombatStyle((int) p.readByte()); - int timeTillShutdown = Instance.getServer().timeTillShutdown(); - if (timeTillShutdown > -1) - sender.startShutdown((int) (timeTillShutdown / 1000)); + player.setPrivacySetting(0, p.readByte() == 1); + player.setPrivacySetting(1, p.readByte() == 1); + player.setPrivacySetting(2, p.readByte() == 1); + player.setPrivacySetting(3, p.readByte() == 1); - if (player.getLastLogin() == 0L) { - player.getInventory().add(new InvItem(4)); - player.getInventory().add(new InvItem(70)); - player.getInventory().add(new InvItem(376)); - player.getInventory().add(new InvItem(156)); - player.getInventory().add(new InvItem(87)); - player.getInventory().add(new InvItem(1263)); - player.getActionSender().sendInventory(); - player.setChangingAppearance(true); - sender.sendAppearanceScreen(); - } + player.setGameSetting(0, p.readByte() == 1); + player.setGameSetting(2, p.readByte() == 1); + player.setGameSetting(3, p.readByte() == 1); + player.setGameSetting(4, p.readByte() == 1); + player.setGameSetting(5, p.readByte() == 1); + player.setGameSetting(6, p.readByte() == 1); - player.getActionSender().sendWakeUp(false); - sender.sendLoginBox(); - sender.sendMessage(Constants.GameServer.MOTD); - sender.sendOnlinePlayers(); - - if(newchar) - player.getActionSender().sendMessage("@ran@Talk to the Community Instructor for information about " + Config.SERVER_NAME); + PlayerAppearance appearance = new PlayerAppearance(p.readShort(), + p.readShort(), p.readShort(), p.readShort(), p.readShort(), + p.readShort()); + if (!appearance.isValid()) { + loginCode = 7; + player.destroy(true); + player.getSession().close(); + } - if (player.clientWarn()) { - player.getActionSender().sendAlert("@red@Alert! @whi@You are using an old client, please download the new client from our website. This client WILL stop working @red@soon.", false); - player.getActionSender().sendMessage("@red@Alert! @whi@You are using an old client, please download the new client from our website. This client WILL stop working on @red@soon."); - } + /* + * if(World.isMembers() && !player.isMod()) { loginCode = 7; + * player.destroy(true); player.getSession().close(); } + */ + player.setAppearance(appearance); + player.setWornItems(player.getPlayerAppearance().getSprites()); + player.setMale(p.readByte() == 1); + long skull = p.readLong(); + if (skull > 0) + player.addSkull(skull); - if (player.isAdmin() || player.isPMod()) { - player.setnopk(true); - player.setnonaggro(true); - } + for (int i = 0; i < 18; i++) { + int exp = (int) p.readLong(); + player.setExp(i, exp); + player.setMaxStat(i, Formulae.experienceToLevel(exp)); + player.setCurStat(i, p.readShort()); + } - player.setLoggedIn(true); - player.setBusy(false); - } else - player.destroy(true); - } + player.setCombatLevel(Formulae.getCombatlevel(player.getMaxStats())); + + Inventory inventory = new Inventory(player); + int invCount = p.readShort(); + for (int i = 0; i < invCount; i++) { + InvItem item = new InvItem(p.readShort(), p.readInt()); + if (p.readByte() == 1 && item.isWieldable()) { + item.setWield(true); + player.updateWornItems( + item.getWieldableDef().getWieldPos(), item + .getWieldableDef().getSprite()); + } + inventory.add(item); + } + + player.setInventory(inventory); + + Bank bank = new Bank(); + int bnkCount = p.readShort(); + for (int i = 0; i < bnkCount; i++) + bank.add(new InvItem(p.readShort(), p.readInt())); + + player.setBank(bank); + + int friendCount = p.readShort(); + for (int i = 0; i < friendCount; i++) + player.addFriend(p.readLong(), p.readShort()); + + int ignoreCount = p.readShort(); + for (int i = 0; i < ignoreCount; i++) + player.addIgnore(p.readLong()); + + player.setQuestPoints(p.readShort(), false); + int questCount = p.readShort(); + // Logging.debug(questCount); + for (int i = 0; i < questCount; i++) + player.setQuestStage(p.readShort(), p.readShort(), false, false); + + /* Muted */ + + player.setMuted(p.readLong()); + if (player.isMuted()) { + player.getActionSender().sendMessage( + "@red@You are muted for " + player.getDaysMuted() + + " days!"); + } + + long eventcd = p.readLong(); + player.setEventCD(eventcd); + + /* End of loading methods */ + + /* Send client data */ + world.registerPlayer(player); + + player.updateViewedPlayers(); + player.updateViewedObjects(); + + org.moparscape.msc.gs.builders.MiscPacketBuilder sender = player + .getActionSender(); + sender.sendServerInfo(); + sender.sendFatigue(); + sender.sendWorldInfo(); // sends info for the client to load terrain + sender.sendInventory(); + sender.sendEquipmentStats(); + sender.sendStats(); + sender.sendPrivacySettings(); + sender.sendGameSettings(); + sender.sendFriendList(); + sender.sendIgnoreList(); + sender.sendCombatStyle(); + sender.sendQuestData(); + sender.sendQuestInfo(); + + for (InvItem i : player.getInventory().getItems()) { + if (i.isWielded() && (i.getID() == 407 || i.getID() == 401)) { + int count = 0; + for (Quest q : World.getQuestManager().getQuests()) { + if (player.getQuestStage(q.getUniqueID()) == Quest.COMPLETE) + count++; + } + if (player.getCurStat(6) < 31 + || count <= World.getQuestManager().getQuests() + .size() - 1) { + player.getActionSender().sendMessage( + "You must have at least 31 magic & completed " + + (World.getQuestManager().getQuests() + .size() - 1) + " quests"); + WieldHandler.unWieldItem(player, i, true); + player.getActionSender().sendInventory(); + } + } + if (i.getID() == 1288 && i.isWielded()) { + boolean found = false; + for (int it = 0; it < 18; it++) { + if (player.getMaxStat(it) == 99) { + found = true; + break; + } + } + if (!found) { + player.getActionSender() + .sendMessage( + "Sorry, you need any skill of level 99 to wield this cape of legends"); + WieldHandler.unWieldItem(player, i, true); + } + } + } + if (player.getLocation().inWilderness()) + player.p2pWildy(); + + int timeTillShutdown = Instance.getServer().timeTillShutdown(); + if (timeTillShutdown > -1) + sender.startShutdown((int) (timeTillShutdown / 1000)); + + if (player.getLastLogin() == 0L) { + player.getInventory().add(new InvItem(4)); + player.getInventory().add(new InvItem(70)); + player.getInventory().add(new InvItem(376)); + player.getInventory().add(new InvItem(156)); + player.getInventory().add(new InvItem(87)); + player.getInventory().add(new InvItem(1263)); + player.getActionSender().sendInventory(); + player.setChangingAppearance(true); + sender.sendAppearanceScreen(); + } + + player.getActionSender().sendWakeUp(false); + sender.sendLoginBox(); + sender.sendMessage(Constants.GameServer.MOTD); + sender.sendOnlinePlayers(); + + if (newchar) + player.getActionSender().sendMessage( + "@ran@Talk to the Community Instructor for information about " + + Config.SERVER_NAME); + + if (player.clientWarn()) { + player.getActionSender() + .sendAlert( + "@red@Alert! @whi@You are using an old client, please download the new client from our website. This client WILL stop working @red@soon.", + false); + player.getActionSender() + .sendMessage( + "@red@Alert! @whi@You are using an old client, please download the new client from our website. This client WILL stop working on @red@soon."); + } + + if (player.isAdmin() || player.isPMod()) { + player.setnopk(true); + player.setnonaggro(true); + } + + player.setLoggedIn(true); + player.setBusy(false); + } else + player.destroy(true); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/AttackHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/AttackHandler.java index 14ad798..73884a9 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/AttackHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/AttackHandler.java @@ -21,199 +21,264 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; - public class AttackHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy()) { - player.resetPath(); - return; - } - player.resetAll(); - Mob affectedMob = null; - int serverIndex = p.readShort(); - if (pID == 57) { - affectedMob = world.getPlayer(serverIndex); - } else if (pID == 73) { - affectedMob = world.getNpc(serverIndex); - } - if(player.isPMod() && !player.isMod()) - return; - if (affectedMob == null || affectedMob.equals(player) || (affectedMob instanceof Npc && !World.getQuestManager().isNpcVisible((Npc) affectedMob, player))) { - player.resetPath(); - return; - } - if (affectedMob instanceof Npc && player.getRangeEquip() > 0 && affectedMob.inCombat() && World.getQuestManager().isNpcAssociated(affectedMob, player)) { - player.getActionSender().sendMessage("You can't range the " + ((Npc) affectedMob).getDef().getName() + " while it's in combat!"); - player.resetPath(); - return; - } - if (affectedMob instanceof Player) { - Player pl = (Player) affectedMob; - if (pl.inCombat() && player.getRangeEquip() < 0) { - return; - } - - if (pl.getLocation().inWilderness() && System.currentTimeMillis() - pl.lastRun < 3000) { - return; - } - } - - player.setFollowing(affectedMob); - player.setStatus(Action.ATTACKING_MOB); - - if (player.getRangeEquip() < 0) { - Instance.getDelayedEventHandler().add(new WalkToMobEvent(player, affectedMob, affectedMob instanceof Npc ? 1 : 2) { - public void arrived() { - owner.resetPath(); - owner.resetFollowing(); - boolean cont = false; - if (affectedMob instanceof Player) { - Player opp = (Player) affectedMob; - - if (GameEngine.getTime() - opp.lastMineTimer < 2000 && opp.isBusy()) - cont = true; - } - if(affectedMob instanceof Player) { - world.addEntryToSnapshots(new Activity(owner.getUsername(), owner.getUsername() + " attacked a Player (" + ((Player)affectedMob).getUsername() + ")")); - } else { - world.addEntryToSnapshots(new Activity(owner.getUsername(), owner.getUsername() + " attacked a NPC (" + ((Npc)affectedMob).getDef().name + ")")); - } - if (cont) { - if (owner.isBusy() || !owner.nextTo(affectedMob) || !owner.checkAttack(affectedMob, false) || owner.getStatus() != Action.ATTACKING_MOB) { - return; - } - } else { - if (owner.isBusy() || affectedMob.isBusy() || !owner.nextTo(affectedMob) || !owner.checkAttack(affectedMob, false) || owner.getStatus() != Action.ATTACKING_MOB) { - return; - } - } - if (affectedMob.getID() == 35) { - owner.getActionSender().sendMessage("Delrith can not be attacked without the Silverlight sword"); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy()) { + player.resetPath(); return; - } - if (affectedMob.getID() == 140 && affectedMob.getX() > 327 && affectedMob.getX() < 335 && affectedMob.getY() > 433 && affectedMob.getY() < 439) { - owner.informOfNpcMessage(new ChatMessage(affectedMob, "a curse be upon you", owner)); - for (int i = 0; i < 3; i++) { - int stat = owner.getCurStat(i); - if (stat < 3) - owner.setCurStat(i, 0); - else - owner.setCurStat(i, stat - 3); - } - owner.getActionSender().sendStats(); - - } - - owner.resetAll(); - owner.setStatus(Action.FIGHTING_MOB); - if (affectedMob instanceof Player) { - Player affectedPlayer = (Player) affectedMob; - affectedPlayer.resetAll(); - affectedPlayer.setStatus(Action.FIGHTING_MOB); - affectedPlayer.getActionSender().sendSound("underattack"); - affectedPlayer.getActionSender().sendMessage("You are under attack!"); - } - affectedMob.resetPath(); - - owner.setLocation(affectedMob.getLocation(), true); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.removeWatchedPlayer(owner); - } - - owner.setBusy(true); - owner.setSprite(9); - /* - * if(affectedMob instanceof Npc) { Npc n = - * (Npc)affectedMob; for(Fighter p : n.fighters) { - * p.useCombat = true; if(p.player == owner) if(p.useMagic) - * { p.useMagic = false; break; } } } - */ - owner.setOpponent(affectedMob); - owner.setCombatTimer(); - affectedMob.setBusy(true); - affectedMob.setSprite(8); - affectedMob.setOpponent(owner); - affectedMob.setCombatTimer(); - FightEvent fighting = new FightEvent(owner, affectedMob); - fighting.setLastRun(0); - Instance.getDelayedEventHandler().add(fighting); } - }); - } else { - if (!new PathGenerator(player.getX(), player.getY(), affectedMob.getX(), affectedMob.getY()).isValid()) { - player.getActionSender().sendMessage("I can't get a clear shot from here"); - player.resetPath(); - return; - } - if(Config.f2pWildy && player.getLocation().inWilderness()) { - - for(InvItem i : player.getInventory().getItems()) { - if(i.getID() == 638 || i.getID() == 640 || i.getID() == 642 || i.getID() == 644 || i.getID() == 646) { - player.getActionSender().sendMessage("You can not have any P2P arrows in your inventory in a F2P wilderness"); - return; - } + player.resetAll(); + Mob affectedMob = null; + int serverIndex = p.readShort(); + if (pID == 57) { + affectedMob = world.getPlayer(serverIndex); + } else if (pID == 73) { + affectedMob = world.getNpc(serverIndex); } - - } - int radius = 7; - if (player.getRangeEquip() == 59 || player.getRangeEquip() == 60) - radius = 5; - if (player.getRangeEquip() == 189) - radius = 4; - Instance.getDelayedEventHandler().add(new WalkToMobEvent(player, affectedMob, radius) { - public void arrived() { - owner.resetPath(); - if (owner.isBusy() || !owner.checkAttack(affectedMob, true) || owner.getStatus() != Action.ATTACKING_MOB) { + if (player.isPMod() && !player.isMod()) return; - } - - if (!new PathGenerator(owner.getX(), owner.getY(), affectedMob.getX(), affectedMob.getY()).isValid()) { - owner.getActionSender().sendMessage("I can't get a clear shot from here"); - owner.resetPath(); + if (affectedMob == null + || affectedMob.equals(player) + || (affectedMob instanceof Npc && !World.getQuestManager() + .isNpcVisible((Npc) affectedMob, player))) { + player.resetPath(); return; - } - if(affectedMob instanceof Player) { - world.addEntryToSnapshots(new Activity(owner.getUsername(), owner.getUsername() + " ranged a Player (" + ((Player)affectedMob).getUsername() + ")")); - } else { - world.addEntryToSnapshots(new Activity(owner.getUsername(), owner.getUsername() + " ranged a NPC (" + ((Npc)affectedMob).getDef().name + ")")); - } - if (affectedMob.getID() == 35) { - owner.getActionSender().sendMessage("Delrith can not be attacked without the Silverlight sword"); - return; - } - owner.resetAll(); - owner.setStatus(Action.RANGING_MOB); - if (affectedMob instanceof Player) { - Player affectedPlayer = (Player) affectedMob; - affectedPlayer.resetTrade(); - if (affectedPlayer.getMenuHandler() != null) { - affectedPlayer.resetMenuHandler(); - } - if (affectedPlayer.accessingBank()) { - affectedPlayer.resetBank(); - } - if (affectedPlayer.accessingShop()) { - affectedPlayer.resetShop(); - } - if (affectedPlayer.getNpc() != null) { - affectedPlayer.getNpc().unblock(); - affectedPlayer.setNpc(null); - } - } - if (Formulae.getRangeDirection(owner, affectedMob) != -1) - owner.setSprite(Formulae.getRangeDirection(owner, affectedMob)); - - owner.setRangeEvent(new RangeEvent(owner, affectedMob)); } - }); + if (affectedMob instanceof Npc && player.getRangeEquip() > 0 + && affectedMob.inCombat() + && World.getQuestManager().isNpcAssociated(affectedMob, player)) { + player.getActionSender().sendMessage( + "You can't range the " + + ((Npc) affectedMob).getDef().getName() + + " while it's in combat!"); + player.resetPath(); + return; + } + if (affectedMob instanceof Player) { + Player pl = (Player) affectedMob; + if (pl.inCombat() && player.getRangeEquip() < 0) { + return; + } + if (pl.getLocation().inWilderness() + && System.currentTimeMillis() - pl.getLastRun() < 3000) { + return; + } + } + + player.setFollowing(affectedMob); + player.setStatus(Action.ATTACKING_MOB); + + if (player.getRangeEquip() < 0) { + Instance.getDelayedEventHandler().add( + new WalkToMobEvent(player, affectedMob, + affectedMob instanceof Npc ? 1 : 2) { + public void arrived() { + owner.resetPath(); + owner.resetFollowing(); + boolean cont = false; + if (affectedMob instanceof Player) { + Player opp = (Player) affectedMob; + + if (GameEngine.getTime() + - opp.getLastMineTimer() < 2000 + && opp.isBusy()) + cont = true; + } + if (affectedMob instanceof Player) { + world.addEntryToSnapshots(new Activity(owner + .getUsername(), owner.getUsername() + + " attacked a Player (" + + ((Player) affectedMob).getUsername() + + ")")); + } else { + world.addEntryToSnapshots(new Activity(owner + .getUsername(), owner.getUsername() + + " attacked a NPC (" + + ((Npc) affectedMob).getDef().name + + ")")); + } + if (cont) { + if (owner.isBusy() + || !owner.nextTo(affectedMob) + || !owner.checkAttack(affectedMob, + false) + || owner.getStatus() != Action.ATTACKING_MOB) { + return; + } + } else { + if (owner.isBusy() + || affectedMob.isBusy() + || !owner.nextTo(affectedMob) + || !owner.checkAttack(affectedMob, + false) + || owner.getStatus() != Action.ATTACKING_MOB) { + return; + } + } + if (affectedMob.getID() == 35) { + owner.getActionSender() + .sendMessage( + "Delrith can not be attacked without the Silverlight sword"); + return; + } + if (affectedMob.getID() == 140 + && affectedMob.getX() > 327 + && affectedMob.getX() < 335 + && affectedMob.getY() > 433 + && affectedMob.getY() < 439) { + owner.informOfNpcMessage(new ChatMessage( + affectedMob, "a curse be upon you", + owner)); + for (int i = 0; i < 3; i++) { + int stat = owner.getCurStat(i); + if (stat < 3) + owner.setCurStat(i, 0); + else + owner.setCurStat(i, stat - 3); + } + owner.getActionSender().sendStats(); + + } + + owner.resetAll(); + owner.setStatus(Action.FIGHTING_MOB); + if (affectedMob instanceof Player) { + Player affectedPlayer = (Player) affectedMob; + affectedPlayer.resetAll(); + affectedPlayer.setStatus(Action.FIGHTING_MOB); + affectedPlayer.getActionSender().sendSound( + "underattack"); + affectedPlayer.getActionSender().sendMessage( + "You are under attack!"); + } + affectedMob.resetPath(); + + owner.setLocation(affectedMob.getLocation(), true); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.removeWatchedPlayer(owner); + } + + owner.setBusy(true); + owner.setSprite(9); + /* + * if(affectedMob instanceof Npc) { Npc n = + * (Npc)affectedMob; for(Fighter p : n.fighters) { + * p.useCombat = true; if(p.player == owner) + * if(p.useMagic) { p.useMagic = false; break; } } } + */ + owner.setOpponent(affectedMob); + owner.setCombatTimer(); + affectedMob.setBusy(true); + affectedMob.setSprite(8); + affectedMob.setOpponent(owner); + affectedMob.setCombatTimer(); + FightEvent fighting = new FightEvent(owner, + affectedMob); + fighting.setLastRun(0); + Instance.getDelayedEventHandler().add(fighting); + } + }); + } else { + if (!new PathGenerator(player.getX(), player.getY(), + affectedMob.getX(), affectedMob.getY()).isValid()) { + player.getActionSender().sendMessage( + "I can't get a clear shot from here"); + player.resetPath(); + return; + } + if (Config.f2pWildy && player.getLocation().inWilderness()) { + + for (InvItem i : player.getInventory().getItems()) { + if (i.getID() == 638 || i.getID() == 640 + || i.getID() == 642 || i.getID() == 644 + || i.getID() == 646) { + player.getActionSender() + .sendMessage( + "You can not have any P2P arrows in your inventory in a F2P wilderness"); + return; + } + } + + } + int radius = 7; + if (player.getRangeEquip() == 59 || player.getRangeEquip() == 60) + radius = 5; + if (player.getRangeEquip() == 189) + radius = 4; + Instance.getDelayedEventHandler().add( + new WalkToMobEvent(player, affectedMob, radius) { + public void arrived() { + owner.resetPath(); + if (owner.isBusy() + || !owner.checkAttack(affectedMob, true) + || owner.getStatus() != Action.ATTACKING_MOB) { + return; + } + + if (!new PathGenerator(owner.getX(), owner.getY(), + affectedMob.getX(), affectedMob.getY()) + .isValid()) { + owner.getActionSender().sendMessage( + "I can't get a clear shot from here"); + owner.resetPath(); + return; + } + if (affectedMob instanceof Player) { + world.addEntryToSnapshots(new Activity(owner + .getUsername(), owner.getUsername() + + " ranged a Player (" + + ((Player) affectedMob).getUsername() + + ")")); + } else { + world.addEntryToSnapshots(new Activity(owner + .getUsername(), owner.getUsername() + + " ranged a NPC (" + + ((Npc) affectedMob).getDef().name + + ")")); + } + if (affectedMob.getID() == 35) { + owner.getActionSender() + .sendMessage( + "Delrith can not be attacked without the Silverlight sword"); + return; + } + owner.resetAll(); + owner.setStatus(Action.RANGING_MOB); + if (affectedMob instanceof Player) { + Player affectedPlayer = (Player) affectedMob; + affectedPlayer.resetTrade(); + if (affectedPlayer.getMenuHandler() != null) { + affectedPlayer.resetMenuHandler(); + } + if (affectedPlayer.accessingBank()) { + affectedPlayer.resetBank(); + } + if (affectedPlayer.accessingShop()) { + affectedPlayer.resetShop(); + } + if (affectedPlayer.getNpc() != null) { + affectedPlayer.getNpc().unblock(); + affectedPlayer.setNpc(null); + } + } + if (Formulae.getRangeDirection(owner, affectedMob) != -1) + owner.setSprite(Formulae.getRangeDirection( + owner, affectedMob)); + + owner.setRangeEvent(new RangeEvent(owner, + affectedMob)); + } + }); + + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/BankHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/BankHandler.java index 35118d0..6cee244 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/BankHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/BankHandler.java @@ -13,118 +13,142 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; - public class BankHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy() || player.isRanging() || player.isTrading() || player.isDueling()) { - player.resetBank(); - return; - } - if (!player.accessingBank()) { - player.setSuspiciousPlayer(true); - player.resetBank(); - return; - } - Bank bank = player.getBank(); - Inventory inventory = player.getInventory(); - InvItem item; - int itemID, amount, slot; - switch (pID) { - case 48: // Close bank - player.resetBank(); - break; - case 198: // Deposit item - itemID = p.readShort(); - amount = p.readInt(); - if (amount < 1 || inventory.countId(itemID) < amount) { - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " tried to deposit ID: " + itemID + " amount: " + amount)); - player.setSuspiciousPlayer(true); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " deposited ID: " + itemID + " amount: " + amount)); - if (EntityHandler.getItemDef(itemID).isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy() || player.isRanging() || player.isTrading() + || player.isDueling()) { + player.resetBank(); return; - } - if (EntityHandler.getItemDef(itemID).isStackable()) { - item = new InvItem(itemID, amount); - if (bank.canHold(item) && inventory.remove(item) > -1) { - bank.add(item); - } - else { - player.getActionSender().sendMessage("You don't have room for that in your bank"); - } - } else { - for (int i = 0; i < amount; i++) { - int idx = inventory.getLastIndexById(itemID); - item = inventory.get(idx); - if (item == null) { // This shouldn't happen - break; - } - if (bank.canHold(item) && inventory.remove(item) > -1) { - bank.add(item); - } else { - player.getActionSender().sendMessage("You don't have room for that in your bank"); - break; - } } - } - slot = bank.getFirstIndexById(itemID); - if (slot > -1) { - player.getActionSender().sendInventory(); - player.getActionSender().updateBankItem(slot, itemID, bank.countId(itemID)); - } - break; - case 183: // Withdraw item - itemID = p.readShort(); - amount = p.readInt(); - if (amount < 1 || bank.countId(itemID) < amount) { - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " tried to withdraw ID: " + itemID + " amount: " + amount)); - player.setSuspiciousPlayer(true); - return; - } - if (EntityHandler.getItemDef(itemID).isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " withrew ID: " + itemID + " amount: " + amount)); - - slot = bank.getFirstIndexById(itemID); - if (EntityHandler.getItemDef(itemID).isStackable()) { - item = new InvItem(itemID, amount); - if (inventory.canHold(item) && bank.remove(item) > -1) { - inventory.add(item); - } else { - player.getActionSender().sendMessage("You don't have room for that in your inventory"); + if (!player.accessingBank()) { + player.setSuspiciousPlayer(true); + player.resetBank(); + return; } - } else { - for (int i = 0; i < amount; i++) { - if (bank.getFirstIndexById(itemID) < 0) { // This shouldn't - // happen + Bank bank = player.getBank(); + Inventory inventory = player.getInventory(); + InvItem item; + int itemID, amount, slot; + switch (pID) { + case 48: // Close bank + player.resetBank(); break; - } - item = new InvItem(itemID, 1); - if (inventory.canHold(item) && bank.remove(item) > -1) { - inventory.add(item); - } else { - player.getActionSender().sendMessage("You don't have room for that in your inventory"); + case 198: // Deposit item + itemID = p.readShort(); + amount = p.readInt(); + if (amount < 1 || inventory.countId(itemID) < amount) { + world.addEntryToSnapshots(new Activity(player.getUsername(), + player.getUsername() + " tried to deposit ID: " + + itemID + " amount: " + amount)); + player.setSuspiciousPlayer(true); + return; + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " deposited ID: " + + itemID + + " amount: " + + amount)); + if (EntityHandler.getItemDef(itemID).isMembers() + && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + if (EntityHandler.getItemDef(itemID).isStackable()) { + item = new InvItem(itemID, amount); + if (bank.canHold(item) && inventory.remove(item) > -1) { + bank.add(item); + } else { + player.getActionSender().sendMessage( + "You don't have room for that in your bank"); + } + } else { + for (int i = 0; i < amount; i++) { + int idx = inventory.getLastIndexById(itemID); + item = inventory.get(idx); + if (item == null) { // This shouldn't happen + break; + } + if (bank.canHold(item) && inventory.remove(item) > -1) { + bank.add(item); + } else { + player.getActionSender().sendMessage( + "You don't have room for that in your bank"); + break; + } + } + } + slot = bank.getFirstIndexById(itemID); + if (slot > -1) { + player.getActionSender().sendInventory(); + player.getActionSender().updateBankItem(slot, itemID, + bank.countId(itemID)); + } + break; + case 183: // Withdraw item + itemID = p.readShort(); + amount = p.readInt(); + if (amount < 1 || bank.countId(itemID) < amount) { + world.addEntryToSnapshots(new Activity(player.getUsername(), + player.getUsername() + " tried to withdraw ID: " + + itemID + " amount: " + amount)); + player.setSuspiciousPlayer(true); + return; + } + if (EntityHandler.getItemDef(itemID).isMembers() + && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " withrew ID: " + + itemID + + " amount: " + + amount)); + + slot = bank.getFirstIndexById(itemID); + if (EntityHandler.getItemDef(itemID).isStackable()) { + item = new InvItem(itemID, amount); + if (inventory.canHold(item) && bank.remove(item) > -1) { + inventory.add(item); + } else { + player.getActionSender().sendMessage( + "You don't have room for that in your inventory"); + } + } else { + for (int i = 0; i < amount; i++) { + if (bank.getFirstIndexById(itemID) < 0) { // This shouldn't + // happen + break; + } + item = new InvItem(itemID, 1); + if (inventory.canHold(item) && bank.remove(item) > -1) { + inventory.add(item); + } else { + player.getActionSender() + .sendMessage( + "You don't have room for that in your inventory"); + break; + } + } + } + if (slot > -1) { + player.getActionSender().sendInventory(); + player.getActionSender().updateBankItem(slot, itemID, + bank.countId(itemID)); + } break; - } } - } - if (slot > -1) { - player.getActionSender().sendInventory(); - player.getActionSender().updateBankItem(slot, itemID, bank.countId(itemID)); - } - break; } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java index bb9dd57..a70c224 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/BotHandler.java @@ -8,60 +8,61 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class BotHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - try { - Player player = (Player) session.getAttachment(); + public void handlePacket(Packet p, IoSession session) throws Exception { + try { + Player player = (Player) session.getAttachment(); - boolean scar = false; - boolean wpe = false; - boolean autominer = false; - if (p.getLength() > 1) { - if (p.readByte() == 1) { - scar = true; - } - if (p.readByte() == 1) { - autominer = true; - } - if (p.readByte() == 1) { - autominer = true; - } - if (p.readByte() == 1) { - wpe = true; - } - /* - for (String s : PlayerLoginHandler.badClients) { - if (s.equalsIgnoreCase(player.getUsername())) - player.badClient = true; - PlayerLoginHandler.badClients.remove(s); - break; - } - */ - for (Player pl : Instance.getWorld().getPlayers()) { - if (pl.lastPlayerInfo2 == null) - continue; - String s = "Client Statistics for " + player.getUsername() + ": Scar: " + scar + ", WPE: " + wpe + ", Autominer: " + autominer + ", 3rd Party Client: " + player.badClient; - if (pl.lastPlayerInfo2.equalsIgnoreCase(player.getUsername())) { + boolean scar = false; + boolean wpe = false; + boolean autominer = false; + if (p.getLength() > 1) { + if (p.readByte() == 1) { + scar = true; + } + if (p.readByte() == 1) { + autominer = true; + } + if (p.readByte() == 1) { + autominer = true; + } + if (p.readByte() == 1) { + wpe = true; + } + /* + * for (String s : PlayerLoginHandler.badClients) { if + * (s.equalsIgnoreCase(player.getUsername())) player.badClient = + * true; PlayerLoginHandler.badClients.remove(s); break; } + */ + for (Player pl : Instance.getWorld().getPlayers()) { + if (pl.getLastPlayerInfo2() == null) + continue; + String s = "Client Statistics for " + player.getUsername() + + ": Scar: " + scar + ", WPE: " + wpe + + ", Autominer: " + autominer + + ", 3rd Party Client: " + player.isBadClient(); + if (pl.getLastPlayerInfo2().equalsIgnoreCase( + player.getUsername())) { - s = s.replace("true", "@gre@true@whi@"); - s = s.replace("false", "@red@false@whi@"); - pl.getActionSender().sendAlert(s, false); - pl.lastPlayerInfo2 = null; - } - } + s = s.replace("true", "@gre@true@whi@"); + s = s.replace("false", "@red@false@whi@"); + pl.getActionSender().sendAlert(s, false); + pl.setLastPlayerInfo2(null); + } + } - } else { - Logger.println(player.getUsername() + " caught on 3rd party client"); - } - } catch (Exception e) { - e.printStackTrace(); + } else { + Logger.println(player.getUsername() + + " caught on 3rd party client"); + } + } catch (Exception e) { + e.printStackTrace(); + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/ChatHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/ChatHandler.java index b0a2f44..81843bf 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/ChatHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/ChatHandler.java @@ -7,21 +7,21 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class ChatHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player sender = (Player) session.getAttachment(); - if (World.SERVER_MUTED && !sender.isMod()) { - sender.getActionSender().sendMessage("@red@Unable to chat while the server is muted"); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player sender = (Player) session.getAttachment(); + if (World.SERVER_MUTED && !sender.isMod()) { + sender.getActionSender().sendMessage( + "@red@Unable to chat while the server is muted"); + return; + } + + sender.addMessageToChatQueue(p.getData()); } - - sender.addMessageToChatQueue(p.getData()); - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/CommandHandler.scala b/GameServer/src/org/moparscape/msc/gs/phandler/client/CommandHandler.scala index a2991f8..48463f2 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/CommandHandler.scala +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/CommandHandler.scala @@ -52,21 +52,23 @@ object CommandHandler { class CommandHandler extends PacketHandler { + import org.moparscape.msc.gs.phandler.client.{ CommandHandler => CH } + @throws(classOf[Exception]) def handleCommand(cmd: String, args: Array[String], p: Player) { val ls = Instance.getServer().getLoginConnector().getActionSender() val world = Instance.getWorld - if (GameEngine.getTime() - p.lastCommandUsed < CommandHandler.COMMAND_DELAY) { - if (GameEngine.getTime() - p.lastCommandUsed < CommandHandler.COMMAND_DELAY_MESSAGE_DELAY) { // incase spammers + if (GameEngine.getTime - p.getLastCommandUsed < CH.COMMAND_DELAY) { + if (GameEngine.getTime - p.getLastCommandUsed < CH.COMMAND_DELAY_MESSAGE_DELAY) { // incase spammers return ; } p.getActionSender().sendMessage("2 second delay on using a new command") return ; } - val pm = CommandHandler.permissions.get(cmd) + val pm = CH.permissions.get(cmd) pm match { case Some(x) => if (p.getGroupID < x) return @@ -99,7 +101,7 @@ class CommandHandler extends PacketHandler { case _ => none = true } if (!none) - p.lastCommandUsed = GameEngine.getTime + p.setLastCommandUsed(GameEngine.getTime) } def help(p: Player) { @@ -136,21 +138,21 @@ class CommandHandler extends PacketHandler { } def stuck(p: Player) { - if (GameEngine.getTime() - p.getCurrentLogin() < CommandHandler.STUCK_LOGIN_WAIT_PERIOD) { + if (GameEngine.getTime() - p.getCurrentLogin() < CH.STUCK_LOGIN_WAIT_PERIOD) { p.getActionSender().sendMessage("You cannot do this after you have recently logged in") return ; } if (p.getLocation().inModRoom() && !p.isMod()) { message(p, "You cannot use ::stuck here") - } else if (!p.isMod() && GameEngine.getTime() - p.getLastMoved() < CommandHandler.STUCK_STAND_STILL_TIME && GameEngine.getTime() - p.getCastTimer() < 300000) { - message(p, "There is a 5 minute delay on using ::stuck, please stand still for " + (CommandHandler.STUCK_STAND_STILL_TIME / 1000 / 60) + " minutes.") + } else if (!p.isMod() && GameEngine.getTime() - p.getLastMoved() < CH.STUCK_STAND_STILL_TIME && GameEngine.getTime() - p.getCastTimer() < 300000) { + message(p, "There is a 5 minute delay on using ::stuck, please stand still for " + (CH.STUCK_STAND_STILL_TIME / 1000 / 60) + " minutes.") message(p, "This command is logged ONLY use it when you are REALLY stuck.") - } else if (!p.inCombat() && GameEngine.getTime() - p.getCombatTimer() > CommandHandler.STUCK_STAND_STILL_TIME || p.isMod()) { + } else if (!p.inCombat() && GameEngine.getTime() - p.getCombatTimer() > CH.STUCK_STAND_STILL_TIME || p.isMod()) { Logger.mod(p.getUsername() + " used stuck at " + p.getX() + ":" + p.getY()) p.setCastTimer() - p.teleport(CommandHandler.STUCK_X, CommandHandler.STUCK_Y, true) + p.teleport(CH.STUCK_X, CH.STUCK_Y, true) } else { - message(p, "You cannot use ::stuck for " + (CommandHandler.STUCK_STAND_STILL_TIME / 1000 / 60) + " minutes after combat") + message(p, "You cannot use ::stuck for " + (CH.STUCK_STAND_STILL_TIME / 1000 / 60) + " minutes after combat") } } @@ -168,7 +170,7 @@ class CommandHandler extends PacketHandler { message(p, args(0) + " is offline?") return ; } - p.lastPlayerInfo2 = p.getUsername() + p.setLastPlayerInfo2(p.getUsername()) p1.getActionSender().sendInfo2() message(p, "Requesting info.. please wait") } @@ -177,8 +179,8 @@ class CommandHandler extends PacketHandler { if (args(0) != null) { val p = world.getPlayer(DataConversions.usernameToHash(args(0))) var line = "@red@DONT SHOW THIS TO PUBLIC! @gre@Last 75 (Casting) Intervals for @yel@ " + p.getUsername() + ": @whi@" - for (i <- 0 to p.intervals.size()) { - line += " - " + p.intervals.get(i) + for (i <- 0 to p.getIntervals.size()) { + line += " - " + p.getIntervals.get(i) } alert(p, line) } @@ -187,9 +189,9 @@ class CommandHandler extends PacketHandler { def town(p: Player, args: Array[String]) { val town = args(0); if (town != null) { - for (i <- 0 to CommandHandler.towns.length) - if (town.equalsIgnoreCase(CommandHandler.towns(i))) { - p.teleport(CommandHandler.townLocations(i).getX(), CommandHandler.townLocations(i).getY(), false) + for (i <- 0 to CH.towns.length) + if (town.equalsIgnoreCase(CH.towns(i))) { + p.teleport(CH.townLocations(i).getX(), CH.townLocations(i).getY(), false) } } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java index d67f350..0e7745a 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/DropHandler.java @@ -3,7 +3,6 @@ package org.moparscape.msc.gs.phandler.client; import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.connection.Packet; -import org.moparscape.msc.gs.db.DBConnection; import org.moparscape.msc.gs.event.DelayedEvent; import org.moparscape.msc.gs.model.InvItem; import org.moparscape.msc.gs.model.Item; @@ -13,56 +12,60 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; - public class DropHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; - } - player.resetAll(); - final int idx = (int) p.readShort(); - if (idx < 0 || idx >= player.getInventory().size()) { - player.setSuspiciousPlayer(true); - return; - } - final InvItem item = player.getInventory().get(idx); - if (item == null) { - player.setSuspiciousPlayer(true); - return; - } - if(player.isPMod() && !player.isMod()) - return; - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - - - player.setStatus(Action.DROPPING_GITEM); - Instance.getDelayedEventHandler().add(new DelayedEvent(player, 500) { - public void run() { - if (owner.isBusy() || !owner.getInventory().contains(item) || owner.getStatus() != Action.DROPPING_GITEM) { - matchRunning = false; - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); + return; } - if (owner.hasMoved()) { - return; + player.resetAll(); + final int idx = (int) p.readShort(); + if (idx < 0 || idx >= player.getInventory().size()) { + player.setSuspiciousPlayer(true); + return; + } + final InvItem item = player.getInventory().get(idx); + if (item == null) { + player.setSuspiciousPlayer(true); + return; + } + if (player.isPMod() && !player.isMod()) + return; + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; } - world.addEntryToSnapshots(new Activity(owner.getUsername(), owner.getUsername() + " dropped ID: " + item.getID() + " amount: "+item.getAmount()+" at: " + owner.getX() + "/" + owner.getY())); - owner.getActionSender().sendSound("dropobject"); - owner.getInventory().remove(item); - owner.getActionSender().sendInventory(); - world.registerItem(new Item(item.getID(), owner.getX(), owner.getY(), item.getAmount(), owner)); - matchRunning = false; - } - }); - } + player.setStatus(Action.DROPPING_GITEM); + Instance.getDelayedEventHandler().add(new DelayedEvent(player, 500) { + public void run() { + if (owner.isBusy() || !owner.getInventory().contains(item) + || owner.getStatus() != Action.DROPPING_GITEM) { + matchRunning = false; + return; + } + if (owner.hasMoved()) { + return; + } + world.addEntryToSnapshots(new Activity(owner.getUsername(), + owner.getUsername() + " dropped ID: " + item.getID() + + " amount: " + item.getAmount() + " at: " + + owner.getX() + "/" + owner.getY())); + + owner.getActionSender().sendSound("dropobject"); + owner.getInventory().remove(item); + owner.getActionSender().sendInventory(); + world.registerItem(new Item(item.getID(), owner.getX(), owner + .getY(), item.getAmount(), owner)); + matchRunning = false; + } + }); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/DuelHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/DuelHandler.java index 1840609..73d706c 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/DuelHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/DuelHandler.java @@ -21,335 +21,435 @@ import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; - public class DuelHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private boolean busy(Player player) { - return player.isBusy() || player.isRanging() || player.accessingBank() || player.isTrading(); - } - - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - - Player affectedPlayer = player.getWishToDuel(); - if (player == affectedPlayer) { - Logger.println("Warning : " + player.getUsername() + " tried to duel himself"); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; + private boolean busy(Player player) { + return player.isBusy() || player.isRanging() || player.accessingBank() + || player.isTrading(); } - if(player.isPMod() && !player.isMod()) - return; - if (player.isDuelConfirmAccepted() && affectedPlayer != null && affectedPlayer.isDuelConfirmAccepted()) { - // If we are actually dueling we shouldn't touch any settings - // (modify or unset!) - return; - } - if (busy(player) || player.getLocation().inWilderness()) { - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - if (player.getLocation().inModRoom()) { - player.getActionSender().sendMessage("You cannot duel in here!"); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - switch (pID) { - case 222: // Sending duel request - affectedPlayer = world.getPlayer(p.readShort()); - if (affectedPlayer == null || affectedPlayer.isDueling() || !player.withinRange(affectedPlayer, 8) || player.isDueling() || player.tradeDuelThrottling()) { - unsetOptions(player); - return; - } - if (!new PathGenerator(player.getX(), player.getY(), affectedPlayer.getX(), affectedPlayer.getY()).isValid()) { - unsetOptions(player); - return; - } - if ((affectedPlayer.getPrivacySetting(3) && !affectedPlayer.isFriendsWith(player.getUsernameHash())) || affectedPlayer.isIgnoring(player.getUsernameHash())) { - player.getActionSender().sendMessage("This player has duel requests blocked."); - return; - } - - player.setWishToDuel(affectedPlayer); - player.getActionSender().sendMessage(affectedPlayer.isDueling() ? affectedPlayer.getUsername() + " is already in a duel" : "Sending duel request"); - affectedPlayer.getActionSender().sendMessage(player.getUsername() + " " + Formulae.getLvlDiffColour(affectedPlayer.getCombatLevel() - player.getCombatLevel()) + "(level-" + player.getCombatLevel() + ")@whi@ wishes to duel with you"); - - if (!player.isDueling() && affectedPlayer.getWishToDuel() != null && affectedPlayer.getWishToDuel().equals(player) && !affectedPlayer.isDueling()) { - player.setDueling(true); - player.resetPath(); - player.clearDuelOptions(); - player.resetAllExceptDueling(); - affectedPlayer.setDueling(true); - affectedPlayer.resetPath(); - affectedPlayer.clearDuelOptions(); - affectedPlayer.resetAllExceptDueling(); - - player.getActionSender().sendDuelWindowOpen(); - affectedPlayer.getActionSender().sendDuelWindowOpen(); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " sent duel request " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); - - } - break; - case 252: // Duel accepted - affectedPlayer = player.getWishToDuel(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isDueling() || !affectedPlayer.isDueling()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - - player.setDuelOfferAccepted(true); - - player.getActionSender().sendDuelAcceptUpdate(); - affectedPlayer.getActionSender().sendDuelAcceptUpdate(); - - if (affectedPlayer.isDuelOfferAccepted()) { - player.getActionSender().sendDuelAccept(); - affectedPlayer.getActionSender().sendDuelAccept(); - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " accepted duel request " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); - - break; - case 87: // Confirm accepted - affectedPlayer = player.getWishToDuel(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isDueling() || !affectedPlayer.isDueling() || !player.isDuelOfferAccepted() || !affectedPlayer.isDuelOfferAccepted()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - player.setDuelConfirmAccepted(true); - - if (affectedPlayer.isDuelConfirmAccepted()) { - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " started duel " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); - player.getActionSender().sendDuelWindowClose(); - player.getActionSender().sendMessage("Commencing Duel"); - affectedPlayer.getActionSender().sendDuelWindowClose(); - affectedPlayer.getActionSender().sendMessage("Commencing Duel"); - - player.resetAllExceptDueling(); - player.setBusy(true); - player.setStatus(Action.DUELING_PLAYER); - - affectedPlayer.resetAllExceptDueling(); - affectedPlayer.setBusy(true); - affectedPlayer.setStatus(Action.DUELING_PLAYER); - - if (player.getDuelSetting(3)) { - for (InvItem item : player.getInventory().getItems()) { - if (item.isWielded()) { - item.setWield(false); - player.updateWornItems(item.getWieldableDef().getWieldPos(), player.getPlayerAppearance().getSprite(item.getWieldableDef().getWieldPos())); - } - } - player.getActionSender().sendSound("click"); - player.getActionSender().sendInventory(); - player.getActionSender().sendEquipmentStats(); - - for (InvItem item : affectedPlayer.getInventory().getItems()) { - if (item.isWielded()) { - item.setWield(false); - affectedPlayer.updateWornItems(item.getWieldableDef().getWieldPos(), affectedPlayer.getPlayerAppearance().getSprite(item.getWieldableDef().getWieldPos())); - } - } - affectedPlayer.getActionSender().sendSound("click"); - affectedPlayer.getActionSender().sendInventory(); - affectedPlayer.getActionSender().sendEquipmentStats(); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + Player affectedPlayer = player.getWishToDuel(); + if (player == affectedPlayer) { + Logger.println("Warning : " + player.getUsername() + + " tried to duel himself"); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; } - - if (player.getDuelSetting(2)) { - for (int x = 0; x < 14; x++) { - if (player.isPrayerActivated(x)) { - player.removePrayerDrain(x); - player.setPrayer(x, false); - } - if (affectedPlayer.isPrayerActivated(x)) { - affectedPlayer.removePrayerDrain(x); - affectedPlayer.setPrayer(x, false); - } - } - player.getActionSender().sendPrayers(); - affectedPlayer.getActionSender().sendPrayers(); + if (player.isPMod() && !player.isMod()) + return; + if (player.isDuelConfirmAccepted() && affectedPlayer != null + && affectedPlayer.isDuelConfirmAccepted()) { + // If we are actually dueling we shouldn't touch any settings + // (modify or unset!) + return; } + if (busy(player) || player.getLocation().inWilderness()) { + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + if (player.getLocation().inModRoom()) { + player.getActionSender().sendMessage("You cannot duel in here!"); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + switch (pID) { + case 222: // Sending duel request + affectedPlayer = world.getPlayer(p.readShort()); + if (affectedPlayer == null || affectedPlayer.isDueling() + || !player.withinRange(affectedPlayer, 8) + || player.isDueling() || player.tradeDuelThrottling()) { + unsetOptions(player); + return; + } + if (!new PathGenerator(player.getX(), player.getY(), + affectedPlayer.getX(), affectedPlayer.getY()).isValid()) { + unsetOptions(player); + return; + } - player.setFollowing(affectedPlayer); - WalkToMobEvent walking = new WalkToMobEvent(player, affectedPlayer, 1) { - public void arrived() { - Instance.getDelayedEventHandler().add(new SingleEvent(owner, 300) { - public void action() { - Player affectedPlayer = (Player) affectedMob; - owner.resetPath(); - if (!owner.nextTo(affectedPlayer)) { - unsetOptions(owner); - unsetOptions(affectedPlayer); - return; - } + if ((affectedPlayer.getPrivacySetting(3) && !affectedPlayer + .isFriendsWith(player.getUsernameHash())) + || affectedPlayer.isIgnoring(player.getUsernameHash())) { + player.getActionSender().sendMessage( + "This player has duel requests blocked."); + return; + } + + player.setWishToDuel(affectedPlayer); + player.getActionSender().sendMessage( + affectedPlayer.isDueling() ? affectedPlayer.getUsername() + + " is already in a duel" : "Sending duel request"); + affectedPlayer.getActionSender() + .sendMessage( + player.getUsername() + + " " + + Formulae.getLvlDiffColour(affectedPlayer + .getCombatLevel() + - player.getCombatLevel()) + + "(level-" + player.getCombatLevel() + + ")@whi@ wishes to duel with you"); + + if (!player.isDueling() && affectedPlayer.getWishToDuel() != null + && affectedPlayer.getWishToDuel().equals(player) + && !affectedPlayer.isDueling()) { + player.setDueling(true); + player.resetPath(); + player.clearDuelOptions(); + player.resetAllExceptDueling(); + affectedPlayer.setDueling(true); affectedPlayer.resetPath(); - - owner.resetAllExceptDueling(); + affectedPlayer.clearDuelOptions(); affectedPlayer.resetAllExceptDueling(); - owner.setLocation(affectedPlayer.getLocation(), true); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.removeWatchedPlayer(owner); + player.getActionSender().sendDuelWindowOpen(); + affectedPlayer.getActionSender().sendDuelWindowOpen(); + world.addEntryToSnapshots(new Activity(player.getUsername(), + player.getUsername() + " sent duel request " + + affectedPlayer.getUsername() + " at: " + + player.getX() + "/" + player.getY() + " | " + + affectedPlayer.getX() + "/" + + affectedPlayer.getY())); + + } + break; + case 252: // Duel accepted + affectedPlayer = player.getWishToDuel(); + if (affectedPlayer == null || busy(affectedPlayer) + || !player.isDueling() || !affectedPlayer.isDueling()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + + player.setDuelOfferAccepted(true); + + player.getActionSender().sendDuelAcceptUpdate(); + affectedPlayer.getActionSender().sendDuelAcceptUpdate(); + + if (affectedPlayer.isDuelOfferAccepted()) { + player.getActionSender().sendDuelAccept(); + affectedPlayer.getActionSender().sendDuelAccept(); + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " accepted duel request " + + affectedPlayer.getUsername() + + " at: " + + player.getX() + + "/" + + player.getY() + + " | " + + affectedPlayer.getX() + + "/" + + affectedPlayer.getY())); + + break; + case 87: // Confirm accepted + affectedPlayer = player.getWishToDuel(); + if (affectedPlayer == null || busy(affectedPlayer) + || !player.isDueling() || !affectedPlayer.isDueling() + || !player.isDuelOfferAccepted() + || !affectedPlayer.isDuelOfferAccepted()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + player.setDuelConfirmAccepted(true); + + if (affectedPlayer.isDuelConfirmAccepted()) { + world.addEntryToSnapshots(new Activity(player.getUsername(), + player.getUsername() + " started duel " + + affectedPlayer.getUsername() + " at: " + + player.getX() + "/" + player.getY() + " | " + + affectedPlayer.getX() + "/" + + affectedPlayer.getY())); + player.getActionSender().sendDuelWindowClose(); + player.getActionSender().sendMessage("Commencing Duel"); + affectedPlayer.getActionSender().sendDuelWindowClose(); + affectedPlayer.getActionSender().sendMessage("Commencing Duel"); + + player.resetAllExceptDueling(); + player.setBusy(true); + player.setStatus(Action.DUELING_PLAYER); + + affectedPlayer.resetAllExceptDueling(); + affectedPlayer.setBusy(true); + affectedPlayer.setStatus(Action.DUELING_PLAYER); + + if (player.getDuelSetting(3)) { + for (InvItem item : player.getInventory().getItems()) { + if (item.isWielded()) { + item.setWield(false); + player.updateWornItems( + item.getWieldableDef().getWieldPos(), + player.getPlayerAppearance().getSprite( + item.getWieldableDef() + .getWieldPos())); + } + } + player.getActionSender().sendSound("click"); + player.getActionSender().sendInventory(); + player.getActionSender().sendEquipmentStats(); + + for (InvItem item : affectedPlayer.getInventory() + .getItems()) { + if (item.isWielded()) { + item.setWield(false); + affectedPlayer.updateWornItems( + item.getWieldableDef().getWieldPos(), + affectedPlayer.getPlayerAppearance() + .getSprite( + item.getWieldableDef() + .getWieldPos())); + } + } + affectedPlayer.getActionSender().sendSound("click"); + affectedPlayer.getActionSender().sendInventory(); + affectedPlayer.getActionSender().sendEquipmentStats(); + } - owner.setSprite(9); - owner.setOpponent(affectedMob); - owner.setCombatTimer(); - - affectedPlayer.setSprite(8); - affectedPlayer.setOpponent(owner); - affectedPlayer.setCombatTimer(); - - Player attacker, opponent; - if (owner.getCombatLevel() > affectedPlayer.getCombatLevel()) { - attacker = affectedPlayer; - opponent = owner; - } else if (affectedPlayer.getCombatLevel() > owner.getCombatLevel()) { - attacker = owner; - opponent = affectedPlayer; - } else if (DataConversions.random(0, 1) == 1) { - attacker = owner; - opponent = affectedPlayer; - } else { - attacker = affectedPlayer; - opponent = owner; + if (player.getDuelSetting(2)) { + for (int x = 0; x < 14; x++) { + if (player.isPrayerActivated(x)) { + player.removePrayerDrain(x); + player.setPrayer(x, false); + } + if (affectedPlayer.isPrayerActivated(x)) { + affectedPlayer.removePrayerDrain(x); + affectedPlayer.setPrayer(x, false); + } + } + player.getActionSender().sendPrayers(); + affectedPlayer.getActionSender().sendPrayers(); } - DuelEvent dueling = new DuelEvent(attacker, opponent); - dueling.setLastRun(0); - Instance.getDelayedEventHandler().add(dueling); - } - }); - } - public void failed() { - Player affectedPlayer = (Player) affectedMob; - owner.getActionSender().sendMessage("Error walking to " + affectedPlayer.getUsername() + " (known bug)"); - affectedPlayer.getActionSender().sendMessage("Error walking to " + owner.getUsername() + " (known bug)"); - unsetOptions(owner); + player.setFollowing(affectedPlayer); + WalkToMobEvent walking = new WalkToMobEvent(player, + affectedPlayer, 1) { + public void arrived() { + Instance.getDelayedEventHandler().add( + new SingleEvent(owner, 300) { + public void action() { + Player affectedPlayer = (Player) affectedMob; + owner.resetPath(); + if (!owner.nextTo(affectedPlayer)) { + unsetOptions(owner); + unsetOptions(affectedPlayer); + return; + } + affectedPlayer.resetPath(); + + owner.resetAllExceptDueling(); + affectedPlayer.resetAllExceptDueling(); + + owner.setLocation( + affectedPlayer.getLocation(), + true); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.removeWatchedPlayer(owner); + } + + owner.setSprite(9); + owner.setOpponent(affectedMob); + owner.setCombatTimer(); + + affectedPlayer.setSprite(8); + affectedPlayer.setOpponent(owner); + affectedPlayer.setCombatTimer(); + + Player attacker, opponent; + if (owner.getCombatLevel() > affectedPlayer + .getCombatLevel()) { + attacker = affectedPlayer; + opponent = owner; + } else if (affectedPlayer + .getCombatLevel() > owner + .getCombatLevel()) { + attacker = owner; + opponent = affectedPlayer; + } else if (DataConversions.random(0, 1) == 1) { + attacker = owner; + opponent = affectedPlayer; + } else { + attacker = affectedPlayer; + opponent = owner; + } + DuelEvent dueling = new DuelEvent( + attacker, opponent); + dueling.setLastRun(0); + Instance.getDelayedEventHandler().add( + dueling); + } + }); + } + + public void failed() { + Player affectedPlayer = (Player) affectedMob; + owner.getActionSender().sendMessage( + "Error walking to " + + affectedPlayer.getUsername() + + " (known bug)"); + affectedPlayer.getActionSender().sendMessage( + "Error walking to " + owner.getUsername() + + " (known bug)"); + unsetOptions(owner); + unsetOptions(affectedPlayer); + owner.setBusy(false); + affectedPlayer.setBusy(false); + } + }; + walking.setLastRun(GameEngine.getTime() + 500); + Instance.getDelayedEventHandler().add(walking); + } + break; + case 35: // Decline duel + affectedPlayer = player.getWishToDuel(); + if (affectedPlayer == null || busy(affectedPlayer) + || !player.isDueling() || !affectedPlayer.isDueling()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + affectedPlayer.getActionSender().sendMessage( + player.getUsername() + " has declined the duel."); + + unsetOptions(player); unsetOptions(affectedPlayer); - owner.setBusy(false); - affectedPlayer.setBusy(false); - } - }; - walking.setLastRun(GameEngine.getTime() + 500); - Instance.getDelayedEventHandler().add(walking); - } - break; - case 35: // Decline duel - affectedPlayer = player.getWishToDuel(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isDueling() || !affectedPlayer.isDueling()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - affectedPlayer.getActionSender().sendMessage(player.getUsername() + " has declined the duel."); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " declined duel " + + affectedPlayer.getUsername() + + " at: " + + player.getX() + + "/" + + player.getY() + + " | " + + affectedPlayer.getX() + + "/" + + affectedPlayer.getY())); - unsetOptions(player); - unsetOptions(affectedPlayer); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " declined duel " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); + break; + case 123: // Receive offered item data + affectedPlayer = player.getWishToDuel(); + if (affectedPlayer == null + || busy(affectedPlayer) + || !player.isDueling() + || !affectedPlayer.isDueling() + || (player.isDuelOfferAccepted() && affectedPlayer + .isDuelOfferAccepted()) + || player.isDuelConfirmAccepted() + || affectedPlayer.isDuelConfirmAccepted()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } - break; - case 123: // Receive offered item data - affectedPlayer = player.getWishToDuel(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isDueling() || !affectedPlayer.isDueling() || (player.isDuelOfferAccepted() && affectedPlayer.isDuelOfferAccepted()) || player.isDuelConfirmAccepted() || affectedPlayer.isDuelConfirmAccepted()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } + player.setDuelOfferAccepted(false); + player.setDuelConfirmAccepted(false); + affectedPlayer.setDuelOfferAccepted(false); + affectedPlayer.setDuelConfirmAccepted(false); - player.setDuelOfferAccepted(false); - player.setDuelConfirmAccepted(false); - affectedPlayer.setDuelOfferAccepted(false); - affectedPlayer.setDuelConfirmAccepted(false); + player.getActionSender().sendDuelAcceptUpdate(); + affectedPlayer.getActionSender().sendDuelAcceptUpdate(); - player.getActionSender().sendDuelAcceptUpdate(); - affectedPlayer.getActionSender().sendDuelAcceptUpdate(); + Inventory duelOffer = new Inventory(); + player.resetDuelOffer(); + int count = (int) p.readByte(); + for (int slot = 0; slot < count; slot++) { + InvItem tItem = new InvItem(p.readShort(), p.readInt()); + if (tItem.getAmount() < 1) { + player.setSuspiciousPlayer(true); + continue; + } + ItemDef def = tItem.getDef(); + if (!def.canTrade()) { + player.getActionSender().sendMessage( + def.getName() + + " cannot be traded with other players"); + player.setRequiresOfferUpdate(true); + continue; + } + duelOffer.add(tItem); + } + for (InvItem item : duelOffer.getItems()) { + if (duelOffer.countId(item.getID()) > player.getInventory() + .countId(item.getID())) { + player.setSuspiciousPlayer(true); + return; + } + player.addToDuelOffer(item); + } + player.setRequiresOfferUpdate(true); + break; - Inventory duelOffer = new Inventory(); - player.resetDuelOffer(); - int count = (int) p.readByte(); - for (int slot = 0; slot < count; slot++) { - InvItem tItem = new InvItem(p.readShort(), p.readInt()); - if (tItem.getAmount() < 1) { - player.setSuspiciousPlayer(true); - continue; + case 225: // Set duel options + affectedPlayer = player.getWishToDuel(); + if (affectedPlayer == null + || busy(affectedPlayer) + || !player.isDueling() + || !affectedPlayer.isDueling() + || (player.isDuelOfferAccepted() && affectedPlayer + .isDuelOfferAccepted()) + || player.isDuelConfirmAccepted() + || affectedPlayer.isDuelConfirmAccepted()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + + player.setDuelOfferAccepted(false); + player.setDuelConfirmAccepted(false); + affectedPlayer.setDuelOfferAccepted(false); + affectedPlayer.setDuelConfirmAccepted(false); + + player.getActionSender().sendDuelAcceptUpdate(); + affectedPlayer.getActionSender().sendDuelAcceptUpdate(); + + for (int i = 0; i < 4; i++) { + boolean b = p.readByte() == 1; + player.setDuelSetting(i, b); + affectedPlayer.setDuelSetting(i, b); + } + + player.getActionSender().sendDuelSettingUpdate(); + affectedPlayer.getActionSender().sendDuelSettingUpdate(); + break; } - ItemDef def = tItem.getDef(); - if (!def.canTrade()) { - player.getActionSender().sendMessage(def.getName() + " cannot be traded with other players"); - player.setRequiresOfferUpdate(true); - continue; - } - duelOffer.add(tItem); - } - for (InvItem item : duelOffer.getItems()) { - if (duelOffer.countId(item.getID()) > player.getInventory().countId(item.getID())) { - player.setSuspiciousPlayer(true); - return; - } - player.addToDuelOffer(item); - } - player.setRequiresOfferUpdate(true); - break; - - case 225: // Set duel options - affectedPlayer = player.getWishToDuel(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isDueling() || !affectedPlayer.isDueling() || (player.isDuelOfferAccepted() && affectedPlayer.isDuelOfferAccepted()) || player.isDuelConfirmAccepted() || affectedPlayer.isDuelConfirmAccepted()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - - player.setDuelOfferAccepted(false); - player.setDuelConfirmAccepted(false); - affectedPlayer.setDuelOfferAccepted(false); - affectedPlayer.setDuelConfirmAccepted(false); - - player.getActionSender().sendDuelAcceptUpdate(); - affectedPlayer.getActionSender().sendDuelAcceptUpdate(); - - for (int i = 0; i < 4; i++) { - boolean b = p.readByte() == 1; - player.setDuelSetting(i, b); - affectedPlayer.setDuelSetting(i, b); - } - - player.getActionSender().sendDuelSettingUpdate(); - affectedPlayer.getActionSender().sendDuelSettingUpdate(); - break; } - } - private void unsetOptions(Player p) { - if (p == null) { - return; + private void unsetOptions(Player p) { + if (p == null) { + return; + } + p.resetDueling(); } - p.resetDueling(); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/DummyPacket.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/DummyPacket.java index 534e6c4..e29da33 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/DummyPacket.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/DummyPacket.java @@ -7,25 +7,26 @@ import org.moparscape.msc.gs.connection.Packet; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.phandler.PacketHandler; - public class DummyPacket implements PacketHandler { - public void handlePacket(Packet p, IoSession session) throws Exception { - try { - if (p.getLength() > 2) { // 1 for byte, 2 for short - byte b = p.readByte(); - int clientVersion = p.readShort(); - if (clientVersion > Config.SERVER_VERSION - 5 && clientVersion < Config.SERVER_VERSION + 1) { - RSCPacketBuilder pb = new RSCPacketBuilder(); - pb.setBare(true); - pb.addByte((byte) 4); // client update - session.write(pb.toPacket()); - Player player = (Player) session.getAttachment(); - player.destroy(true); - } - } - } catch (Exception e) { + public void handlePacket(Packet p, IoSession session) throws Exception { + try { + if (p.getLength() > 2) { // 1 for byte, 2 for short + @SuppressWarnings("unused") + byte b = p.readByte(); + int clientVersion = p.readShort(); + if (clientVersion > Config.SERVER_VERSION - 5 + && clientVersion < Config.SERVER_VERSION + 1) { + RSCPacketBuilder pb = new RSCPacketBuilder(); + pb.setBare(true); + pb.addByte((byte) 4); // client update + session.write(pb.toPacket()); + Player player = (Player) session.getAttachment(); + player.destroy(true); + } + } + } catch (Exception e) { + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/ExceptionHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/ExceptionHandler.java index 10a6c7d..30ffa97 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/ExceptionHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/ExceptionHandler.java @@ -8,23 +8,22 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class ExceptionHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - try { - Player player = (Player) session.getAttachment(); - Logger.error("[CLIENT] Exception from " + player.getUsername() + ": " + p.readString()); - } - catch(Exception e) { - e.printStackTrace(); - } - - //player.getActionSender().sendLogout(); - //player.destroy(false); - } + public void handlePacket(Packet p, IoSession session) throws Exception { + try { + Player player = (Player) session.getAttachment(); + Logger.error("[CLIENT] Exception from " + player.getUsername() + + ": " + p.readString()); + } catch (Exception e) { + e.printStackTrace(); + } + + // player.getActionSender().sendLogout(); + // player.destroy(false); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/FollowRequest.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/FollowRequest.java index 9a7af8d..562b730 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/FollowRequest.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/FollowRequest.java @@ -9,30 +9,41 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; - public class FollowRequest implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - Player affectedPlayer = world.getPlayer(p.readShort()); - if (affectedPlayer == null) { - player.setSuspiciousPlayer(true); - return; - } - if (player.isBusy()) { - player.resetPath(); - return; - } - if (GameEngine.getTime() - player.lastRun < 3000) - return; - player.resetAll(); - player.setFollowing(affectedPlayer, 1); - player.getActionSender().sendMessage("Now following " + affectedPlayer.getUsername()); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " started to follow " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + Player affectedPlayer = world.getPlayer(p.readShort()); + if (affectedPlayer == null) { + player.setSuspiciousPlayer(true); + return; + } + if (player.isBusy()) { + player.resetPath(); + return; + } + if (GameEngine.getTime() - player.getLastRun() < 3000) + return; + player.resetAll(); + player.setFollowing(affectedPlayer, 1); + player.getActionSender().sendMessage( + "Now following " + affectedPlayer.getUsername()); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " started to follow " + + affectedPlayer.getUsername() + + " at: " + + player.getX() + + "/" + + player.getY() + + " | " + + affectedPlayer.getX() + + "/" + + affectedPlayer.getY())); - } + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/FriendHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/FriendHandler.java index d083ee1..35c5a69 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/FriendHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/FriendHandler.java @@ -16,72 +16,88 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; - public class FriendHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private MiscPacketBuilder loginSender = Instance.getServer().getLoginConnector().getActionSender(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private MiscPacketBuilder loginSender = Instance.getServer() + .getLoginConnector().getActionSender(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); - long user = player.getUsernameHash(); - long friend = p.readLong(); - switch (pID) { - case 168: // Add friend - if (player.friendCount() >= 200) { - player.getActionSender().sendMessage("Your friend list is too full"); - return; - } - loginSender.addFriend(user, friend); - player.addFriend(friend, 0); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " added friend " + DataConversions.hashToUsername(friend)+ " at: " + player.getX() + "/" + player.getY())); - - break; - case 52: // Remove friend - loginSender.removeFriend(user, friend); - player.removeFriend(friend); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " removed friend " + DataConversions.hashToUsername(friend)+ " at: " + player.getX() + "/" + player.getY())); - - break; - case 25: // Add ignore - if (player.ignoreCount() >= 200) { - player.getActionSender().sendMessage("Your ignore list is too full"); - return; - } - loginSender.addIgnore(user, friend); - player.addIgnore(friend); - break; - case 108: // Remove ignore - loginSender.removeIgnore(user, friend); - player.removeIgnore(friend); - break; - case 254: // Send PM - try { - byte[] data = p.getRemainingData(); - String s = DataConversions.byteToString(data, 0, data.length); - s = s.toLowerCase(); - String k = s; - s = s.replace(" ", ""); - s = s.replace(".", ""); - if (s.contains("runeblast")) { - Logger.println(player.getUsername() + " pmed " + DataConversions.hashToUsername(friend) + ":" + k); - AlertHandler.sendAlert(player.getUsername() + " pmed " + DataConversions.hashToUsername(friend) + ":" + k, 2); - return; + long user = player.getUsernameHash(); + long friend = p.readLong(); + switch (pID) { + case 168: // Add friend + if (player.friendCount() >= 200) { + player.getActionSender().sendMessage( + "Your friend list is too full"); + return; + } + loginSender.addFriend(user, friend); + player.addFriend(friend, 0); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " added friend " + + DataConversions.hashToUsername(friend) + + " at: " + + player.getX() + "/" + player.getY())); + + break; + case 52: // Remove friend + loginSender.removeFriend(user, friend); + player.removeFriend(friend); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " removed friend " + + DataConversions.hashToUsername(friend) + + " at: " + + player.getX() + "/" + player.getY())); + + break; + case 25: // Add ignore + if (player.ignoreCount() >= 200) { + player.getActionSender().sendMessage( + "Your ignore list is too full"); + return; + } + loginSender.addIgnore(user, friend); + player.addIgnore(friend); + break; + case 108: // Remove ignore + loginSender.removeIgnore(user, friend); + player.removeIgnore(friend); + break; + case 254: // Send PM + try { + byte[] data = p.getRemainingData(); + String s = DataConversions.byteToString(data, 0, data.length); + s = s.toLowerCase(); + String k = s; + s = s.replace(" ", ""); + s = s.replace(".", ""); + if (s.contains("runeblast")) { + Logger.println(player.getUsername() + " pmed " + + DataConversions.hashToUsername(friend) + ":" + k); + AlertHandler.sendAlert(player.getUsername() + " pmed " + + DataConversions.hashToUsername(friend) + ":" + k, + 2); + return; + } + ArrayList temp = new ArrayList(); + temp.add(DataConversions.hashToUsername(friend)); + world.addEntryToSnapshots(new Chatlog(player.getUsername(), + "(PM) " + k, temp)); + + loginSender.sendPM(user, friend, player.isPMod(), data); + } catch (NegativeArraySizeException e) { + player.destroy(false); + } + break; } - ArrayList temp = new ArrayList(); - temp.add(DataConversions.hashToUsername(friend)); - world.addEntryToSnapshots(new Chatlog(player.getUsername(),"(PM) " + k, temp)); - - loginSender.sendPM(user, friend, player.isPMod(), data); - } catch (NegativeArraySizeException e) { - player.destroy(false); - } - break; } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/GameSettingHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/GameSettingHandler.java index 201c9a0..6c633da 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/GameSettingHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/GameSettingHandler.java @@ -9,32 +9,31 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class GameSettingHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private GameSettingUpdatePacketBuilder builder = new GameSettingUpdatePacketBuilder(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private GameSettingUpdatePacketBuilder builder = new GameSettingUpdatePacketBuilder(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int idx = (int) p.readByte(); - if (idx < 0 || idx > 6) { - player.setSuspiciousPlayer(true); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int idx = (int) p.readByte(); + if (idx < 0 || idx > 6) { + player.setSuspiciousPlayer(true); + return; + } + boolean on = p.readByte() == 1; + player.setGameSetting(idx, on); + + builder.setPlayer(player); + builder.setIndex(idx); + builder.setOn(on); + + LSPacket packet = builder.getPacket(); + if (packet != null) { + Instance.getServer().getLoginConnector().getSession().write(packet); + } } - boolean on = p.readByte() == 1; - player.setGameSetting(idx, on); - - builder.setPlayer(player); - builder.setIndex(idx); - builder.setOn(on); - - LSPacket packet = builder.getPacket(); - if (packet != null) { - Instance.getServer().getLoginConnector().getSession().write(packet); - } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java index 52f25c2..e9ef108 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java @@ -22,770 +22,946 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.tools.DataConversions; - public class InvActionHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - int INFECTED_BLOOD = 1322; - Player player = (Player) session.getAttachment(); - int idx = (int) p.readShort(); - if (idx < 0 || idx >= player.getInventory().size()) { - player.setSuspiciousPlayer(true); - return; - } - final InvItem item = player.getInventory().get(idx); - if (item == null || item.getDef().getCommand().equals("")) { - player.setSuspiciousPlayer(true); - return; - } - if(item.getDef().isMembers() && Config.f2pWildy && player.getLocation().inWilderness() && item.getID() != 814) { - player.getActionSender().sendMessage("Can not use a Member item in the wilderness"); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item " + item.getDef().getName() + "(" + item.getID() + ")" + " [CMD: "+item.getDef().getCommand()+"] at: " + player.getX() + "/" + player.getY())); - - if (item.getID() == 1263) { - //player.resetPath(); // This isn't how it's done in RSC - //player.setBusy(true); // Shouldn't be here - player.getActionSender().sendMessage("You rest in the sleeping bag"); - showBubble(player, item); - player.getActionSender().sendEnterSleep(); - // player.setFatigue(0); - // player.getActionSender().sendFatigue(); - // player.getActionSender().sendMessage("You wake up - feeling refreshed"); - // player.isSleeping = true; - // player.setBusy(false); - return; - } - - if (player.isBusy()) { - if (player.inCombat()) { - player.getActionSender().sendMessage("You cannot do that whilst fighting!"); - } - return; - }//sip - player.resetAll(); - - if (world.getQuestManager().handleUseItem(item, player)) - return; - if (item.getDef().getCommand().equalsIgnoreCase("identify")) { - if (!Server.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - ItemUnIdentHerbDef herb = item.getUnIdentHerbDef(); - if (herb == null) { - return; - } - if (player.getMaxStat(15) < herb.getLevelRequired()) { - player.getActionSender().sendMessage("Your herblaw ability is not high enough to clean this herb."); - return; - } - player.setBusy(true); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - ItemUnIdentHerbDef herb = item.getUnIdentHerbDef(); - InvItem newItem = new InvItem(herb.getNewId()); - owner.getInventory().remove(item); - owner.getInventory().add(newItem); - owner.getActionSender().sendMessage("You clean the mud off the " + newItem.getDef().getName() + "."); - owner.incExp(15, herb.getExp(), true); - owner.getActionSender().sendStat(15); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + int INFECTED_BLOOD = 1322; + Player player = (Player) session.getAttachment(); + int idx = (int) p.readShort(); + if (idx < 0 || idx >= player.getInventory().size()) { + player.setSuspiciousPlayer(true); + return; } - }); - return; - } - - if (item.isEdible()) { - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - player.setBusy(true); - player.getActionSender().sendSound("eat"); - if (item.getID() == 228 || item.getID() == 18) - player.getActionSender().sendMessage("You eat the " + item.getDef().getName() + ". Yuck!"); - else - player.getActionSender().sendMessage("You eat the " + item.getDef().getName() + "."); - // 1263 - final boolean heals = player.getCurStat(3) < player.getMaxStat(3); - if (heals) { - int newHp = player.getCurStat(3) + item.eatingHeals(); - if (newHp > player.getMaxStat(3)) { - newHp = player.getMaxStat(3); + final InvItem item = player.getInventory().get(idx); + if (item == null || item.getDef().getCommand().equals("")) { + player.setSuspiciousPlayer(true); + return; } - player.setCurStat(3, newHp); - player.getActionSender().sendStat(3); - } - Instance.getDelayedEventHandler().add(new SingleEvent(player, 185) { - public void action() { - if (heals) { - owner.getActionSender().sendMessage("It heals some health."); - } - owner.getInventory().remove(item); - switch (item.getID()) { - case 326: // Meat pizza - owner.getInventory().add(new InvItem(328)); - break; - case 327: // Anchovie pizza - owner.getInventory().add(new InvItem(329)); - break; - case 330: // Cake - owner.getInventory().add(new InvItem(333)); - break; - case 333: // Partical cake - owner.getInventory().add(new InvItem(335)); - break; - case 332: // Choc cake - owner.getInventory().add(new InvItem(334)); - break; - case 334: // Partical choc cake - owner.getInventory().add(new InvItem(336)); - break; - case 257: // Apple pie - owner.getInventory().add(new InvItem(263)); - break; - case 261: // Half apple pie - owner.getInventory().add(new InvItem(251)); - break; - case 258: // Redberry pie - owner.getInventory().add(new InvItem(262)); - break; - case 262: // Half redberry pie - owner.getInventory().add(new InvItem(251)); - break; - case 259: // Meat pie - owner.getInventory().add(new InvItem(261)); - break; - case 263: // Half meat pie - owner.getInventory().add(new InvItem(251)); - break; - } - owner.getActionSender().sendInventory(); - owner.setBusy(false); + if (item.getDef().isMembers() && Config.f2pWildy + && player.getLocation().inWilderness() && item.getID() != 814) { + player.getActionSender().sendMessage( + "Can not use a Member item in the wilderness"); + return; } - }); - } else if (item.getDef().getCommand().equalsIgnoreCase("open")) { - if(item.getID() == INFECTED_BLOOD) { - if(!player.isInfected()) { player.setInfected(); return; } - long lastUsed = GameEngine.getTime() - player.lastInfected(); - long remaining = 5 - lastUsed / 1000; - InvItem INFECTED_BLOOD_I = new InvItem(1322, 1); - if(lastUsed / 1000 <= 5) { player.getActionSender().sendMessage("You have to wait " + remaining + " seconds before using that again."); return; } - showBubble(player, INFECTED_BLOOD_I); - player.getActionSender().sendMessage("Pools of blood spurt our around you."); - for (Player v : player.infectedBlood()) { - if(v == player) continue; - int bloodChance = DataConversions.random(0,99); - if(bloodChance >= 15) { - showBubble(v, INFECTED_BLOOD_I); - v.setInfected(); - player.getActionSender().sendMessage("You have infected " + v.getUsername() + " >:D "); - } - } - player.setLastInfected(); - return; - } - if(item.getID() == 1321) { - int win; - int Roll = DataConversions.random(0,99); - if(player.getInventory().remove(1321,1) > -1) { - if(Roll <= 10) { win = 795; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 30) { win = 81; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 40) { win = 828; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 43) { win = 831; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 47) { win = 832; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 55) { win = 576; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 60) { win = 577; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 63) { win = 578; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 67) { win = 579; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 71) { win = 580; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 76) { win = 581; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - if(Roll <= 85) { win = 10; player.getInventory().add(new InvItem(win, 200000)); player.getActionSender().sendInventory(); return; } - if(Roll <= 100) { win = 1289; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; } - } - } - if(item.getID() == 1323) { return; } - } else if (item.getDef().getCommand().equalsIgnoreCase("open") && item.getID() == 796) { - final ActiveTile tile = world.getTile(player.getLocation()); - if (tile.hasGameObject()) { - player.getActionSender().sendMessage("You cannot do that here, please move to a new area."); - return; - } - if (player.getInventory().remove(796, 1) > -1) { - player.getActionSender().sendInventory(); - player.setBusy(true); - player.getActionSender().sendMessage("You open and plant the seed."); - world.registerGameObject(new GameObject(player.getLocation(), 490, 0, 0)); - final Point location = player.getLocation(); - Instance.getDelayedEventHandler().add(new DelayedEvent(null, 180000) { - GameObject object = world.getTile(location).getGameObject(); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item " + + item.getDef().getName() + + "(" + + item.getID() + + ")" + + " [CMD: " + + item.getDef().getCommand() + + "] at: " + player.getX() + "/" + player.getY())); - public void run() { - if (object != null) { - world.unregisterGameObject(object); - } - } - }); - } - player.setBusy(false); - return; - } - - else if (item.getDef().getCommand().equalsIgnoreCase("bury")) { - player.setBusy(true); - player.getActionSender().sendMessage("You dig a hole in the ground."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You bury the " + item.getDef().getName() + "."); - owner.getInventory().remove(item); - switch (item.getID()) { - case 20: // Bones - case 604: // Bat bones - owner.incExp(5, 8, true); - break; - case 413: // Big bones - owner.incExp(5, 24, true); - break; - case 814: // Dragon bones - owner.incExp(5, 90, true); - break; - } - owner.getActionSender().sendStat(5); - owner.getActionSender().sendInventory(); - owner.setBusy(false); + if (item.getID() == 1263) { + // player.resetPath(); // This isn't how it's done in RSC + // player.setBusy(true); // Shouldn't be here + player.getActionSender() + .sendMessage("You rest in the sleeping bag"); + showBubble(player, item); + player.getActionSender().sendEnterSleep(); + // player.setFatigue(0); + // player.getActionSender().sendFatigue(); + // player.getActionSender().sendMessage("You wake up - feeling refreshed"); + // player.isSleeping = true; + // player.setBusy(false); + return; } - });// f2p - } else if (item.getDef().getCommand().equalsIgnoreCase("drink")) { - switch (item.getID()) { - case 180: // bad wine - player.getActionSender().sendMessage("You drink the bad wine"); - showBubble(player, item); - player.getInventory().remove(item); + if (player.isBusy()) { + if (player.inCombat()) { + player.getActionSender().sendMessage( + "You cannot do that whilst fighting!"); + } + return; + }// sip + player.resetAll(); - player.getInventory().add(new InvItem(140)); - int atk = player.getCurStat(0); - atk -= 3; - if (atk < 0) - atk = 0; - player.setCurStat(0, atk); - player.getActionSender().sendStat(0); - player.getActionSender().sendInventory(); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You start to feel sick"); - } - }); - break; - case 142: - player.getActionSender().sendMessage("You drink the wine"); - showBubble(player, item); - player.getInventory().remove(item); - - player.getInventory().add(new InvItem(140)); - int hp = player.getCurStat(3); - atk = player.getCurStat(0); - atk -= 3; - hp += 11; - if (atk < 0) - atk = 0; - if (hp > player.getMaxStat(3)) - hp = player.getMaxStat(3); - - player.setCurStat(3, hp); - player.setCurStat(0, atk); - player.getActionSender().sendStat(0); - player.getActionSender().sendStat(3); - player.getActionSender().sendInventory(); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You start to feel dizzy"); - } - }); - break; - case 739: // Tea - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("It's nice and refreshing."); - owner.getInventory().remove(item); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - case 193: // Beer - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You feel slightly dizzy."); - int k = owner.getCurStat(0); - k = k - 1; - if (k < 1) - k = 0; - owner.setCurStat(0, k); - owner.getActionSender().sendStat(0); - if (owner.getCurStat(2) <= owner.getMaxStat(2)) { - owner.setCurStat(2, owner.getCurStat(2) + 2); - owner.getActionSender().sendStat(2); + if (World.getQuestManager().handleUseItem(item, player)) + return; + if (item.getDef().getCommand().equalsIgnoreCase("identify")) { + if (!Server.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(620)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - case 830: // Greenmans Ale - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("It has a strange taste."); - for (int stat = 0; stat < 3; stat++) { - owner.setCurStat(stat, owner.getCurStat(stat) - 4); - owner.getActionSender().sendStat(stat); + ItemUnIdentHerbDef herb = item.getUnIdentHerbDef(); + if (herb == null) { + return; } - if (owner.getCurStat(15) <= owner.getMaxStat(15)) { - owner.setCurStat(15, owner.getCurStat(15) + 1); - owner.getActionSender().sendStat(15); + if (player.getMaxStat(15) < herb.getLevelRequired()) { + player.getActionSender() + .sendMessage( + "Your herblaw ability is not high enough to clean this herb."); + return; } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(620)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - case 268: // Mind Bomb - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You feel very strange."); - for (int stat = 0; stat < 3; stat++) { - owner.setCurStat(stat, owner.getCurStat(stat) - 4); - owner.getActionSender().sendStat(stat); - } - int change = (owner.getMaxStat(6) > 55 ? 3 : 2); - int maxWithBomb = (owner.getMaxStat(6) + change); - if(maxWithBomb - owner.getCurStat(6) < change) { - change = maxWithBomb - owner.getCurStat(6); - } - if (owner.getCurStat(6) <= (owner.getMaxStat(6) + (owner.getMaxStat(6) > 55 ? 3 : 2))) { - owner.setCurStat(6, owner.getCurStat(6) + change); - owner.getActionSender().sendStat(6); - } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(620)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - case 269: // Dwarven Stout - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("It tastes foul."); - for (int stat = 0; stat < 3; stat++) { - owner.setCurStat(stat, owner.getCurStat(stat) - 4); - owner.getActionSender().sendStat(stat); - } - if (owner.getCurStat(13) <= owner.getMaxStat(13)) { - owner.setCurStat(13, owner.getCurStat(13) + 1); - owner.getActionSender().sendStat(13); - } - if (owner.getCurStat(14) <= owner.getMaxStat(14)) { - owner.setCurStat(14, owner.getCurStat(14) + 1); - owner.getActionSender().sendStat(14); - } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(620)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - case 267: // Asgarnian Ale - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You feel slightly reinvigorated"); - owner.getActionSender().sendMessage("And slightly dizzy too."); - owner.setCurStat(0, owner.getCurStat(0) - 4); - owner.getActionSender().sendStat(0); - if (owner.getCurStat(2) <= owner.getMaxStat(2)) { - owner.setCurStat(2, owner.getCurStat(2) + 2); - owner.getActionSender().sendStat(2); - } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(620)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - case 829: // Dragon Bitter - player.setBusy(true); - player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You feel slightly dizzy."); - owner.setCurStat(0, owner.getCurStat(0) - 4); - owner.getActionSender().sendStat(0); - if (owner.getCurStat(2) <= owner.getMaxStat(2)) { - owner.setCurStat(2, owner.getCurStat(2) + 2); - owner.getActionSender().sendStat(2); - } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(620)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - showBubble(player, item); - break; - /** HANDLE WINE+ CURE POISON AND ANTIDOTE AND ZAMAROCK POTIONS **/ - case 221: // Strength Potion - 4 dose - useNormalPotion(player, item, 2, 10, 2, 222, 3); - break; - case 222: // Strength Potion - 3 dose - useNormalPotion(player, item, 2, 10, 2, 223, 2); - break; - case 223: // Strength Potion - 2 dose - useNormalPotion(player, item, 2, 10, 2, 224, 1); - break; - case 224: // Strength Potion - 1 dose - useNormalPotion(player, item, 2, 10, 2, 465, 0); - break; - case 474: // attack Potion - 3 dose - useNormalPotion(player, item, 0, 10, 2, 475, 2); - break; - case 475: // attack Potion - 2 dose - useNormalPotion(player, item, 0, 10, 2, 476, 1); - break; - case 476: // attack Potion - 1 dose - useNormalPotion(player, item, 0, 10, 2, 465, 0); - break; - case 477: // stat restoration Potion - 3 dose - useStatRestorePotion(player, item, 478, 2); - break; - case 478: // stat restoration Potion - 2 dose - useStatRestorePotion(player, item, 479, 1); - break; - case 479: // stat restoration Potion - 1 dose - useStatRestorePotion(player, item, 465, 0); - break; - case 480: // defense Potion - 3 dose - useNormalPotion(player, item, 1, 10, 2, 481, 2); - break; - case 481: // defense Potion - 2 dose - useNormalPotion(player, item, 1, 10, 2, 482, 1); - break; - case 482: // defense Potion - 1 dose - useNormalPotion(player, item, 1, 10, 2, 465, 0); - break; - case 483: // restore prayer Potion - 3 dose - usePrayerPotion(player, item, 484, 2); - break; - case 484: // restore prayer Potion - 2 dose - usePrayerPotion(player, item, 485, 1); - break; - case 485: // restore prayer Potion - 1 dose - usePrayerPotion(player, item, 465, 0); - break; - case 486: // Super attack Potion - 3 dose - useNormalPotion(player, item, 0, 15, 4, 487, 2); - break; - case 487: // Super attack Potion - 2 dose - useNormalPotion(player, item, 0, 15, 4, 488, 1); - break; - case 488: // Super attack Potion - 1 dose - useNormalPotion(player, item, 0, 15, 4, 465, 0); - break; - case 489: // fishing Potion - 3 dose - useFishingPotion(player, item, 490, 2); - break; - case 490: // fishing Potion - 2 dose - useFishingPotion(player, item, 491, 1); - break; - case 491: // fishing Potion - 1 dose - useFishingPotion(player, item, 465, 0); - break; - case 492: // Super strength Potion - 3 dose - useNormalPotion(player, item, 2, 15, 4, 493, 2); - break; - case 493: // Super strength Potion - 2 dose - useNormalPotion(player, item, 2, 15, 4, 494, 1); - break; - case 494: // Super strength Potion - 1 dose - useNormalPotion(player, item, 2, 15, 4, 465, 0); - break; - case 495: // Super defense Potion - 3 dose - useNormalPotion(player, item, 1, 15, 4, 496, 2); - break; - case 496: // Super defense Potion - 2 dose - useNormalPotion(player, item, 1, 15, 4, 497, 1); - break; - case 497: // Super defense Potion - 1 dose - useNormalPotion(player, item, 1, 15, 4, 465, 0); - break; - case 498: // ranging Potion - 3 dose - useNormalPotion(player, item, 4, 10, 2, 499, 2); - break; - case 499: // ranging Potion - 2 dose - useNormalPotion(player, item, 4, 10, 2, 500, 1); - break; - case 500: // ranging Potion - 1 dose - useNormalPotion(player, item, 4, 10, 2, 465, 0); - break; - default: - player.getActionSender().sendMessage("Nothing interesting happens"); - return; - } - } else { - switch (item.getID()) { - case 597: // Charged Dragonstone amulet - if (!Server.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - player.getActionSender().sendMessage("You rub the amulet..."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - String[] options = new String[] { "Edgeville", "Karamja", "Draynor Village", "Al Kharid", "Seers", "Yanille" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy() || owner.inCombat() || owner.getInventory().get(item) == null) { - return; - } - if (owner.getLocation().inModRoom() && !owner.isMod()) { - owner.getActionSender().sendMessage("A magical force stops you from teleporting."); - return; - } - owner.getActionSender().sendSound("spellok"); - switch (option) { - case 0: // Edgeville - owner.teleport(193, 435, true); - break; - case 1: // Karamja - owner.teleport(360, 696, true); - break; - case 2: // Draynor Village - owner.teleport(214, 632, true); - break; - case 3: // Al Kharid - owner.teleport(72, 696, true); - break; - case 4: // Seers - owner.teleport(516, 460, true); - break; - case 5: // Yanille - owner.teleport(587, 761, true); - break; - default: - return; - - } - if (DataConversions.random(0, 5) == 1 && owner.getInventory().remove(item) > -1) { - owner.getInventory().add(new InvItem(522, 1)); - owner.getActionSender().sendInventory(); - } - } - }); - owner.getActionSender().sendMenu(options); - } - }); - break; - case 316: // Ruby ammy - case 317: // Diamond ammy - if(!player.canLogout() || System.currentTimeMillis() - player.getLastMoved() < 10000) { - player.getActionSender().sendMessage("You must stand peacefully in one place for 10 seconds!"); - return; - } - player.getActionSender().sendMessage("You rub the amulet... be careful!"); - player.getActionSender().sendMessage("All who use this cursed amulet automatically skull!"); + player.setBusy(true); Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - String[] options = new String[] { "Altar", "Castle" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (owner.isBusy() || owner.inCombat() || owner.getInventory().get(item) == null) { - return; - } - if (owner.getLocation().inModRoom() && !owner.isMod()) { - owner.getActionSender().sendMessage("A magical force stops you from teleporting."); - return; - } - owner.getActionSender().sendSound("spellok"); - switch (option) { - case 0: // altar - int x = DataConversions.random(311, 327); - int y = DataConversions.random(210, 222); - while(world.getTile(x, y).hasGameObject()) { - x = DataConversions.random(311, 327); - y = DataConversions.random(210, 222); - } - - owner.teleport(x, y, true); - owner.addSkull(1200000); - break; - case 1: // castle - x = DataConversions.random(271, 283); - y = DataConversions.random(352, 363); - while(world.getTile(x, y).hasGameObject()) { - x = DataConversions.random(271, 283); - y = DataConversions.random(352, 363); - } - owner.teleport(x, y, true); - owner.addSkull(1200000); - break; - default: - return; - - } - } - }); - owner.getActionSender().sendMenu(options); - } + public void action() { + ItemUnIdentHerbDef herb = item.getUnIdentHerbDef(); + InvItem newItem = new InvItem(herb.getNewId()); + owner.getInventory().remove(item); + owner.getInventory().add(newItem); + owner.getActionSender().sendMessage( + "You clean the mud off the " + + newItem.getDef().getName() + "."); + owner.incExp(15, herb.getExp(), true); + owner.getActionSender().sendStat(15); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + return; + } }); - break; - case 387: // Disk of Returning - if (player.getLocation().wildernessLevel() >= 30 || (player.getLocation().inModRoom() && !player.isMod())) { - player.getActionSender().sendMessage("The disk doesn't seem to work here."); - return; + return; } - player.getActionSender().sendMessage("The disk starts to spin..."); + + if (item.isEdible()) { + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + player.setBusy(true); + player.getActionSender().sendSound("eat"); + if (item.getID() == 228 || item.getID() == 18) + player.getActionSender().sendMessage( + "You eat the " + item.getDef().getName() + ". Yuck!"); + else + player.getActionSender().sendMessage( + "You eat the " + item.getDef().getName() + "."); + // 1263 + final boolean heals = player.getCurStat(3) < player.getMaxStat(3); + if (heals) { + int newHp = player.getCurStat(3) + item.eatingHeals(); + if (newHp > player.getMaxStat(3)) { + newHp = player.getMaxStat(3); + } + player.setCurStat(3, newHp); + player.getActionSender().sendStat(3); + } + Instance.getDelayedEventHandler().add(new SingleEvent(player, 185) { + public void action() { + if (heals) { + owner.getActionSender().sendMessage( + "It heals some health."); + } + owner.getInventory().remove(item); + switch (item.getID()) { + case 326: // Meat pizza + owner.getInventory().add(new InvItem(328)); + break; + case 327: // Anchovie pizza + owner.getInventory().add(new InvItem(329)); + break; + case 330: // Cake + owner.getInventory().add(new InvItem(333)); + break; + case 333: // Partical cake + owner.getInventory().add(new InvItem(335)); + break; + case 332: // Choc cake + owner.getInventory().add(new InvItem(334)); + break; + case 334: // Partical choc cake + owner.getInventory().add(new InvItem(336)); + break; + case 257: // Apple pie + owner.getInventory().add(new InvItem(263)); + break; + case 261: // Half apple pie + owner.getInventory().add(new InvItem(251)); + break; + case 258: // Redberry pie + owner.getInventory().add(new InvItem(262)); + break; + case 262: // Half redberry pie + owner.getInventory().add(new InvItem(251)); + break; + case 259: // Meat pie + owner.getInventory().add(new InvItem(261)); + break; + case 263: // Half meat pie + owner.getInventory().add(new InvItem(251)); + break; + } + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + } else if (item.getDef().getCommand().equalsIgnoreCase("open")) { + if (item.getID() == INFECTED_BLOOD) { + if (!player.isInfected()) { + player.setInfected(); + return; + } + long lastUsed = GameEngine.getTime() - player.lastInfected(); + long remaining = 5 - lastUsed / 1000; + InvItem INFECTED_BLOOD_I = new InvItem(1322, 1); + if (lastUsed / 1000 <= 5) { + player.getActionSender().sendMessage( + "You have to wait " + remaining + + " seconds before using that again."); + return; + } + showBubble(player, INFECTED_BLOOD_I); + player.getActionSender().sendMessage( + "Pools of blood spurt our around you."); + for (Player v : player.infectedBlood()) { + if (v == player) + continue; + int bloodChance = DataConversions.random(0, 99); + if (bloodChance >= 15) { + showBubble(v, INFECTED_BLOOD_I); + v.setInfected(); + player.getActionSender().sendMessage( + "You have infected " + v.getUsername() + + " >:D "); + } + } + player.setLastInfected(); + return; + } + if (item.getID() == 1321) { + int win; + int Roll = DataConversions.random(0, 99); + if (player.getInventory().remove(1321, 1) > -1) { + if (Roll <= 10) { + win = 795; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 30) { + win = 81; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 40) { + win = 828; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 43) { + win = 831; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 47) { + win = 832; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 55) { + win = 576; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 60) { + win = 577; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 63) { + win = 578; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 67) { + win = 579; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 71) { + win = 580; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 76) { + win = 581; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 85) { + win = 10; + player.getInventory().add(new InvItem(win, 200000)); + player.getActionSender().sendInventory(); + return; + } + if (Roll <= 100) { + win = 1289; + player.getInventory().add(new InvItem(win)); + player.getActionSender().sendInventory(); + return; + } + } + } + if (item.getID() == 1323) { + return; + } + } else if (item.getDef().getCommand().equalsIgnoreCase("open") + && item.getID() == 796) { + final ActiveTile tile = world.getTile(player.getLocation()); + if (tile.hasGameObject()) { + player.getActionSender().sendMessage( + "You cannot do that here, please move to a new area."); + return; + } + if (player.getInventory().remove(796, 1) > -1) { + player.getActionSender().sendInventory(); + player.setBusy(true); + player.getActionSender().sendMessage( + "You open and plant the seed."); + world.registerGameObject(new GameObject(player.getLocation(), + 490, 0, 0)); + final Point location = player.getLocation(); + Instance.getDelayedEventHandler().add( + new DelayedEvent(null, 180000) { + GameObject object = world.getTile(location) + .getGameObject(); + + public void run() { + if (object != null) { + world.unregisterGameObject(object); + } + } + }); + } + player.setBusy(false); + return; + } + + else if (item.getDef().getCommand().equalsIgnoreCase("bury")) { + player.setBusy(true); + player.getActionSender().sendMessage( + "You dig a hole in the ground."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You bury the " + item.getDef().getName() + "."); + owner.getInventory().remove(item); + switch (item.getID()) { + case 20: // Bones + case 604: // Bat bones + owner.incExp(5, 8, true); + break; + case 413: // Big bones + owner.incExp(5, 24, true); + break; + case 814: // Dragon bones + owner.incExp(5, 90, true); + break; + } + owner.getActionSender().sendStat(5); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + });// f2p + } else if (item.getDef().getCommand().equalsIgnoreCase("drink")) { + switch (item.getID()) { + case 180: // bad wine + + player.getActionSender().sendMessage("You drink the bad wine"); + showBubble(player, item); + player.getInventory().remove(item); + + player.getInventory().add(new InvItem(140)); + int atk = player.getCurStat(0); + atk -= 3; + if (atk < 0) + atk = 0; + player.setCurStat(0, atk); + player.getActionSender().sendStat(0); + player.getActionSender().sendInventory(); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You start to feel sick"); + } + }); + break; + case 142: + player.getActionSender().sendMessage("You drink the wine"); + showBubble(player, item); + player.getInventory().remove(item); + + player.getInventory().add(new InvItem(140)); + int hp = player.getCurStat(3); + atk = player.getCurStat(0); + atk -= 3; + hp += 11; + if (atk < 0) + atk = 0; + if (hp > player.getMaxStat(3)) + hp = player.getMaxStat(3); + + player.setCurStat(3, hp); + player.setCurStat(0, atk); + player.getActionSender().sendStat(0); + player.getActionSender().sendStat(3); + player.getActionSender().sendInventory(); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You start to feel dizzy"); + } + }); + break; + case 739: // Tea + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "It's nice and refreshing."); + owner.getInventory().remove(item); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + case 193: // Beer + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You feel slightly dizzy."); + int k = owner.getCurStat(0); + k = k - 1; + if (k < 1) + k = 0; + owner.setCurStat(0, k); + owner.getActionSender().sendStat(0); + if (owner.getCurStat(2) <= owner.getMaxStat(2)) { + owner.setCurStat(2, owner.getCurStat(2) + 2); + owner.getActionSender().sendStat(2); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(620)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + case 830: // Greenmans Ale + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "It has a strange taste."); + for (int stat = 0; stat < 3; stat++) { + owner.setCurStat(stat, owner.getCurStat(stat) - 4); + owner.getActionSender().sendStat(stat); + } + if (owner.getCurStat(15) <= owner.getMaxStat(15)) { + owner.setCurStat(15, owner.getCurStat(15) + 1); + owner.getActionSender().sendStat(15); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(620)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + case 268: // Mind Bomb + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You feel very strange."); + for (int stat = 0; stat < 3; stat++) { + owner.setCurStat(stat, owner.getCurStat(stat) - 4); + owner.getActionSender().sendStat(stat); + } + int change = (owner.getMaxStat(6) > 55 ? 3 : 2); + int maxWithBomb = (owner.getMaxStat(6) + change); + if (maxWithBomb - owner.getCurStat(6) < change) { + change = maxWithBomb - owner.getCurStat(6); + } + if (owner.getCurStat(6) <= (owner.getMaxStat(6) + (owner + .getMaxStat(6) > 55 ? 3 : 2))) { + owner.setCurStat(6, owner.getCurStat(6) + change); + owner.getActionSender().sendStat(6); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(620)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + case 269: // Dwarven Stout + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage("It tastes foul."); + for (int stat = 0; stat < 3; stat++) { + owner.setCurStat(stat, owner.getCurStat(stat) - 4); + owner.getActionSender().sendStat(stat); + } + if (owner.getCurStat(13) <= owner.getMaxStat(13)) { + owner.setCurStat(13, owner.getCurStat(13) + 1); + owner.getActionSender().sendStat(13); + } + if (owner.getCurStat(14) <= owner.getMaxStat(14)) { + owner.setCurStat(14, owner.getCurStat(14) + 1); + owner.getActionSender().sendStat(14); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(620)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + case 267: // Asgarnian Ale + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You feel slightly reinvigorated"); + owner.getActionSender().sendMessage( + "And slightly dizzy too."); + owner.setCurStat(0, owner.getCurStat(0) - 4); + owner.getActionSender().sendStat(0); + if (owner.getCurStat(2) <= owner.getMaxStat(2)) { + owner.setCurStat(2, owner.getCurStat(2) + 2); + owner.getActionSender().sendStat(2); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(620)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + case 829: // Dragon Bitter + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink the " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You feel slightly dizzy."); + owner.setCurStat(0, owner.getCurStat(0) - 4); + owner.getActionSender().sendStat(0); + if (owner.getCurStat(2) <= owner.getMaxStat(2)) { + owner.setCurStat(2, owner.getCurStat(2) + 2); + owner.getActionSender().sendStat(2); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(620)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); + showBubble(player, item); + break; + /** HANDLE WINE+ CURE POISON AND ANTIDOTE AND ZAMAROCK POTIONS **/ + case 221: // Strength Potion - 4 dose + useNormalPotion(player, item, 2, 10, 2, 222, 3); + break; + case 222: // Strength Potion - 3 dose + useNormalPotion(player, item, 2, 10, 2, 223, 2); + break; + case 223: // Strength Potion - 2 dose + useNormalPotion(player, item, 2, 10, 2, 224, 1); + break; + case 224: // Strength Potion - 1 dose + useNormalPotion(player, item, 2, 10, 2, 465, 0); + break; + case 474: // attack Potion - 3 dose + useNormalPotion(player, item, 0, 10, 2, 475, 2); + break; + case 475: // attack Potion - 2 dose + useNormalPotion(player, item, 0, 10, 2, 476, 1); + break; + case 476: // attack Potion - 1 dose + useNormalPotion(player, item, 0, 10, 2, 465, 0); + break; + case 477: // stat restoration Potion - 3 dose + useStatRestorePotion(player, item, 478, 2); + break; + case 478: // stat restoration Potion - 2 dose + useStatRestorePotion(player, item, 479, 1); + break; + case 479: // stat restoration Potion - 1 dose + useStatRestorePotion(player, item, 465, 0); + break; + case 480: // defense Potion - 3 dose + useNormalPotion(player, item, 1, 10, 2, 481, 2); + break; + case 481: // defense Potion - 2 dose + useNormalPotion(player, item, 1, 10, 2, 482, 1); + break; + case 482: // defense Potion - 1 dose + useNormalPotion(player, item, 1, 10, 2, 465, 0); + break; + case 483: // restore prayer Potion - 3 dose + usePrayerPotion(player, item, 484, 2); + break; + case 484: // restore prayer Potion - 2 dose + usePrayerPotion(player, item, 485, 1); + break; + case 485: // restore prayer Potion - 1 dose + usePrayerPotion(player, item, 465, 0); + break; + case 486: // Super attack Potion - 3 dose + useNormalPotion(player, item, 0, 15, 4, 487, 2); + break; + case 487: // Super attack Potion - 2 dose + useNormalPotion(player, item, 0, 15, 4, 488, 1); + break; + case 488: // Super attack Potion - 1 dose + useNormalPotion(player, item, 0, 15, 4, 465, 0); + break; + case 489: // fishing Potion - 3 dose + useFishingPotion(player, item, 490, 2); + break; + case 490: // fishing Potion - 2 dose + useFishingPotion(player, item, 491, 1); + break; + case 491: // fishing Potion - 1 dose + useFishingPotion(player, item, 465, 0); + break; + case 492: // Super strength Potion - 3 dose + useNormalPotion(player, item, 2, 15, 4, 493, 2); + break; + case 493: // Super strength Potion - 2 dose + useNormalPotion(player, item, 2, 15, 4, 494, 1); + break; + case 494: // Super strength Potion - 1 dose + useNormalPotion(player, item, 2, 15, 4, 465, 0); + break; + case 495: // Super defense Potion - 3 dose + useNormalPotion(player, item, 1, 15, 4, 496, 2); + break; + case 496: // Super defense Potion - 2 dose + useNormalPotion(player, item, 1, 15, 4, 497, 1); + break; + case 497: // Super defense Potion - 1 dose + useNormalPotion(player, item, 1, 15, 4, 465, 0); + break; + case 498: // ranging Potion - 3 dose + useNormalPotion(player, item, 4, 10, 2, 499, 2); + break; + case 499: // ranging Potion - 2 dose + useNormalPotion(player, item, 4, 10, 2, 500, 1); + break; + case 500: // ranging Potion - 1 dose + useNormalPotion(player, item, 4, 10, 2, 465, 0); + break; + default: + player.getActionSender().sendMessage( + "Nothing interesting happens"); + return; + } + } else { + switch (item.getID()) { + case 597: // Charged Dragonstone amulet + if (!Server.isMembers()) { + player.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + player.getActionSender().sendMessage("You rub the amulet..."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + String[] options = new String[] { "Edgeville", + "Karamja", "Draynor Village", "Al Kharid", + "Seers", "Yanille" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, + final String reply) { + if (owner.isBusy() + || owner.inCombat() + || owner.getInventory().get(item) == null) { + return; + } + if (owner.getLocation().inModRoom() + && !owner.isMod()) { + owner.getActionSender() + .sendMessage( + "A magical force stops you from teleporting."); + return; + } + owner.getActionSender().sendSound("spellok"); + switch (option) { + case 0: // Edgeville + owner.teleport(193, 435, true); + break; + case 1: // Karamja + owner.teleport(360, 696, true); + break; + case 2: // Draynor Village + owner.teleport(214, 632, true); + break; + case 3: // Al Kharid + owner.teleport(72, 696, true); + break; + case 4: // Seers + owner.teleport(516, 460, true); + break; + case 5: // Yanille + owner.teleport(587, 761, true); + break; + default: + return; + + } + if (DataConversions.random(0, 5) == 1 + && owner.getInventory().remove(item) > -1) { + owner.getInventory().add( + new InvItem(522, 1)); + owner.getActionSender().sendInventory(); + } + } + }); + owner.getActionSender().sendMenu(options); + } + }); + break; + case 316: // Ruby ammy + case 317: // Diamond ammy + if (!player.canLogout() + || System.currentTimeMillis() - player.getLastMoved() < 10000) { + player.getActionSender() + .sendMessage( + "You must stand peacefully in one place for 10 seconds!"); + return; + } + player.getActionSender().sendMessage( + "You rub the amulet... be careful!"); + player.getActionSender().sendMessage( + "All who use this cursed amulet automatically skull!"); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + String[] options = new String[] { "Altar", "Castle" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, + final String reply) { + if (owner.isBusy() + || owner.inCombat() + || owner.getInventory().get(item) == null) { + return; + } + if (owner.getLocation().inModRoom() + && !owner.isMod()) { + owner.getActionSender() + .sendMessage( + "A magical force stops you from teleporting."); + return; + } + owner.getActionSender().sendSound("spellok"); + switch (option) { + case 0: // altar + int x = DataConversions.random(311, 327); + int y = DataConversions.random(210, 222); + while (world.getTile(x, y).hasGameObject()) { + x = DataConversions.random(311, 327); + y = DataConversions.random(210, 222); + } + + owner.teleport(x, y, true); + owner.addSkull(1200000); + break; + case 1: // castle + x = DataConversions.random(271, 283); + y = DataConversions.random(352, 363); + while (world.getTile(x, y).hasGameObject()) { + x = DataConversions.random(271, 283); + y = DataConversions.random(352, 363); + } + owner.teleport(x, y, true); + owner.addSkull(1200000); + break; + default: + return; + + } + } + }); + owner.getActionSender().sendMenu(options); + } + }); + break; + case 387: // Disk of Returning + if (player.getLocation().wildernessLevel() >= 30 + || (player.getLocation().inModRoom() && !player.isMod())) { + player.getActionSender().sendMessage( + "The disk doesn't seem to work here."); + return; + } + player.getActionSender().sendMessage( + "The disk starts to spin..."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.resetPath(); + owner.teleport(131, 508, true); + owner.getInventory().remove(item); + owner.getActionSender().sendMessage( + "You find yourself back in Varrock"); + owner.getActionSender().sendMessage( + "The disk has now gone"); + owner.getActionSender().sendInventory(); + } + }); + break; + + default: + player.getActionSender().sendMessage( + "Nothing interesting happens"); + return; + } + } + } + + private void showBubble(Player player, InvItem item) { + Bubble bubble = new Bubble(player, item.getID()); + for (Player p1 : player.getViewArea().getPlayersInView()) { + p1.informOfBubble(bubble); + } + } + + private void useFishingPotion(Player player, final InvItem item, + final int newItem, final int left) { + if (!Server.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink some of your " + item.getDef().getName() + "."); Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.resetPath(); - owner.teleport(131, 508, true); - owner.getInventory().remove(item); - owner.getActionSender().sendMessage("You find yourself back in Varrock"); - owner.getActionSender().sendMessage("The disk has now gone"); - owner.getActionSender().sendInventory(); - } + public void action() { + owner.getActionSender().sendMessage( + "You have " + left + " doses left."); + owner.setCurStat(10, owner.getMaxStat(10) + 3); + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(newItem)); + owner.getActionSender().sendStat(10); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } }); - break; - - default: - player.getActionSender().sendMessage("Nothing interesting happens"); - return; - } } - } - private void showBubble(Player player, InvItem item) { - Bubble bubble = new Bubble(player, item.getID()); - for (Player p1 : player.getViewArea().getPlayersInView()) { - p1.informOfBubble(bubble); + private void useNormalPotion(Player player, final InvItem item, + final int affectedStat, final int percentageIncrease, + final int modifier, final int newItem, final int left) { + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink some of your " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You have " + left + " doses left."); + int baseStat = owner.getCurStat(affectedStat) > owner + .getMaxStat(affectedStat) ? owner + .getMaxStat(affectedStat) : owner + .getCurStat(affectedStat); + int newStat = baseStat + + DataConversions.roundUp((owner + .getMaxStat(affectedStat) / 100D) + * percentageIncrease) + modifier; + if (newStat > owner.getCurStat(affectedStat)) { + owner.setCurStat(affectedStat, newStat); + owner.getActionSender().sendStat(affectedStat); + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(newItem)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); } - } - private void useFishingPotion(Player player, final InvItem item, final int newItem, final int left) { - if (!Server.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; + private void usePrayerPotion(Player player, final InvItem item, + final int newItem, final int left) { + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink some of your " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You have " + left + " doses left."); + int newPrayer = owner.getCurStat(5) + 21; + if (newPrayer > owner.getMaxStat(5)) { + newPrayer = owner.getMaxStat(5); + } + owner.setCurStat(5, newPrayer); + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(newItem)); + owner.getActionSender().sendStat(5); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); } - player.setBusy(true); - player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You have " + left + " doses left."); - owner.setCurStat(10, owner.getMaxStat(10) + 3); - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(newItem)); - owner.getActionSender().sendStat(10); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - } - private void useNormalPotion(Player player, final InvItem item, final int affectedStat, final int percentageIncrease, final int modifier, final int newItem, final int left) { - player.setBusy(true); - player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You have " + left + " doses left."); - int baseStat = owner.getCurStat(affectedStat) > owner.getMaxStat(affectedStat) ? owner.getMaxStat(affectedStat) : owner.getCurStat(affectedStat); - int newStat = baseStat + DataConversions.roundUp((owner.getMaxStat(affectedStat) / 100D) * percentageIncrease) + modifier; - if (newStat > owner.getCurStat(affectedStat)) { - owner.setCurStat(affectedStat, newStat); - owner.getActionSender().sendStat(affectedStat); + private void useStatRestorePotion(Player player, final InvItem item, + final int newItem, final int left) { + if (!Server.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(newItem)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - } - - private void usePrayerPotion(Player player, final InvItem item, final int newItem, final int left) { - player.setBusy(true); - player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You have " + left + " doses left."); - int newPrayer = owner.getCurStat(5) + 21; - if (newPrayer > owner.getMaxStat(5)) { - newPrayer = owner.getMaxStat(5); - } - owner.setCurStat(5, newPrayer); - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(newItem)); - owner.getActionSender().sendStat(5); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - } - - private void useStatRestorePotion(Player player, final InvItem item, final int newItem, final int left) { - if (!Server.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; + player.setBusy(true); + player.getActionSender().sendMessage( + "You drink some of your " + item.getDef().getName() + "."); + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + owner.getActionSender().sendMessage( + "You have " + left + " doses left."); + for (int i = 0; i < 18; i++) { + if (i == 3 || i == 5) { + continue; + } + int max = owner.getMaxStat(i); + if (owner.getCurStat(i) < max) { + owner.setCurStat(i, max); + owner.getActionSender().sendStat(i); + } + } + owner.getInventory().remove(item); + owner.getInventory().add(new InvItem(newItem)); + owner.getActionSender().sendInventory(); + owner.setBusy(false); + } + }); } - player.setBusy(true); - player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + "."); - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - owner.getActionSender().sendMessage("You have " + left + " doses left."); - for (int i = 0; i < 18; i++) { - if (i == 3 || i == 5) { - continue; - } - int max = owner.getMaxStat(i); - if (owner.getCurStat(i) < max) { - owner.setCurStat(i, max); - owner.getActionSender().sendStat(i); - } - } - owner.getInventory().remove(item); - owner.getInventory().add(new InvItem(newItem)); - owner.getActionSender().sendInventory(); - owner.setBusy(false); - } - }); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnGroundItem.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnGroundItem.java index 27db436..b03cdcb 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnGroundItem.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnGroundItem.java @@ -22,148 +22,207 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; - public class InvUseOnGroundItem implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private Item getItem(int id, ActiveTile tile, Player player) { - for (Item i : tile.getItems()) { - if (i.getID() == id && i.visibleTo(player)) { - return i; - } + private Item getItem(int id, ActiveTile tile, Player player) { + for (Item i : tile.getItems()) { + if (i.getID() == id && i.visibleTo(player)) { + return i; + } + } + return null; } - return null; - } - public void handlePacket(Packet p, IoSession session) throws Exception { - try { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; - } - // incExp - player.resetAll(); - Point location = Point.location(p.readShort(), p.readShort()); - int id = p.readShort(); - final ActiveTile tile = world.getTile(location); - if (tile == null) - return; - final InvItem myItem = player.getInventory().get(p.readShort()); - if (myItem == null) - return; - if (tile.hasGameObject() && myItem.getID() != 135) { - player.getActionSender().sendMessage("You cannot do that here, please move to a new area."); - return; - } - final Item item = getItem(id, tile, player); - - if (item == null || myItem == null) { - player.setSuspiciousPlayer(true); - player.resetPath(); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item " + myItem.getDef().getName() + "(" + myItem.getID() + ")" + " [CMD: "+myItem.getDef().getCommand()+"] ON A GROUND ITEM "+ myItem.getDef().getName() + "(" + myItem.getID() + ")" + " [CMD: "+myItem.getDef().getCommand()+"] at: " + player.getX() + "/" + player.getY())); - - player.setStatus(Action.USING_INVITEM_ON_GITEM); - Instance.getDelayedEventHandler().add(new WalkToPointEvent(player, location, 1, false) { - public void arrived() { - if (owner.isBusy() || owner.isRanging() || !tile.hasItem(item) || !owner.nextTo(item) || owner.getStatus() != Action.USING_INVITEM_ON_GITEM) { - return; - } - if (myItem == null || item == null) - return; - switch (item.getID()) { - case 23: - if (myItem.getID() == 135) { - if (owner.getInventory().remove(myItem) < 0) + public void handlePacket(Packet p, IoSession session) throws Exception { + try { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); return; - owner.getActionSender().sendMessage("You put the flour in the pot."); - Bubble bubble = new Bubble(owner, 135); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - world.unregisterItem(item); - owner.getInventory().add(new InvItem(136)); - owner.getActionSender().sendInventory(); - return; } - case 14: - case 632: - case 633: - case 634: - case 635: - case 636: - handleFireMaking(); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - } + // incExp + player.resetAll(); + Point location = Point.location(p.readShort(), p.readShort()); + int id = p.readShort(); + final ActiveTile tile = world.getTile(location); + if (tile == null) + return; + final InvItem myItem = player.getInventory().get(p.readShort()); + if (myItem == null) + return; + if (tile.hasGameObject() && myItem.getID() != 135) { + player.getActionSender().sendMessage( + "You cannot do that here, please move to a new area."); + return; + } + final Item item = getItem(id, tile, player); - private void handleFireMaking() { - handleFireMaking((int)Math.ceil(owner.getMaxStat(11) / 10)); - - } - private void handleFireMaking(int tries) { - final int retries = --tries; - final FiremakingDef def = EntityHandler.getFiremakingDef(item.getID()); - if (!itemId(new int[] { 166 }) || def == null) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; + if (item == null || myItem == null) { + player.setSuspiciousPlayer(true); + player.resetPath(); + return; } - if (owner.getCurStat(11) < def.getRequiredLevel()) { - owner.getActionSender().sendMessage("You need at least " + def.getRequiredLevel() + " firemaking to light these logs."); - return; - } - owner.setBusy(true); - Bubble bubble = new Bubble(owner, 166); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - owner.getActionSender().sendMessage("You attempt to light the logs..."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (Formulae.lightLogs(def, owner.getCurStat(11))) { - owner.getActionSender().sendMessage("They catch fire and start to burn."); - world.unregisterItem(item); - final GameObject fire = new GameObject(item.getLocation(), 97, 0, 0); - world.registerGameObject(fire); - world.getDelayedEventHandler().add(new DelayedEvent(null, def.getLength()) { - public void run() { - if (tile.hasGameObject() && tile.getGameObject().equals(fire)) { - world.unregisterGameObject(fire); - world.registerItem(new Item(181, tile.getX(), tile.getY(), 1, null)); - } - matchRunning = false; - } - }); - owner.incExp(11, Formulae.firemakingExp(owner.getMaxStat(11), def.getExp()), true); - owner.getActionSender().sendStat(11); - owner.setBusy(false); - } else { - owner.getActionSender().sendMessage("You fail to light them."); - owner.setBusy(false); - if(retries > 0) { - handleFireMaking(retries); - } - } - - } - }); - } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item " + + myItem.getDef().getName() + + "(" + + myItem.getID() + + ")" + + " [CMD: " + + myItem.getDef().getCommand() + + "] ON A GROUND ITEM " + + myItem.getDef().getName() + + "(" + + myItem.getID() + + ")" + + " [CMD: " + + myItem.getDef().getCommand() + + "] at: " + + player.getX() + "/" + player.getY())); - private boolean itemId(int[] ids) { - return DataConversions.inArray(ids, myItem.getID()); + player.setStatus(Action.USING_INVITEM_ON_GITEM); + Instance.getDelayedEventHandler().add( + new WalkToPointEvent(player, location, 1, false) { + public void arrived() { + if (owner.isBusy() + || owner.isRanging() + || !tile.hasItem(item) + || !owner.nextTo(item) + || owner.getStatus() != Action.USING_INVITEM_ON_GITEM) { + return; + } + if (myItem == null || item == null) + return; + switch (item.getID()) { + case 23: + if (myItem.getID() == 135) { + if (owner.getInventory().remove(myItem) < 0) + return; + owner.getActionSender().sendMessage( + "You put the flour in the pot."); + Bubble bubble = new Bubble(owner, 135); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.informOfBubble(bubble); + } + world.unregisterItem(item); + owner.getInventory().add(new InvItem(136)); + owner.getActionSender().sendInventory(); + return; + } + case 14: + case 632: + case 633: + case 634: + case 635: + case 636: + handleFireMaking(); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + } + + private void handleFireMaking() { + handleFireMaking((int) Math.ceil(owner + .getMaxStat(11) / 10)); + + } + + private void handleFireMaking(int tries) { + final int retries = --tries; + final FiremakingDef def = EntityHandler + .getFiremakingDef(item.getID()); + if (!itemId(new int[] { 166 }) || def == null) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (owner.getCurStat(11) < def.getRequiredLevel()) { + owner.getActionSender() + .sendMessage( + "You need at least " + + def.getRequiredLevel() + + " firemaking to light these logs."); + return; + } + owner.setBusy(true); + Bubble bubble = new Bubble(owner, 166); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.informOfBubble(bubble); + } + owner.getActionSender().sendMessage( + "You attempt to light the logs..."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (Formulae.lightLogs(def, + owner.getCurStat(11))) { + owner.getActionSender() + .sendMessage( + "They catch fire and start to burn."); + world.unregisterItem(item); + final GameObject fire = new GameObject( + item.getLocation(), 97, + 0, 0); + world.registerGameObject(fire); + world.getDelayedEventHandler() + .add(new DelayedEvent( + null, + def.getLength()) { + public void run() { + if (tile.hasGameObject() + && tile.getGameObject() + .equals(fire)) { + world.unregisterGameObject(fire); + world.registerItem(new Item( + 181, + tile.getX(), + tile.getY(), + 1, + null)); + } + matchRunning = false; + } + }); + owner.incExp( + 11, + Formulae.firemakingExp( + owner.getMaxStat(11), + def.getExp()), + true); + owner.getActionSender() + .sendStat(11); + owner.setBusy(false); + } else { + owner.getActionSender() + .sendMessage( + "You fail to light them."); + owner.setBusy(false); + if (retries > 0) { + handleFireMaking(retries); + } + } + + } + }); + } + + private boolean itemId(int[] ids) { + return DataConversions.inArray(ids, myItem.getID()); + } + }); + } catch (Exception e) { + e.printStackTrace(); } - }); - } catch (Exception e) { - e.printStackTrace(); } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnItem.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnItem.java index 411a551..08725af 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnItem.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnItem.java @@ -23,957 +23,1175 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.tools.DataConversions; - public class InvUseOnItem implements PacketHandler { - static int[] capes = { 183, 209, 229, 511, 512, 513, 514 }; + static int[] capes = { 183, 209, 229, 511, 512, 513, 514 }; - /** - * World instance - */ - public static final World world = Instance.getWorld(); - int[] dye = { 238, 239, 272, 282, 515, 516 }; - int[] newCapes = { 183, 512, 229, 513, 511, 514 }; - - private boolean attachFeathers(Player player, final InvItem feathers, final InvItem item) { - int amount = 10; - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - if (feathers.getAmount() < amount) { - amount = feathers.getAmount(); - } - if (item.getAmount() < amount) { - amount = item.getAmount(); - } - InvItem newItem; - int exp; - ItemDartTipDef tipDef = null; - if (item.getID() == 280) { - newItem = new InvItem(637, amount); - exp = amount; - } else if ((tipDef = EntityHandler.getItemDartTipDef(item.getID())) != null) { - newItem = new InvItem(tipDef.getDartID(), amount); - exp = (int) (tipDef.getExp() * (double) amount); - } else { - return false; - } - final int amt = amount; - final int xp = exp; - final InvItem newItm = newItem; - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - if (owner.getInventory().remove(feathers.getID(), amt) > -1 && owner.getInventory().remove(item.getID(), amt) > -1) { - owner.getActionSender().sendMessage("You attach the feathers to the " + item.getDef().getName()); - owner.getInventory().add(newItm); - owner.incExp(9, xp, true); - owner.getActionSender().sendStat(9); - owner.getActionSender().sendInventory(); - } - } - }); - return true; - } - - private boolean combineKeys(Player player, final InvItem firstHalf, final InvItem secondHalf) { - if (secondHalf.getID() != 527) { - return false; - } - if (player.getInventory().remove(firstHalf) > -1 && player.getInventory().remove(secondHalf) > -1) { - player.getActionSender().sendMessage("You combine the key halves to make a crystal key."); - player.getInventory().add(new InvItem(525, 1)); - player.getActionSender().sendInventory(); - } - return true; - } - - private boolean doArrowHeads(Player player, final InvItem headlessArrows, final InvItem arrowHeads) { - final ItemArrowHeadDef headDef = EntityHandler.getItemArrowHeadDef(arrowHeads.getID()); - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - - if (headDef == null) { - return false; - } - if (player.getCurStat(9) < headDef.getReqLevel()) { - player.getActionSender().sendMessage("You need a fletching level of " + headDef.getReqLevel() + " to attach those."); - return true; - } - int amount = 10; - if (headlessArrows.getAmount() < amount) { - amount = headlessArrows.getAmount(); - } - if (arrowHeads.getAmount() < amount) { - amount = arrowHeads.getAmount(); - } - final int amt = amount; - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - if (owner.getInventory().remove(headlessArrows.getID(), amt) > -1 && owner.getInventory().remove(arrowHeads.getID(), amt) > -1) { - owner.getActionSender().sendMessage("You attach the heads to the arrows"); - owner.getInventory().add(new InvItem(headDef.getArrowID(), amt)); - owner.incExp(9, (int) (headDef.getExp() * (double) amt), true); - owner.getActionSender().sendStat(9); - owner.getActionSender().sendInventory(); - } - } - }); - return true; - } - - private boolean doBowString(Player player, final InvItem bowString, final InvItem bow) { - final ItemBowStringDef stringDef = EntityHandler.getItemBowStringDef(bow.getID()); - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - - if (stringDef == null) { - return false; - } - if (player.getCurStat(9) < stringDef.getReqLevel()) { - player.getActionSender().sendMessage("You need a fletching level of " + stringDef.getReqLevel() + " to do that."); - return true; - } - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - if (owner.getInventory().remove(bowString) > -1 && owner.getInventory().remove(bow) > -1) { - owner.getActionSender().sendMessage("You add the bow string to the bow"); - owner.getInventory().add(new InvItem(stringDef.getBowID(), 1)); - owner.incExp(9, stringDef.getExp(), true); - owner.getActionSender().sendStat(9); - owner.getActionSender().sendInventory(); - } - } - }); - return true; - } - - private boolean doCutGem(Player player, final InvItem chisel, final InvItem gem) { - final ItemGemDef gemDef = EntityHandler.getItemGemDef(gem.getID()); - if (gemDef == null) { - return false; - } - if (player.getCurStat(12) < gemDef.getReqLevel()) { - player.getActionSender().sendMessage("You need a crafting level of " + gemDef.getReqLevel() + " to cut this gem"); - return true; - } - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - if (owner.getInventory().remove(gem) > -1) { - InvItem cutGem = new InvItem(gemDef.getGemID(), 1); - owner.getActionSender().sendMessage("You cut the " + cutGem.getDef().getName()); - owner.getActionSender().sendSound("chisel"); - owner.getInventory().add(cutGem); - owner.incExp(12, gemDef.getExp(), true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - } - }); - return true; - } - - private boolean doGlassBlowing(Player player, final InvItem pipe, final InvItem glass) { - if (glass.getID() != 623) { - return false; - } - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - String[] options = new String[] { "Beer Glass", "Vial", "Orb", "Cancel" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - InvItem result; - int reqLvl, exp; - switch (option) { - case 0: - result = new InvItem(620, 1); - reqLvl = 1; - exp = 18; - break; - case 1: - result = new InvItem(465, 1); - reqLvl = 33; - exp = 35; - break; - case 2: - result = new InvItem(611, 1); - reqLvl = 46; - exp = 53; - break; - default: - return; - } - if (owner.getCurStat(12) < reqLvl) { - owner.getActionSender().sendMessage("You need a crafting level of " + reqLvl + " to make a " + result.getDef().getName() + "."); - return; - } - if (owner.getInventory().remove(glass) > -1) { - owner.getActionSender().sendMessage("You make a " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(12, exp, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - } - }); - owner.getActionSender().sendMenu(options); - } - }); - return true; - } - - private boolean doGrind(Player player, final InvItem mortar, final InvItem item) { - int newID; - switch (item.getID()) { - case 466: // Unicorn Horn - newID = 473; - break; - case 467: // Blue dragon scale - newID = 472; - break; - default: - return false; - } - if (player.getInventory().remove(item) > -1) { - player.getActionSender().sendMessage("You grind up the " + item.getDef().getName()); - player.getInventory().add(new InvItem(newID, 1)); - player.getActionSender().sendInventory(); - } - return true; - } - - private boolean doHerblaw(Player player, final InvItem vial, final InvItem herb) { - final ItemHerbDef herbDef = EntityHandler.getItemHerbDef(herb.getID()); - if (herbDef == null) { - return false; - } - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - if (player.getCurStat(15) < herbDef.getReqLevel()) { - player.getActionSender().sendMessage("You need a herblaw level of " + herbDef.getReqLevel() + " to mix those."); - return true; - } - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - if (owner.getInventory().remove(vial) > -1 && owner.getInventory().remove(herb) > -1) { - owner.getActionSender().sendMessage("You add the " + herb.getDef().getName() + " to the water"); - owner.getInventory().add(new InvItem(herbDef.getPotionId(), 1)); - //owner.incExp(15, herbDef.getExp(), true); - //owner.getActionSender().sendStat(15); - owner.getActionSender().sendInventory(); - } - } - }); - return true; - } - - private boolean doHerbSecond(Player player, final InvItem second, final InvItem unfinished, final ItemHerbSecond def) { - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - if (unfinished.getID() != def.getUnfinishedID()) { - return false; - } - if (player.getCurStat(15) < def.getReqLevel()) { - player.getActionSender().sendMessage("You need a herblaw level of " + def.getReqLevel() + " to mix those"); - return true; - } - if (player.getInventory().remove(second) > -1 && player.getInventory().remove(unfinished) > -1) { - player.getActionSender().sendMessage("You mix the " + second.getDef().getName() + " with the " + unfinished.getDef().getName()); - player.getInventory().add(new InvItem(def.getPotionID(), 1)); - player.incExp(15, def.getExp() * 2, true); - player.getActionSender().sendStat(15); - player.getActionSender().sendInventory(); - } - return true; - } - - private boolean doLogCut(Player player, final InvItem knife, final InvItem log) { - return doLogCut(player, knife, log, ((int)Math.ceil(player.getMaxStat(9) / 10))); - } - private boolean doLogCut(final Player player, final InvItem knife, final InvItem log, int times) { - final int retries = --times; - final ItemLogCutDef cutDef = EntityHandler.getItemLogCutDef(log.getID()); - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return true; - } - if (cutDef == null) { - return false; - } - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - String[] options = new String[] { "Arrow shafts", "Shortbow", "Longbow", "Cancel" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - InvItem result; - int reqLvl, exp; - switch (option) { - case 0: - result = new InvItem(280, cutDef.getShaftAmount()); - reqLvl = cutDef.getShaftLvl(); - exp = cutDef.getShaftExp(); - break; - case 1: - result = new InvItem(cutDef.getShortbowID(), 1); - reqLvl = cutDef.getShortbowLvl(); - exp = cutDef.getShortbowExp(); - break; - case 2: - result = new InvItem(cutDef.getLongbowID(), 1); - reqLvl = cutDef.getLongbowLvl(); - exp = cutDef.getLongbowExp(); - break; - default: - return; - } - if (owner.getCurStat(9) < reqLvl) { - owner.getActionSender().sendMessage("You need a fletching level of " + reqLvl + " to cut that."); - return; - } - if (owner.getInventory().remove(log) > -1) { - owner.getActionSender().sendMessage("You make a " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(9, exp, true); - owner.getActionSender().sendStat(9); - owner.getActionSender().sendInventory(); - } - if(retries > 0) { - doLogCut(player, knife, log, retries); - } - } - }); - owner.getActionSender().sendMenu(options); - } - }); - return true; - } - - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; - } - player.resetAll(); - InvItem item1 = player.getInventory().get(p.readShort()); - InvItem item2 = player.getInventory().get(p.readShort()); - if (item1 == null || item2 == null) { - player.setSuspiciousPlayer(true); - return; - - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item " + item1.getDef().getName() + "(" + item1.getID() + ")" + " [CMD: "+item1.getDef().getCommand()+"] ON A ANOTHER INV ITEM "+ item2.getDef().getName() + "(" + item2.getID() + ")" + " [CMD: "+item2.getDef().getCommand()+"] at: " + player.getX() + "/" + player.getY())); - - World.getQuestManager().handleUseItemOnItem(item1,item2, player); - - ItemHerbSecond secondDef = null; - if ((secondDef = EntityHandler.getItemHerbSecond(item1.getID(), item2.getID())) != null && doHerbSecond(player, item1, item2, secondDef)) { - return; - } else if ((secondDef = EntityHandler.getItemHerbSecond(item2.getID(), item1.getID())) != null && doHerbSecond(player, item2, item1, secondDef)) { - return; - } - // water - empty water - /* - * int[][] jugs = { {50, 21}, {141, 140}, {342, 341} }; if(item1.getID() - * == 136 || item2.getID() == 136) { for(int i=0; i < jugs.length; i++) - * { if(item2.getID() == jugs[i][0]) { - * if(player.getInventory().remove(new InvItem(136)) > -1 && - * player.getInventory().remove(new InvItem(jugs[i][0])) > -1) { - * player.getInventory().add(new InvItem(jugs[i][1])); - * player.getInventory().add(new InvItem(135)); - * player.getInventory().add(new InvItem(250)); - * player.getActionSender().sendInventory(); - * player.getActionSender().sendMessage("You create pastry dough"); - * return; } } } } + /** + * World instance */ - // dish ingred id - uncooked dish id - int[][] stuff = { { 252, 254 }, { 132, 255 }, { 236, 256 } }; - if (item1.getID() == 253 || item2.getID() == 253) { - for (int i = 0; i < stuff.length; i++) { - if (stuff[i][0] == item1.getID() || item2.getID() == stuff[i][0]) { - if (player.getInventory().remove(new InvItem(253)) > -1 && player.getInventory().remove(new InvItem(stuff[i][0])) > -1) { - player.getInventory().add(new InvItem(stuff[i][1])); - player.getActionSender().sendMessage("You create an uncooked pie!"); - player.getActionSender().sendInventory(); - return; - } + public static final World world = Instance.getWorld(); + int[] dye = { 238, 239, 272, 282, 515, 516 }; + int[] newCapes = { 183, 512, 229, 513, 511, 514 }; + + private boolean attachFeathers(Player player, final InvItem feathers, + final InvItem item) { + int amount = 10; + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; } - } - } - if (item1.getID() == 238 && item2.getID() == 239 || item1.getID() == 239 && item2.getID() == 238) { - if (player.getInventory().remove(new InvItem(239)) > -1 && player.getInventory().remove(new InvItem(238)) > -1) { - player.getInventory().add(new InvItem(282)); - player.getActionSender().sendMessage("You mix the Dyes"); - player.getActionSender().sendInventory(); - return; - } - } - // 1 dose on 2 dose str = 3 dose - if (item1.getID() == 224 && item2.getID() == 223 || item1.getID() == 223 && item2.getID() == 224) { - if (player.getInventory().remove(new InvItem(224)) > -1 && player.getInventory().remove(new InvItem(223)) > -1) { - player.getInventory().add(new InvItem(222)); - player.getActionSender().sendMessage("You mix the strength potions"); - player.getActionSender().sendInventory(); - return; - } - } - // 1 dose on 3 dose = 4 dose - if (item1.getID() == 224 && item2.getID() == 222 || item1.getID() == 222 && item2.getID() == 224) { - if (player.getInventory().remove(new InvItem(224)) > -1 && player.getInventory().remove(new InvItem(222)) > -1) { - player.getInventory().add(new InvItem(221)); - player.getActionSender().sendMessage("You mix the strength potions"); - player.getActionSender().sendInventory(); - return; - } - } - - // 2 dose on 2 dose = 4 dose - if (item1.getID() == 223 && item2.getID() == 223 || item1.getID() == 223 && item2.getID() == 223) { - if (player.getInventory().remove(new InvItem(223)) > -1 && player.getInventory().remove(new InvItem(223)) > -1) { - player.getInventory().add(new InvItem(221)); - player.getActionSender().sendMessage("You mix the strength potions"); - player.getActionSender().sendInventory(); - return; - } - } - if (item1.getID() == 224 && item2.getID() == 224 || item1.getID() == 224 && item2.getID() == 224) { - if (player.getInventory().remove(new InvItem(224)) > -1 && player.getInventory().remove(new InvItem(224)) > -1) { - player.getInventory().add(new InvItem(223)); - player.getActionSender().sendMessage("You mix the strength potions"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 132 && item2.getID() == 342 || item1.getID() == 342 && item2.getID() == 132) { - if (player.getInventory().remove(new InvItem(342)) > -1 && player.getInventory().remove(new InvItem(132)) > -1) { - player.getInventory().add(new InvItem(344)); - player.getActionSender().sendMessage("You start to create a stew"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 348 && item2.getID() == 342 || item1.getID() == 342 && item2.getID() == 348) { - if (player.getInventory().remove(new InvItem(342)) > -1 && player.getInventory().remove(new InvItem(348)) > -1) { - player.getInventory().add(new InvItem(343)); - player.getActionSender().sendMessage("You start to create a stew"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 132 && item2.getID() == 343 || item1.getID() == 343 && item2.getID() == 132) { - if (player.getInventory().remove(new InvItem(343)) > -1 && player.getInventory().remove(new InvItem(132)) > -1) { - player.getInventory().add(new InvItem(345)); - player.getActionSender().sendMessage("Your stew is now ready, but uncooked"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 348 && item2.getID() == 344 || item1.getID() == 344 && item2.getID() == 348) { - if (player.getInventory().remove(new InvItem(344)) > -1 && player.getInventory().remove(new InvItem(348)) > -1) { - player.getInventory().add(new InvItem(345)); - player.getActionSender().sendMessage("our stew is now ready, but uncooked"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 337 && item2.getID() == 330 || item1.getID() == 330 && item2.getID() == 337) { - if (player.getInventory().remove(new InvItem(337)) > -1 && player.getInventory().remove(new InvItem(330)) > -1) { - player.getInventory().add(new InvItem(332)); - player.getActionSender().sendMessage("You add chocolate to the cake"); - player.getActionSender().sendInventory(); - return; - } - } - - int egg = 19; - int milk = 22; - int flour = 136; - - if (item1.getID() == 338 || item2.getID() == 338) { - if (player.getInventory().countId(egg) > -1 && player.getInventory().countId(milk) > -1 && player.getInventory().countId(flour) > -1) { - if (player.getInventory().remove(new InvItem(egg)) > -1 && player.getInventory().remove(new InvItem(milk)) > -1 && player.getInventory().remove(new InvItem(flour)) > -1 && player.getInventory().remove(new InvItem(338)) > -1) { - player.getInventory().add(new InvItem(135)); - player.getInventory().add(new InvItem(339)); - player.getActionSender().sendInventory(); - player.getActionSender().sendMessage("You create an uncooked cake"); - return; + if (feathers.getAmount() < amount) { + amount = feathers.getAmount(); } - } - } - if (item1.getID() == 238 && item2.getID() == 239 || item1.getID() == 239 && item2.getID() == 238) { - if (player.getInventory().remove(new InvItem(239)) > -1 && player.getInventory().remove(new InvItem(238)) > -1) { - player.getInventory().add(new InvItem(282)); - player.getActionSender().sendMessage("You mix the Dyes"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 250 && item2.getID() == 251 || item1.getID() == 251 && item2.getID() == 250) { - if (player.getInventory().remove(new InvItem(251)) > -1 && player.getInventory().remove(new InvItem(250)) > -1) { - player.getInventory().add(new InvItem(253)); - player.getActionSender().sendMessage("You add the pastry dough in the dish"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 238 && item2.getID() == 272 || item1.getID() == 272 && item2.getID() == 238) { - if (player.getInventory().remove(new InvItem(272)) > -1 && player.getInventory().remove(new InvItem(238)) > -1) { - player.getInventory().add(new InvItem(516)); - player.getActionSender().sendMessage("You mix the Dyes"); - player.getActionSender().sendInventory(); - return; - } - } - if (item1.getID() == 239 && item2.getID() == 272 || item1.getID() == 272 && item2.getID() == 239) { - if (player.getInventory().remove(new InvItem(272)) > -1 && player.getInventory().remove(new InvItem(239)) > -1) { - player.getInventory().add(new InvItem(515)); - player.getActionSender().sendMessage("You mix the Dyes"); - player.getActionSender().sendInventory(); - return; - } - } - - else if (item1.getID() == 1276 && item2.getID() == 1277) { - if (player.getInventory().remove(new InvItem(1276)) > -1 && player.getInventory().remove(new InvItem(1277)) > -1) { - player.getActionSender().sendMessage("You combine the two parts."); - player.getInventory().add(new InvItem(1278)); - player.getActionSender().sendInventory(); - return; - } - }// here - else if (item1.getID() == 143 && item2.getID() == 141 || item1.getID() == 141 && item2.getID() == 143) { - if (player.getCurStat(7) < 35) { - player.getActionSender().sendMessage("You need level 35 cooking to do this"); - return; - } - if (player.getInventory().remove(new InvItem(141)) > -1 && player.getInventory().remove(new InvItem(143)) > -1) { - int rand = Formulae.Rand(0, 4); - if (rand == 2) { - player.incExp(7, 55, true); - player.getInventory().add(new InvItem(180)); - player.getActionSender().sendMessage("You mix the grapes, and accidentally create Bad wine!"); + if (item.getAmount() < amount) { + amount = item.getAmount(); + } + InvItem newItem; + int exp; + ItemDartTipDef tipDef = null; + if (item.getID() == 280) { + newItem = new InvItem(637, amount); + exp = amount; + } else if ((tipDef = EntityHandler.getItemDartTipDef(item.getID())) != null) { + newItem = new InvItem(tipDef.getDartID(), amount); + exp = (int) (tipDef.getExp() * (double) amount); } else { - player.incExp(7, 110, true); - player.getInventory().add(new InvItem(142)); - player.getActionSender().sendMessage("You mix the grapes with the water and create wine!"); + return false; } - player.getActionSender().sendStat(7); - player.getActionSender().sendInventory(); - return; - } - } - for (Integer il : capes) { - if (il == item1.getID()) { - for (int i = 0; i < dye.length; i++) { - if (dye[i] == item2.getID()) { - if (player.getInventory().remove(new InvItem(item1.getID())) > -1 && player.getInventory().remove(new InvItem(item2.getID())) > -1) { - player.getActionSender().sendMessage("You dye the Cape"); - player.getInventory().add(new InvItem(newCapes[i])); - player.getActionSender().sendInventory(); - return; + final int amt = amount; + final int xp = exp; + final InvItem newItm = newItem; + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + if (owner.getInventory().remove(feathers.getID(), amt) > -1 + && owner.getInventory().remove(item.getID(), amt) > -1) { + owner.getActionSender().sendMessage( + "You attach the feathers to the " + + item.getDef().getName()); + owner.getInventory().add(newItm); + owner.incExp(9, xp, true); + owner.getActionSender().sendStat(9); + owner.getActionSender().sendInventory(); + } } - } - } - } else if (il == item2.getID()) { - for (int i = 0; i < dye.length; i++) { - if (dye[i] == item1.getID()) { - if (player.getInventory().remove(new InvItem(item1.getID())) > -1 && player.getInventory().remove(new InvItem(item2.getID())) > -1) { - player.getActionSender().sendMessage("You dye the Cape"); - player.getInventory().add(new InvItem(newCapes[i])); - player.getActionSender().sendInventory(); - return; - } - } - } - } - } - if (item1.getID() == 141 && item2.getID() == 136 || item1.getID() == 136 && item2.getID() == 141) { - player.getActionSender().sendMessage("What would you like to make?"); - String[] optionsz = new String[] { "Bread Dough", "Pizza Base", "Pastry Dough" }; - - player.setMenuHandler(new MenuHandler(optionsz) { - public void handleReply(final int option, final String reply) { - int newid = 0; - if (option == 0) { - newid = 137; - } else if (option == 1) { - newid = 321; - } else if (option == 2) { - newid = 250; - } else { - return; - } - if (owner.getInventory().remove(new InvItem(141)) > -1 && owner.getInventory().remove(new InvItem(136)) > -1) { - owner.getActionSender().sendMessage("You create a " + reply); - owner.getInventory().add(new InvItem(140)); - owner.getInventory().add(new InvItem(135)); - owner.getInventory().add(new InvItem(newid)); - owner.getActionSender().sendInventory(); - } - - } - }); - player.getActionSender().sendMenu(optionsz); - return; - } - - if (item1.getID() == 50 && item2.getID() == 136 || item1.getID() == 136 && item2.getID() == 50) { - player.getActionSender().sendMessage("What would you like to make?"); - String[] optionsz = new String[] { "Bread Dough", "Pizza Base", "Pastry Dough" }; - player.setMenuHandler(new MenuHandler(optionsz) { - public void handleReply(final int option, final String reply) { - int newid = 0; - if (option == 0) { - newid = 137; - } else if (option == 1) { - newid = 321; - } else if (option == 2) { - newid = 250; - } else { - return; - } - if (owner.getInventory().remove(new InvItem(50)) > -1 && owner.getInventory().remove(new InvItem(136)) > -1) { - owner.getActionSender().sendMessage("You create a " + reply); - owner.getInventory().add(new InvItem(21)); - owner.getInventory().add(new InvItem(135)); - owner.getInventory().add(new InvItem(newid)); - owner.getActionSender().sendInventory(); - } - - } - }); - player.getActionSender().sendMenu(optionsz); - return; - } - - if (item1.getID() == 273 && item2.getID() == 282 || item1.getID() == 282 && item2.getID() == 273) { - if (player.getInventory().remove(new InvItem(282)) > -1 && player.getInventory().remove(new InvItem(273)) > -1) { - player.getInventory().add(new InvItem(274)); - player.getActionSender().sendMessage("You dye the goblin armor"); - player.getActionSender().sendInventory(); - return; - } - } - if (item1.getID() == 273 && item2.getID() == 272 || item1.getID() == 272 && item2.getID() == 273) { - if (player.getInventory().remove(new InvItem(272)) > -1 && player.getInventory().remove(new InvItem(273)) > -1) { - player.getInventory().add(new InvItem(275)); - player.getActionSender().sendMessage("You dye the goblin armor"); - player.getActionSender().sendInventory(); - return; - } - } - - if (item1.getID() == 320 && item2.getID() == 321 || item1.getID() == 321 && item2.getID() == 320) { - if (player.getInventory().remove(new InvItem(321)) > -1 && player.getInventory().remove(new InvItem(320)) > -1) { - player.getInventory().add(new InvItem(323)); - player.getActionSender().sendMessage("You add the Tomato to the Pizza base"); - player.getActionSender().sendInventory(); - return; - } - } - if (item1.getID() == 319 && item2.getID() == 323 || item1.getID() == 323 && item2.getID() == 319) { - if (player.getInventory().remove(new InvItem(323)) > -1 && player.getInventory().remove(new InvItem(319)) > -1) { - player.getInventory().add(new InvItem(324)); - player.getActionSender().sendMessage("You add Cheese on the Unfinished Pizza"); - player.getActionSender().sendInventory(); - return; - } - } - if (item1.getID() == 325 && item2.getID() == 352 || item1.getID() == 352 && item2.getID() == 325) { - if (player.getCurStat(7) > 54) { - if (player.getInventory().remove(new InvItem(352)) > -1 && player.getInventory().remove(new InvItem(325)) > -1) { - player.getInventory().add(new InvItem(327)); - player.incExp(7, 110, true); - player.getActionSender().sendStat(7); - player.getActionSender().sendMessage("You create an Anchovie Pizza."); - player.getActionSender().sendInventory(); - return; - } - } else { - player.getActionSender().sendMessage("You need a cooking level of 55 to do this"); - return; - } - } - if (item1.getID() == 325 && item2.getID() == 132 || item1.getID() == 132 && item2.getID() == 325) { - if (player.getCurStat(7) > 44) { - if (player.getInventory().remove(new InvItem(132)) > -1 && player.getInventory().remove(new InvItem(325)) > -1) { - player.getInventory().add(new InvItem(326)); - player.incExp(7, 110, true); - player.getActionSender().sendStat(7); - player.getActionSender().sendMessage("You create a Meat Pizza."); - player.getActionSender().sendInventory(); - return; - } - } else { - player.getActionSender().sendMessage("You need a cooking level of 44 to do this"); - return; - }// doHerblaw - } - if (item2.getID() == 1276 && item1.getID() == 1277) { - if (player.getInventory().remove(new InvItem(1276)) > -1 && player.getInventory().remove(new InvItem(1277)) > -1) { - player.getActionSender().sendMessage("You combine the two parts."); - player.getInventory().add(new InvItem(1278)); - player.getActionSender().sendInventory(); - return; - } - } else if (item1.getID() == 381 && attachFeathers(player, item1, item2)) { - return; - } else if (item2.getID() == 381 && attachFeathers(player, item2, item1)) { - return; - } else if (item1.getID() == 167 && doCutGem(player, item1, item2)) { - return; - } else if (item2.getID() == 167 && doCutGem(player, item2, item1)) { - return; - } else if (item1.getID() == 13 && doLogCut(player, item1, item2)) { - return; - } else if (item2.getID() == 13 && doLogCut(player, item2, item1)) { - return; - } else if (item1.getID() == 464 && doHerblaw(player, item1, item2)) { - return; - } else if (item2.getID() == 464 && doHerblaw(player, item2, item1)) { - return; - } else if(item1.getID() == 676 && doBowString(player, item1, item2)) { - return; - } else if(item2.getID() == 676 && doBowString(player, item2, item1)) { - return; - } else if (item1.getID() == 637 && doArrowHeads(player, item1, item2)) { - return; - } else if (item2.getID() == 637 && doArrowHeads(player, item2, item1)) { - return; - }else if(item1.getID() == 468 && doGrind(player, item1, item2)) { - return; - } - else if(item2.getID() == 468 && doGrind(player, item2, item1)) { - return; - } else if (item1.getID() == 207 && useWool(player, item1, item2)) { - return; - } else if (item2.getID() == 207 && useWool(player, item2, item1)) { - return; - } else if (item1.getID() == 39 && makeLeather(player, item1, item2)) { - return; - } else if (item2.getID() == 39 && makeLeather(player, item2, item1)) { - return; - } - else if(item1.getID() == 621 && doGlassBlowing(player, item1, item2)) { - return; - } - else if(item2.getID() == 621 && doGlassBlowing(player, item2, item1)) { - return; - } - else if ((item1.getID() == 50 || item1.getID() == 141 || item1.getID() == 342) && useWater(player, item1, item2)) { - return; - } else if ((item2.getID() == 50 || item2.getID() == 141 || item2.getID() == 342) && useWater(player, item2, item1)) { - return; - } - - else if (item1.getID() == 526 && combineKeys(player, item1, item2)) { - return; - } else if (item2.getID() == 526 && combineKeys(player, item2, item1)) { - return; - } else if ((item1.getID() == 23 && item2.getID() == 135) || (item2.getID() == 23 && item1.getID() == 135)) { - if (player.getInventory().remove(new InvItem(23)) > -1 && player.getInventory().remove(new InvItem(135)) > -1) { - player.getInventory().add(new InvItem(136)); - player.getActionSender().sendInventory(); - player.getActionSender().sendMessage("You pour the flour into the pot."); - return; - } - } else { - - int[][] combinePotions = { { 475, 476, 474 }, // Attack potions. - { 478, 479, 477 }, // Stat restore potions - { 481, 482, 480 }, // Defense potions - { 484, 485, 483 }, // Prayer potion - { 487, 488, 486 }, // SAP - { 490, 491, 489 }, // Fishing potion - { 493, 494, 492 }, // SSP - { 496, 497, 495 }, // SDP - { 499, 500, 498 } // Range pot - }; - - for (int i = 0; i < combinePotions.length; i++) { - if ((item1.getID() == combinePotions[i][0] && item2.getID() == combinePotions[i][1]) || (item2.getID() == combinePotions[i][0] && item1.getID() == combinePotions[i][1])) { - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - if (player.getInventory().remove(new InvItem(combinePotions[i][0])) > -1 && player.getInventory().remove(new InvItem(combinePotions[i][1])) > -1) { - player.getInventory().add(new InvItem(combinePotions[i][2])); - player.getActionSender().sendInventory(); - player.getActionSender().sendMessage("You combine the Potions"); - return; - } - } else if (item1.getID() == combinePotions[i][1] && item2.getID() == combinePotions[i][1]) { - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - if (player.getInventory().remove(new InvItem(combinePotions[i][1])) > -1 && player.getInventory().remove(new InvItem(combinePotions[i][1])) > -1) { - if (!Server.isMembers()) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - player.getInventory().add(new InvItem(combinePotions[i][0])); - player.getActionSender().sendInventory(); - player.getActionSender().sendMessage("You combine the Potions"); - return; - } else if (item1.getID() == combinePotions[i][0] && item2.getID() == combinePotions[i][0]) { - if (!Config.members) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - if (player.getInventory().remove(new InvItem(combinePotions[i][0])) > -1 && player.getInventory().remove(new InvItem(combinePotions[i][0])) > -1) { - player.getInventory().add(new InvItem(combinePotions[i][2])); - player.getInventory().add(new InvItem(combinePotions[i][1])); - player.getActionSender().sendInventory(); - player.getActionSender().sendMessage("You combine the Potions"); - return; - } - } - } - } - - player.getActionSender().sendMessage("Nothing interesting happens"); - } - } - - private boolean makeLeather(Player player, final InvItem needle, final InvItem leather) { - if (leather.getID() != 148) { - return false; - } - if (player.getInventory().countId(43) < 1) { - player.getActionSender().sendMessage("You need some thread to make anything out of leather"); - return true; - } - if (DataConversions.random(0, 5) == 0) { - player.getInventory().remove(43, 1); - } - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - String[] options = new String[] { "Armour", "Gloves", "Boots", "Cancel" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - InvItem result; - int reqLvl, exp; - switch (option) { - case 0: - result = new InvItem(15, 1); - reqLvl = 14; - exp = 25; - break; - case 1: - result = new InvItem(16, 1); - reqLvl = 1; - exp = 14; - break; - case 2: - result = new InvItem(17, 1); - reqLvl = 7; - exp = 17; - break; - default: - return; - } - if (owner.getCurStat(12) < reqLvl) { - owner.getActionSender().sendMessage("You need a crafting level of " + reqLvl + " to make " + result.getDef().getName() + "."); - return; - } - if (owner.getInventory().remove(leather) > -1) { - owner.getActionSender().sendMessage("You make some " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(12, exp, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - } }); - owner.getActionSender().sendMenu(options); - } - }); - return true; - } - - private boolean useWater(Player player, final InvItem water, final InvItem item) { - int jugID = Formulae.getEmptyJug(water.getID()); - if (jugID == -1) { // This shouldn't happen - return false; - } - switch (item.getID()) { - case 149: // Clay - if (player.getInventory().remove(water) > -1 && player.getInventory().remove(item) > -1) { - player.getActionSender().sendMessage("You soften the clay."); - player.getInventory().add(new InvItem(jugID, 1)); - player.getInventory().add(new InvItem(243, 1)); - player.getActionSender().sendInventory(); - } - break; - default: - return false; - } - return true; - } - - private boolean useWool(Player player, final InvItem woolBall, final InvItem item) { - int newID; - switch (item.getID()) { - case 44: // Holy Symbol of saradomin - newID = 45; - break; - case 1027: // Unholy Symbol of Zamorak - newID = 1028; - break; - case 296: // Gold Amulet - newID = 301; - break; - case 297: // Sapphire Amulet - newID = 302; - break; - case 298: // Emerald Amulet - newID = 303; - break; - case 299: // Ruby Amulet - newID = 304; - break; - case 300: // Diamond Amulet - newID = 305; - break; - case 524: // Dragonstone Amulet - if (!Server.isMembers()) { - player.getActionSender().sendMessage("This feature is not avaliable in f2p"); return true; - } - newID = 610; - break; - default: - return false; } - final int newId = newID; - Instance.getDelayedEventHandler().add(new MiniEvent(player) { - public void action() { - if (owner.getInventory().remove(woolBall) > -1 && owner.getInventory().remove(item) > -1) { - owner.getActionSender().sendMessage("You string the amulet"); - owner.getInventory().add(new InvItem(newId, 1)); - owner.getActionSender().sendInventory(); + + private boolean combineKeys(Player player, final InvItem firstHalf, + final InvItem secondHalf) { + if (secondHalf.getID() != 527) { + return false; } - } - }); - return true; - } + if (player.getInventory().remove(firstHalf) > -1 + && player.getInventory().remove(secondHalf) > -1) { + player.getActionSender().sendMessage( + "You combine the key halves to make a crystal key."); + player.getInventory().add(new InvItem(525, 1)); + player.getActionSender().sendInventory(); + } + return true; + } + + private boolean doArrowHeads(Player player, final InvItem headlessArrows, + final InvItem arrowHeads) { + final ItemArrowHeadDef headDef = EntityHandler + .getItemArrowHeadDef(arrowHeads.getID()); + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + + if (headDef == null) { + return false; + } + if (player.getCurStat(9) < headDef.getReqLevel()) { + player.getActionSender().sendMessage( + "You need a fletching level of " + headDef.getReqLevel() + + " to attach those."); + return true; + } + int amount = 10; + if (headlessArrows.getAmount() < amount) { + amount = headlessArrows.getAmount(); + } + if (arrowHeads.getAmount() < amount) { + amount = arrowHeads.getAmount(); + } + final int amt = amount; + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + if (owner.getInventory().remove(headlessArrows.getID(), amt) > -1 + && owner.getInventory().remove(arrowHeads.getID(), amt) > -1) { + owner.getActionSender().sendMessage( + "You attach the heads to the arrows"); + owner.getInventory().add( + new InvItem(headDef.getArrowID(), amt)); + owner.incExp(9, (int) (headDef.getExp() * (double) amt), + true); + owner.getActionSender().sendStat(9); + owner.getActionSender().sendInventory(); + } + } + }); + return true; + } + + private boolean doBowString(Player player, final InvItem bowString, + final InvItem bow) { + final ItemBowStringDef stringDef = EntityHandler + .getItemBowStringDef(bow.getID()); + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + + if (stringDef == null) { + return false; + } + if (player.getCurStat(9) < stringDef.getReqLevel()) { + player.getActionSender().sendMessage( + "You need a fletching level of " + stringDef.getReqLevel() + + " to do that."); + return true; + } + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + if (owner.getInventory().remove(bowString) > -1 + && owner.getInventory().remove(bow) > -1) { + owner.getActionSender().sendMessage( + "You add the bow string to the bow"); + owner.getInventory().add( + new InvItem(stringDef.getBowID(), 1)); + owner.incExp(9, stringDef.getExp(), true); + owner.getActionSender().sendStat(9); + owner.getActionSender().sendInventory(); + } + } + }); + return true; + } + + private boolean doCutGem(Player player, final InvItem chisel, + final InvItem gem) { + final ItemGemDef gemDef = EntityHandler.getItemGemDef(gem.getID()); + if (gemDef == null) { + return false; + } + if (player.getCurStat(12) < gemDef.getReqLevel()) { + player.getActionSender().sendMessage( + "You need a crafting level of " + gemDef.getReqLevel() + + " to cut this gem"); + return true; + } + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + if (owner.getInventory().remove(gem) > -1) { + InvItem cutGem = new InvItem(gemDef.getGemID(), 1); + owner.getActionSender().sendMessage( + "You cut the " + cutGem.getDef().getName()); + owner.getActionSender().sendSound("chisel"); + owner.getInventory().add(cutGem); + owner.incExp(12, gemDef.getExp(), true); + owner.getActionSender().sendStat(12); + owner.getActionSender().sendInventory(); + } + } + }); + return true; + } + + private boolean doGlassBlowing(Player player, final InvItem pipe, + final InvItem glass) { + if (glass.getID() != 623) { + return false; + } + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + String[] options = new String[] { "Beer Glass", "Vial", "Orb", + "Cancel" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + InvItem result; + int reqLvl, exp; + switch (option) { + case 0: + result = new InvItem(620, 1); + reqLvl = 1; + exp = 18; + break; + case 1: + result = new InvItem(465, 1); + reqLvl = 33; + exp = 35; + break; + case 2: + result = new InvItem(611, 1); + reqLvl = 46; + exp = 53; + break; + default: + return; + } + if (owner.getCurStat(12) < reqLvl) { + owner.getActionSender().sendMessage( + "You need a crafting level of " + reqLvl + + " to make a " + + result.getDef().getName() + "."); + return; + } + if (owner.getInventory().remove(glass) > -1) { + owner.getActionSender().sendMessage( + "You make a " + result.getDef().getName()); + owner.getInventory().add(result); + owner.incExp(12, exp, true); + owner.getActionSender().sendStat(12); + owner.getActionSender().sendInventory(); + } + } + }); + owner.getActionSender().sendMenu(options); + } + }); + return true; + } + + private boolean doGrind(Player player, final InvItem mortar, + final InvItem item) { + int newID; + switch (item.getID()) { + case 466: // Unicorn Horn + newID = 473; + break; + case 467: // Blue dragon scale + newID = 472; + break; + default: + return false; + } + if (player.getInventory().remove(item) > -1) { + player.getActionSender().sendMessage( + "You grind up the " + item.getDef().getName()); + player.getInventory().add(new InvItem(newID, 1)); + player.getActionSender().sendInventory(); + } + return true; + } + + private boolean doHerblaw(Player player, final InvItem vial, + final InvItem herb) { + final ItemHerbDef herbDef = EntityHandler.getItemHerbDef(herb.getID()); + if (herbDef == null) { + return false; + } + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + if (player.getCurStat(15) < herbDef.getReqLevel()) { + player.getActionSender().sendMessage( + "You need a herblaw level of " + herbDef.getReqLevel() + + " to mix those."); + return true; + } + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + if (owner.getInventory().remove(vial) > -1 + && owner.getInventory().remove(herb) > -1) { + owner.getActionSender().sendMessage( + "You add the " + herb.getDef().getName() + + " to the water"); + owner.getInventory().add( + new InvItem(herbDef.getPotionId(), 1)); + // owner.incExp(15, herbDef.getExp(), true); + // owner.getActionSender().sendStat(15); + owner.getActionSender().sendInventory(); + } + } + }); + return true; + } + + private boolean doHerbSecond(Player player, final InvItem second, + final InvItem unfinished, final ItemHerbSecond def) { + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + if (unfinished.getID() != def.getUnfinishedID()) { + return false; + } + if (player.getCurStat(15) < def.getReqLevel()) { + player.getActionSender().sendMessage( + "You need a herblaw level of " + def.getReqLevel() + + " to mix those"); + return true; + } + if (player.getInventory().remove(second) > -1 + && player.getInventory().remove(unfinished) > -1) { + player.getActionSender().sendMessage( + "You mix the " + second.getDef().getName() + " with the " + + unfinished.getDef().getName()); + player.getInventory().add(new InvItem(def.getPotionID(), 1)); + player.incExp(15, def.getExp() * 2, true); + player.getActionSender().sendStat(15); + player.getActionSender().sendInventory(); + } + return true; + } + + private boolean doLogCut(Player player, final InvItem knife, + final InvItem log) { + return doLogCut(player, knife, log, + ((int) Math.ceil(player.getMaxStat(9) / 10))); + } + + private boolean doLogCut(final Player player, final InvItem knife, + final InvItem log, int times) { + final int retries = --times; + final ItemLogCutDef cutDef = EntityHandler + .getItemLogCutDef(log.getID()); + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + if (cutDef == null) { + return false; + } + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + String[] options = new String[] { "Arrow shafts", "Shortbow", + "Longbow", "Cancel" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + InvItem result; + int reqLvl, exp; + switch (option) { + case 0: + result = new InvItem(280, cutDef.getShaftAmount()); + reqLvl = cutDef.getShaftLvl(); + exp = cutDef.getShaftExp(); + break; + case 1: + result = new InvItem(cutDef.getShortbowID(), 1); + reqLvl = cutDef.getShortbowLvl(); + exp = cutDef.getShortbowExp(); + break; + case 2: + result = new InvItem(cutDef.getLongbowID(), 1); + reqLvl = cutDef.getLongbowLvl(); + exp = cutDef.getLongbowExp(); + break; + default: + return; + } + if (owner.getCurStat(9) < reqLvl) { + owner.getActionSender().sendMessage( + "You need a fletching level of " + reqLvl + + " to cut that."); + return; + } + if (owner.getInventory().remove(log) > -1) { + owner.getActionSender().sendMessage( + "You make a " + result.getDef().getName()); + owner.getInventory().add(result); + owner.incExp(9, exp, true); + owner.getActionSender().sendStat(9); + owner.getActionSender().sendInventory(); + } + if (retries > 0) { + doLogCut(player, knife, log, retries); + } + } + }); + owner.getActionSender().sendMenu(options); + } + }); + return true; + } + + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); + return; + } + player.resetAll(); + InvItem item1 = player.getInventory().get(p.readShort()); + InvItem item2 = player.getInventory().get(p.readShort()); + if (item1 == null || item2 == null) { + player.setSuspiciousPlayer(true); + return; + + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item " + + item1.getDef().getName() + + "(" + + item1.getID() + + ")" + + " [CMD: " + + item1.getDef().getCommand() + + "] ON A ANOTHER INV ITEM " + + item2.getDef().getName() + + "(" + + item2.getID() + + ")" + + " [CMD: " + + item2.getDef().getCommand() + + "] at: " + player.getX() + "/" + player.getY())); + + World.getQuestManager().handleUseItemOnItem(item1, item2, player); + + ItemHerbSecond secondDef = null; + if ((secondDef = EntityHandler.getItemHerbSecond(item1.getID(), + item2.getID())) != null + && doHerbSecond(player, item1, item2, secondDef)) { + return; + } else if ((secondDef = EntityHandler.getItemHerbSecond(item2.getID(), + item1.getID())) != null + && doHerbSecond(player, item2, item1, secondDef)) { + return; + } + // water - empty water + /* + * int[][] jugs = { {50, 21}, {141, 140}, {342, 341} }; if(item1.getID() + * == 136 || item2.getID() == 136) { for(int i=0; i < jugs.length; i++) + * { if(item2.getID() == jugs[i][0]) { + * if(player.getInventory().remove(new InvItem(136)) > -1 && + * player.getInventory().remove(new InvItem(jugs[i][0])) > -1) { + * player.getInventory().add(new InvItem(jugs[i][1])); + * player.getInventory().add(new InvItem(135)); + * player.getInventory().add(new InvItem(250)); + * player.getActionSender().sendInventory(); + * player.getActionSender().sendMessage("You create pastry dough"); + * return; } } } } + */ + // dish ingred id - uncooked dish id + int[][] stuff = { { 252, 254 }, { 132, 255 }, { 236, 256 } }; + if (item1.getID() == 253 || item2.getID() == 253) { + for (int i = 0; i < stuff.length; i++) { + if (stuff[i][0] == item1.getID() + || item2.getID() == stuff[i][0]) { + if (player.getInventory().remove(new InvItem(253)) > -1 + && player.getInventory().remove( + new InvItem(stuff[i][0])) > -1) { + player.getInventory().add(new InvItem(stuff[i][1])); + player.getActionSender().sendMessage( + "You create an uncooked pie!"); + player.getActionSender().sendInventory(); + return; + } + } + } + } + if (item1.getID() == 238 && item2.getID() == 239 + || item1.getID() == 239 && item2.getID() == 238) { + if (player.getInventory().remove(new InvItem(239)) > -1 + && player.getInventory().remove(new InvItem(238)) > -1) { + player.getInventory().add(new InvItem(282)); + player.getActionSender().sendMessage("You mix the Dyes"); + player.getActionSender().sendInventory(); + return; + } + } + // 1 dose on 2 dose str = 3 dose + if (item1.getID() == 224 && item2.getID() == 223 + || item1.getID() == 223 && item2.getID() == 224) { + if (player.getInventory().remove(new InvItem(224)) > -1 + && player.getInventory().remove(new InvItem(223)) > -1) { + player.getInventory().add(new InvItem(222)); + player.getActionSender().sendMessage( + "You mix the strength potions"); + player.getActionSender().sendInventory(); + return; + } + } + // 1 dose on 3 dose = 4 dose + if (item1.getID() == 224 && item2.getID() == 222 + || item1.getID() == 222 && item2.getID() == 224) { + if (player.getInventory().remove(new InvItem(224)) > -1 + && player.getInventory().remove(new InvItem(222)) > -1) { + player.getInventory().add(new InvItem(221)); + player.getActionSender().sendMessage( + "You mix the strength potions"); + player.getActionSender().sendInventory(); + return; + } + } + + // 2 dose on 2 dose = 4 dose + if (item1.getID() == 223 && item2.getID() == 223 + || item1.getID() == 223 && item2.getID() == 223) { + if (player.getInventory().remove(new InvItem(223)) > -1 + && player.getInventory().remove(new InvItem(223)) > -1) { + player.getInventory().add(new InvItem(221)); + player.getActionSender().sendMessage( + "You mix the strength potions"); + player.getActionSender().sendInventory(); + return; + } + } + if (item1.getID() == 224 && item2.getID() == 224 + || item1.getID() == 224 && item2.getID() == 224) { + if (player.getInventory().remove(new InvItem(224)) > -1 + && player.getInventory().remove(new InvItem(224)) > -1) { + player.getInventory().add(new InvItem(223)); + player.getActionSender().sendMessage( + "You mix the strength potions"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 132 && item2.getID() == 342 + || item1.getID() == 342 && item2.getID() == 132) { + if (player.getInventory().remove(new InvItem(342)) > -1 + && player.getInventory().remove(new InvItem(132)) > -1) { + player.getInventory().add(new InvItem(344)); + player.getActionSender().sendMessage( + "You start to create a stew"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 348 && item2.getID() == 342 + || item1.getID() == 342 && item2.getID() == 348) { + if (player.getInventory().remove(new InvItem(342)) > -1 + && player.getInventory().remove(new InvItem(348)) > -1) { + player.getInventory().add(new InvItem(343)); + player.getActionSender().sendMessage( + "You start to create a stew"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 132 && item2.getID() == 343 + || item1.getID() == 343 && item2.getID() == 132) { + if (player.getInventory().remove(new InvItem(343)) > -1 + && player.getInventory().remove(new InvItem(132)) > -1) { + player.getInventory().add(new InvItem(345)); + player.getActionSender().sendMessage( + "Your stew is now ready, but uncooked"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 348 && item2.getID() == 344 + || item1.getID() == 344 && item2.getID() == 348) { + if (player.getInventory().remove(new InvItem(344)) > -1 + && player.getInventory().remove(new InvItem(348)) > -1) { + player.getInventory().add(new InvItem(345)); + player.getActionSender().sendMessage( + "our stew is now ready, but uncooked"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 337 && item2.getID() == 330 + || item1.getID() == 330 && item2.getID() == 337) { + if (player.getInventory().remove(new InvItem(337)) > -1 + && player.getInventory().remove(new InvItem(330)) > -1) { + player.getInventory().add(new InvItem(332)); + player.getActionSender().sendMessage( + "You add chocolate to the cake"); + player.getActionSender().sendInventory(); + return; + } + } + + int egg = 19; + int milk = 22; + int flour = 136; + + if (item1.getID() == 338 || item2.getID() == 338) { + if (player.getInventory().countId(egg) > -1 + && player.getInventory().countId(milk) > -1 + && player.getInventory().countId(flour) > -1) { + if (player.getInventory().remove(new InvItem(egg)) > -1 + && player.getInventory().remove(new InvItem(milk)) > -1 + && player.getInventory().remove(new InvItem(flour)) > -1 + && player.getInventory().remove(new InvItem(338)) > -1) { + player.getInventory().add(new InvItem(135)); + player.getInventory().add(new InvItem(339)); + player.getActionSender().sendInventory(); + player.getActionSender().sendMessage( + "You create an uncooked cake"); + return; + } + } + } + if (item1.getID() == 238 && item2.getID() == 239 + || item1.getID() == 239 && item2.getID() == 238) { + if (player.getInventory().remove(new InvItem(239)) > -1 + && player.getInventory().remove(new InvItem(238)) > -1) { + player.getInventory().add(new InvItem(282)); + player.getActionSender().sendMessage("You mix the Dyes"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 250 && item2.getID() == 251 + || item1.getID() == 251 && item2.getID() == 250) { + if (player.getInventory().remove(new InvItem(251)) > -1 + && player.getInventory().remove(new InvItem(250)) > -1) { + player.getInventory().add(new InvItem(253)); + player.getActionSender().sendMessage( + "You add the pastry dough in the dish"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 238 && item2.getID() == 272 + || item1.getID() == 272 && item2.getID() == 238) { + if (player.getInventory().remove(new InvItem(272)) > -1 + && player.getInventory().remove(new InvItem(238)) > -1) { + player.getInventory().add(new InvItem(516)); + player.getActionSender().sendMessage("You mix the Dyes"); + player.getActionSender().sendInventory(); + return; + } + } + if (item1.getID() == 239 && item2.getID() == 272 + || item1.getID() == 272 && item2.getID() == 239) { + if (player.getInventory().remove(new InvItem(272)) > -1 + && player.getInventory().remove(new InvItem(239)) > -1) { + player.getInventory().add(new InvItem(515)); + player.getActionSender().sendMessage("You mix the Dyes"); + player.getActionSender().sendInventory(); + return; + } + } + + else if (item1.getID() == 1276 && item2.getID() == 1277) { + if (player.getInventory().remove(new InvItem(1276)) > -1 + && player.getInventory().remove(new InvItem(1277)) > -1) { + player.getActionSender().sendMessage( + "You combine the two parts."); + player.getInventory().add(new InvItem(1278)); + player.getActionSender().sendInventory(); + return; + } + }// here + else if (item1.getID() == 143 && item2.getID() == 141 + || item1.getID() == 141 && item2.getID() == 143) { + if (player.getCurStat(7) < 35) { + player.getActionSender().sendMessage( + "You need level 35 cooking to do this"); + return; + } + if (player.getInventory().remove(new InvItem(141)) > -1 + && player.getInventory().remove(new InvItem(143)) > -1) { + int rand = Formulae.Rand(0, 4); + if (rand == 2) { + player.incExp(7, 55, true); + player.getInventory().add(new InvItem(180)); + player.getActionSender() + .sendMessage( + "You mix the grapes, and accidentally create Bad wine!"); + } else { + player.incExp(7, 110, true); + player.getInventory().add(new InvItem(142)); + player.getActionSender() + .sendMessage( + "You mix the grapes with the water and create wine!"); + } + player.getActionSender().sendStat(7); + player.getActionSender().sendInventory(); + return; + } + } + for (Integer il : capes) { + if (il == item1.getID()) { + for (int i = 0; i < dye.length; i++) { + if (dye[i] == item2.getID()) { + if (player.getInventory().remove( + new InvItem(item1.getID())) > -1 + && player.getInventory().remove( + new InvItem(item2.getID())) > -1) { + player.getActionSender().sendMessage( + "You dye the Cape"); + player.getInventory().add(new InvItem(newCapes[i])); + player.getActionSender().sendInventory(); + return; + } + } + } + } else if (il == item2.getID()) { + for (int i = 0; i < dye.length; i++) { + if (dye[i] == item1.getID()) { + if (player.getInventory().remove( + new InvItem(item1.getID())) > -1 + && player.getInventory().remove( + new InvItem(item2.getID())) > -1) { + player.getActionSender().sendMessage( + "You dye the Cape"); + player.getInventory().add(new InvItem(newCapes[i])); + player.getActionSender().sendInventory(); + return; + } + } + } + } + } + if (item1.getID() == 141 && item2.getID() == 136 + || item1.getID() == 136 && item2.getID() == 141) { + player.getActionSender() + .sendMessage("What would you like to make?"); + String[] optionsz = new String[] { "Bread Dough", "Pizza Base", + "Pastry Dough" }; + + player.setMenuHandler(new MenuHandler(optionsz) { + public void handleReply(final int option, final String reply) { + int newid = 0; + if (option == 0) { + newid = 137; + } else if (option == 1) { + newid = 321; + } else if (option == 2) { + newid = 250; + } else { + return; + } + if (owner.getInventory().remove(new InvItem(141)) > -1 + && owner.getInventory().remove(new InvItem(136)) > -1) { + owner.getActionSender().sendMessage( + "You create a " + reply); + owner.getInventory().add(new InvItem(140)); + owner.getInventory().add(new InvItem(135)); + owner.getInventory().add(new InvItem(newid)); + owner.getActionSender().sendInventory(); + } + + } + }); + player.getActionSender().sendMenu(optionsz); + return; + } + + if (item1.getID() == 50 && item2.getID() == 136 || item1.getID() == 136 + && item2.getID() == 50) { + player.getActionSender() + .sendMessage("What would you like to make?"); + String[] optionsz = new String[] { "Bread Dough", "Pizza Base", + "Pastry Dough" }; + player.setMenuHandler(new MenuHandler(optionsz) { + public void handleReply(final int option, final String reply) { + int newid = 0; + if (option == 0) { + newid = 137; + } else if (option == 1) { + newid = 321; + } else if (option == 2) { + newid = 250; + } else { + return; + } + if (owner.getInventory().remove(new InvItem(50)) > -1 + && owner.getInventory().remove(new InvItem(136)) > -1) { + owner.getActionSender().sendMessage( + "You create a " + reply); + owner.getInventory().add(new InvItem(21)); + owner.getInventory().add(new InvItem(135)); + owner.getInventory().add(new InvItem(newid)); + owner.getActionSender().sendInventory(); + } + + } + }); + player.getActionSender().sendMenu(optionsz); + return; + } + + if (item1.getID() == 273 && item2.getID() == 282 + || item1.getID() == 282 && item2.getID() == 273) { + if (player.getInventory().remove(new InvItem(282)) > -1 + && player.getInventory().remove(new InvItem(273)) > -1) { + player.getInventory().add(new InvItem(274)); + player.getActionSender() + .sendMessage("You dye the goblin armor"); + player.getActionSender().sendInventory(); + return; + } + } + if (item1.getID() == 273 && item2.getID() == 272 + || item1.getID() == 272 && item2.getID() == 273) { + if (player.getInventory().remove(new InvItem(272)) > -1 + && player.getInventory().remove(new InvItem(273)) > -1) { + player.getInventory().add(new InvItem(275)); + player.getActionSender() + .sendMessage("You dye the goblin armor"); + player.getActionSender().sendInventory(); + return; + } + } + + if (item1.getID() == 320 && item2.getID() == 321 + || item1.getID() == 321 && item2.getID() == 320) { + if (player.getInventory().remove(new InvItem(321)) > -1 + && player.getInventory().remove(new InvItem(320)) > -1) { + player.getInventory().add(new InvItem(323)); + player.getActionSender().sendMessage( + "You add the Tomato to the Pizza base"); + player.getActionSender().sendInventory(); + return; + } + } + if (item1.getID() == 319 && item2.getID() == 323 + || item1.getID() == 323 && item2.getID() == 319) { + if (player.getInventory().remove(new InvItem(323)) > -1 + && player.getInventory().remove(new InvItem(319)) > -1) { + player.getInventory().add(new InvItem(324)); + player.getActionSender().sendMessage( + "You add Cheese on the Unfinished Pizza"); + player.getActionSender().sendInventory(); + return; + } + } + if (item1.getID() == 325 && item2.getID() == 352 + || item1.getID() == 352 && item2.getID() == 325) { + if (player.getCurStat(7) > 54) { + if (player.getInventory().remove(new InvItem(352)) > -1 + && player.getInventory().remove(new InvItem(325)) > -1) { + player.getInventory().add(new InvItem(327)); + player.incExp(7, 110, true); + player.getActionSender().sendStat(7); + player.getActionSender().sendMessage( + "You create an Anchovie Pizza."); + player.getActionSender().sendInventory(); + return; + } + } else { + player.getActionSender().sendMessage( + "You need a cooking level of 55 to do this"); + return; + } + } + if (item1.getID() == 325 && item2.getID() == 132 + || item1.getID() == 132 && item2.getID() == 325) { + if (player.getCurStat(7) > 44) { + if (player.getInventory().remove(new InvItem(132)) > -1 + && player.getInventory().remove(new InvItem(325)) > -1) { + player.getInventory().add(new InvItem(326)); + player.incExp(7, 110, true); + player.getActionSender().sendStat(7); + player.getActionSender().sendMessage( + "You create a Meat Pizza."); + player.getActionSender().sendInventory(); + return; + } + } else { + player.getActionSender().sendMessage( + "You need a cooking level of 44 to do this"); + return; + }// doHerblaw + } + if (item2.getID() == 1276 && item1.getID() == 1277) { + if (player.getInventory().remove(new InvItem(1276)) > -1 + && player.getInventory().remove(new InvItem(1277)) > -1) { + player.getActionSender().sendMessage( + "You combine the two parts."); + player.getInventory().add(new InvItem(1278)); + player.getActionSender().sendInventory(); + return; + } + } else if (item1.getID() == 381 && attachFeathers(player, item1, item2)) { + return; + } else if (item2.getID() == 381 && attachFeathers(player, item2, item1)) { + return; + } else if (item1.getID() == 167 && doCutGem(player, item1, item2)) { + return; + } else if (item2.getID() == 167 && doCutGem(player, item2, item1)) { + return; + } else if (item1.getID() == 13 && doLogCut(player, item1, item2)) { + return; + } else if (item2.getID() == 13 && doLogCut(player, item2, item1)) { + return; + } else if (item1.getID() == 464 && doHerblaw(player, item1, item2)) { + return; + } else if (item2.getID() == 464 && doHerblaw(player, item2, item1)) { + return; + } else if (item1.getID() == 676 && doBowString(player, item1, item2)) { + return; + } else if (item2.getID() == 676 && doBowString(player, item2, item1)) { + return; + } else if (item1.getID() == 637 && doArrowHeads(player, item1, item2)) { + return; + } else if (item2.getID() == 637 && doArrowHeads(player, item2, item1)) { + return; + } else if (item1.getID() == 468 && doGrind(player, item1, item2)) { + return; + } else if (item2.getID() == 468 && doGrind(player, item2, item1)) { + return; + } else if (item1.getID() == 207 && useWool(player, item1, item2)) { + return; + } else if (item2.getID() == 207 && useWool(player, item2, item1)) { + return; + } else if (item1.getID() == 39 && makeLeather(player, item1, item2)) { + return; + } else if (item2.getID() == 39 && makeLeather(player, item2, item1)) { + return; + } else if (item1.getID() == 621 && doGlassBlowing(player, item1, item2)) { + return; + } else if (item2.getID() == 621 && doGlassBlowing(player, item2, item1)) { + return; + } else if ((item1.getID() == 50 || item1.getID() == 141 || item1 + .getID() == 342) && useWater(player, item1, item2)) { + return; + } else if ((item2.getID() == 50 || item2.getID() == 141 || item2 + .getID() == 342) && useWater(player, item2, item1)) { + return; + } + + else if (item1.getID() == 526 && combineKeys(player, item1, item2)) { + return; + } else if (item2.getID() == 526 && combineKeys(player, item2, item1)) { + return; + } else if ((item1.getID() == 23 && item2.getID() == 135) + || (item2.getID() == 23 && item1.getID() == 135)) { + if (player.getInventory().remove(new InvItem(23)) > -1 + && player.getInventory().remove(new InvItem(135)) > -1) { + player.getInventory().add(new InvItem(136)); + player.getActionSender().sendInventory(); + player.getActionSender().sendMessage( + "You pour the flour into the pot."); + return; + } + } else { + + int[][] combinePotions = { { 475, 476, 474 }, // Attack potions. + { 478, 479, 477 }, // Stat restore potions + { 481, 482, 480 }, // Defense potions + { 484, 485, 483 }, // Prayer potion + { 487, 488, 486 }, // SAP + { 490, 491, 489 }, // Fishing potion + { 493, 494, 492 }, // SSP + { 496, 497, 495 }, // SDP + { 499, 500, 498 } // Range pot + }; + + for (int i = 0; i < combinePotions.length; i++) { + if ((item1.getID() == combinePotions[i][0] && item2.getID() == combinePotions[i][1]) + || (item2.getID() == combinePotions[i][0] && item1 + .getID() == combinePotions[i][1])) { + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + if (player.getInventory().remove( + new InvItem(combinePotions[i][0])) > -1 + && player.getInventory().remove( + new InvItem(combinePotions[i][1])) > -1) { + player.getInventory().add( + new InvItem(combinePotions[i][2])); + player.getActionSender().sendInventory(); + player.getActionSender().sendMessage( + "You combine the Potions"); + return; + } + } else if (item1.getID() == combinePotions[i][1] + && item2.getID() == combinePotions[i][1]) { + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + if (player.getInventory().remove( + new InvItem(combinePotions[i][1])) > -1 + && player.getInventory().remove( + new InvItem(combinePotions[i][1])) > -1) { + if (!Server.isMembers()) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + player.getInventory().add( + new InvItem(combinePotions[i][0])); + player.getActionSender().sendInventory(); + player.getActionSender().sendMessage( + "You combine the Potions"); + return; + } else if (item1.getID() == combinePotions[i][0] + && item2.getID() == combinePotions[i][0]) { + if (!Config.members) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + if (player.getInventory().remove( + new InvItem(combinePotions[i][0])) > -1 + && player.getInventory().remove( + new InvItem(combinePotions[i][0])) > -1) { + player.getInventory().add( + new InvItem(combinePotions[i][2])); + player.getInventory().add( + new InvItem(combinePotions[i][1])); + player.getActionSender().sendInventory(); + player.getActionSender().sendMessage( + "You combine the Potions"); + return; + } + } + } + } + + player.getActionSender().sendMessage("Nothing interesting happens"); + } + } + + private boolean makeLeather(Player player, final InvItem needle, + final InvItem leather) { + if (leather.getID() != 148) { + return false; + } + if (player.getInventory().countId(43) < 1) { + player.getActionSender().sendMessage( + "You need some thread to make anything out of leather"); + return true; + } + if (DataConversions.random(0, 5) == 0) { + player.getInventory().remove(43, 1); + } + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + String[] options = new String[] { "Armour", "Gloves", "Boots", + "Cancel" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(final int option, final String reply) { + InvItem result; + int reqLvl, exp; + switch (option) { + case 0: + result = new InvItem(15, 1); + reqLvl = 14; + exp = 25; + break; + case 1: + result = new InvItem(16, 1); + reqLvl = 1; + exp = 14; + break; + case 2: + result = new InvItem(17, 1); + reqLvl = 7; + exp = 17; + break; + default: + return; + } + if (owner.getCurStat(12) < reqLvl) { + owner.getActionSender().sendMessage( + "You need a crafting level of " + reqLvl + + " to make " + + result.getDef().getName() + "."); + return; + } + if (owner.getInventory().remove(leather) > -1) { + owner.getActionSender().sendMessage( + "You make some " + + result.getDef().getName()); + owner.getInventory().add(result); + owner.incExp(12, exp, true); + owner.getActionSender().sendStat(12); + owner.getActionSender().sendInventory(); + } + } + }); + owner.getActionSender().sendMenu(options); + } + }); + return true; + } + + private boolean useWater(Player player, final InvItem water, + final InvItem item) { + int jugID = Formulae.getEmptyJug(water.getID()); + if (jugID == -1) { // This shouldn't happen + return false; + } + switch (item.getID()) { + case 149: // Clay + if (player.getInventory().remove(water) > -1 + && player.getInventory().remove(item) > -1) { + player.getActionSender().sendMessage("You soften the clay."); + player.getInventory().add(new InvItem(jugID, 1)); + player.getInventory().add(new InvItem(243, 1)); + player.getActionSender().sendInventory(); + } + break; + default: + return false; + } + return true; + } + + private boolean useWool(Player player, final InvItem woolBall, + final InvItem item) { + int newID; + switch (item.getID()) { + case 44: // Holy Symbol of saradomin + newID = 45; + break; + case 1027: // Unholy Symbol of Zamorak + newID = 1028; + break; + case 296: // Gold Amulet + newID = 301; + break; + case 297: // Sapphire Amulet + newID = 302; + break; + case 298: // Emerald Amulet + newID = 303; + break; + case 299: // Ruby Amulet + newID = 304; + break; + case 300: // Diamond Amulet + newID = 305; + break; + case 524: // Dragonstone Amulet + if (!Server.isMembers()) { + player.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return true; + } + newID = 610; + break; + default: + return false; + } + final int newId = newID; + Instance.getDelayedEventHandler().add(new MiniEvent(player) { + public void action() { + if (owner.getInventory().remove(woolBall) > -1 + && owner.getInventory().remove(item) > -1) { + owner.getActionSender() + .sendMessage("You string the amulet"); + owner.getInventory().add(new InvItem(newId, 1)); + owner.getActionSender().sendInventory(); + } + } + }); + return true; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnNpc.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnNpc.java index bd2710a..8d9cfa8 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnNpc.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnNpc.java @@ -15,220 +15,269 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; - public class InvUseOnNpc implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; - } - player.resetAll(); - int sh = -125534; - try { - sh = p.readShort(); - } catch (NullPointerException npe) { - return; - } - - final Npc affectedNpc = world.getNpc(sh); - final InvItem item = player.getInventory().get(p.readShort()); - if (affectedNpc == null || item == null) { // This shouldn't happen - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item " + item.getDef().getName() + "(" + item.getID() + ")" + " [CMD: "+item.getDef().getCommand()+"] ON A NPC "+ affectedNpc.getDef().getName() + "(" + affectedNpc.getID() + ")" + " at: " + player.getX() + "/" + player.getY())); - - player.setFollowing(affectedNpc); - player.setStatus(Action.USING_INVITEM_ON_NPC); - Instance.getDelayedEventHandler().add(new WalkToMobEvent(player, affectedNpc, 1) { - public void arrived() { - owner.resetPath(); - owner.resetFollowing(); - if (!owner.getInventory().contains(item) || owner.isBusy() || owner.isRanging() || !owner.nextTo(affectedNpc) || affectedNpc.isBusy() || owner.getStatus() != Action.USING_INVITEM_ON_NPC) { - return; - } - owner.resetAll(); - switch (affectedNpc.getID()) { - case 2: // Sheep - if (!itemId(new int[] { 144 })) { - owner.getActionSender().sendMessage("Nothing interesting happens."); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); return; - } - owner.setBusy(true); - affectedNpc.blockedBy(owner); - affectedNpc.resetPath(); - showBubble(); - owner.getActionSender().sendMessage("You attempt to shear the sheep"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (DataConversions.random(0, 4) != 0) { - owner.getActionSender().sendMessage("You get some wool"); - owner.getInventory().add(new InvItem(145, 1)); - owner.getActionSender().sendInventory(); - } else { - owner.getActionSender().sendMessage("The sheep manages to get away from you!"); - } - owner.setBusy(false); - affectedNpc.unblock(); - } - }); - break; - case 217:// Cow - case 6: - if (item.getID() != 21) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.setBusy(true); - affectedNpc.blockedBy(owner); - affectedNpc.resetPath(); - Bubble bubble = new Bubble(owner, 21); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - owner.getActionSender().sendMessage("You try to milk the cow."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (DataConversions.random(0, 4) != 0) { - if (owner.getInventory().remove(item) < 0) - return; - owner.getActionSender().sendMessage("You get some milk"); - owner.getInventory().add(new InvItem(22, 1)); - owner.getActionSender().sendInventory(); - } else { - owner.getActionSender().sendMessage("The cow runs away before you could get any milk"); - } - owner.setBusy(false); - affectedNpc.unblock(); - } - }); - break; - case 160:// Thrander - int newID; - switch (item.getID()) { - case 308: // Bronze top - newID = 117; - break; - case 312: // Iron top - newID = 8; - break; - case 309: // Steel top - newID = 118; - break; - case 313: // Black top - newID = 196; - break; - case 310: // Mithril top - newID = 119; - break; - case 311: // Adamantite top - newID = 120; - break; - case 407: // Rune top - newID = 401; - break; - case 117: // Bronze body - newID = 308; - break; - case 8: // Iron body - newID = 312; - break; - case 118: // Steel body - newID = 309; - break; - case 196: // Black body - newID = 313; - break; - case 119: // Mithril body - newID = 310; - break; - case 120: // Adamantite body - newID = 311; - break; - case 401: // Rune body - newID = 407; - break; - case 214: // Bronze skirt - newID = 206; - break; - case 215: // Iron skirt - newID = 9; - break; - case 225: // Steel skirt - newID = 121; - break; - case 434: // Black skirt - newID = 248; - break; - case 226: // Mithril skirt - newID = 122; - break; - case 227: // Adamantite skirt - newID = 123; - break; - case 406: // Rune skirt - newID = 402; - break; - case 206: // Bronze legs - newID = 214; - break; - case 9: // Iron legs - newID = 215; - break; - case 121: // Steel legs - newID = 225; - break; - case 248: // Black legs - newID = 434; - break; - case 122: // Mithril legs - newID = 226; - break; - case 123: // Adamantite legs - newID = 227; - break; - case 402: // Rune legs - newID = 406; - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - final InvItem newPlate = new InvItem(newID, 1); - owner.getActionSender().sendMessage("Thrander hammers the armour"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getInventory().add(newPlate); - owner.getActionSender().sendInventory(); - } - affectedNpc.unblock(); - } - }); - affectedNpc.blockedBy(owner); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - break; } - } - - private boolean itemId(int[] ids) { - return DataConversions.inArray(ids, item.getID()); - } - - private void showBubble() { - Bubble bubble = new Bubble(owner, item.getID()); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); + player.resetAll(); + int sh = -125534; + try { + sh = p.readShort(); + } catch (NullPointerException npe) { + return; } - } - }); - } + + final Npc affectedNpc = world.getNpc(sh); + final InvItem item = player.getInventory().get(p.readShort()); + if (affectedNpc == null || item == null) { // This shouldn't happen + return; + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item " + + item.getDef().getName() + + "(" + + item.getID() + + ")" + + " [CMD: " + + item.getDef().getCommand() + + "] ON A NPC " + + affectedNpc.getDef().getName() + + "(" + + affectedNpc.getID() + + ")" + + " at: " + + player.getX() + + "/" + + player.getY())); + + player.setFollowing(affectedNpc); + player.setStatus(Action.USING_INVITEM_ON_NPC); + Instance.getDelayedEventHandler().add( + new WalkToMobEvent(player, affectedNpc, 1) { + public void arrived() { + owner.resetPath(); + owner.resetFollowing(); + if (!owner.getInventory().contains(item) + || owner.isBusy() + || owner.isRanging() + || !owner.nextTo(affectedNpc) + || affectedNpc.isBusy() + || owner.getStatus() != Action.USING_INVITEM_ON_NPC) { + return; + } + owner.resetAll(); + switch (affectedNpc.getID()) { + case 2: // Sheep + if (!itemId(new int[] { 144 })) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.setBusy(true); + affectedNpc.blockedBy(owner); + affectedNpc.resetPath(); + showBubble(); + owner.getActionSender().sendMessage( + "You attempt to shear the sheep"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (DataConversions.random(0, 4) != 0) { + owner.getActionSender() + .sendMessage( + "You get some wool"); + owner.getInventory().add( + new InvItem(145, 1)); + owner.getActionSender() + .sendInventory(); + } else { + owner.getActionSender() + .sendMessage( + "The sheep manages to get away from you!"); + } + owner.setBusy(false); + affectedNpc.unblock(); + } + }); + break; + case 217:// Cow + case 6: + if (item.getID() != 21) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.setBusy(true); + affectedNpc.blockedBy(owner); + affectedNpc.resetPath(); + Bubble bubble = new Bubble(owner, 21); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.informOfBubble(bubble); + } + owner.getActionSender().sendMessage( + "You try to milk the cow."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (DataConversions.random(0, 4) != 0) { + if (owner.getInventory() + .remove(item) < 0) + return; + owner.getActionSender() + .sendMessage( + "You get some milk"); + owner.getInventory().add( + new InvItem(22, 1)); + owner.getActionSender() + .sendInventory(); + } else { + owner.getActionSender() + .sendMessage( + "The cow runs away before you could get any milk"); + } + owner.setBusy(false); + affectedNpc.unblock(); + } + }); + break; + case 160:// Thrander + int newID; + switch (item.getID()) { + case 308: // Bronze top + newID = 117; + break; + case 312: // Iron top + newID = 8; + break; + case 309: // Steel top + newID = 118; + break; + case 313: // Black top + newID = 196; + break; + case 310: // Mithril top + newID = 119; + break; + case 311: // Adamantite top + newID = 120; + break; + case 407: // Rune top + newID = 401; + break; + case 117: // Bronze body + newID = 308; + break; + case 8: // Iron body + newID = 312; + break; + case 118: // Steel body + newID = 309; + break; + case 196: // Black body + newID = 313; + break; + case 119: // Mithril body + newID = 310; + break; + case 120: // Adamantite body + newID = 311; + break; + case 401: // Rune body + newID = 407; + break; + case 214: // Bronze skirt + newID = 206; + break; + case 215: // Iron skirt + newID = 9; + break; + case 225: // Steel skirt + newID = 121; + break; + case 434: // Black skirt + newID = 248; + break; + case 226: // Mithril skirt + newID = 122; + break; + case 227: // Adamantite skirt + newID = 123; + break; + case 406: // Rune skirt + newID = 402; + break; + case 206: // Bronze legs + newID = 214; + break; + case 9: // Iron legs + newID = 215; + break; + case 121: // Steel legs + newID = 225; + break; + case 248: // Black legs + newID = 434; + break; + case 122: // Mithril legs + newID = 226; + break; + case 123: // Adamantite legs + newID = 227; + break; + case 402: // Rune legs + newID = 406; + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + final InvItem newPlate = new InvItem(newID, 1); + owner.getActionSender().sendMessage( + "Thrander hammers the armour"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (owner.getInventory().remove( + item) > -1) { + owner.getInventory().add( + newPlate); + owner.getActionSender() + .sendInventory(); + } + affectedNpc.unblock(); + } + }); + affectedNpc.blockedBy(owner); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + break; + } + } + + private boolean itemId(int[] ids) { + return DataConversions.inArray(ids, item.getID()); + } + + private void showBubble() { + Bubble bubble = new Bubble(owner, item.getID()); + for (Player p : owner.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + } + }); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnObject.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnObject.java index 0855329..061d520 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnObject.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnObject.java @@ -16,7 +16,6 @@ import org.moparscape.msc.gs.external.EntityHandler; import org.moparscape.msc.gs.external.ItemCookingDef; import org.moparscape.msc.gs.external.ItemCraftingDef; import org.moparscape.msc.gs.external.ItemSmeltingDef; -import org.moparscape.msc.gs.external.ItemSmithingDef; import org.moparscape.msc.gs.external.ItemWieldableDef; import org.moparscape.msc.gs.external.ReqOreDef; import org.moparscape.msc.gs.model.ActiveTile; @@ -37,878 +36,1344 @@ import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; - public class InvUseOnObject implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private void handleDoor(final Player player, final ActiveTile tile, final GameObject object, final int dir, final InvItem item) { - player.setStatus(Action.USING_INVITEM_ON_DOOR); - Instance.getDelayedEventHandler().add(new WalkToObjectEvent(player, object, false) { - public void arrived() { - owner.resetPath(); - if (owner.isBusy() || owner.isRanging() || !owner.getInventory().contains(item) || !tile.hasGameObject() || !tile.getGameObject().equals(object) || owner.getStatus() != Action.USING_INVITEM_ON_DOOR) { - return; - } - owner.resetAll(); - switch (object.getID()) { - case 24: // Web - ItemWieldableDef def = item.getWieldableDef(); - if ((def == null || def.getWieldPos() != 4) && item.getID() != 13) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendMessage("You try to destroy the web"); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (Formulae.cutWeb()) { - owner.getActionSender().sendMessage("You slice through the web."); - world.unregisterGameObject(object); - world.delayedSpawnObject(object.getLoc(), 15000); - } else { - owner.getActionSender().sendMessage("You fail to cut through it."); - } - owner.setBusy(false); - } - }); - break; - case 23: // Giant place near barb village - if (!itemId(new int[] { 99 })) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendMessage("You unlock the door and go through it"); - doDoor(); - if (owner.getY() <= 484) { - owner.teleport(owner.getX(), 485, false); - } else { - owner.teleport(owner.getX(), 484, false); - } - break; - case 60: // Melzars maze - if (!itemId(new int[] { 421 })) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendMessage("You unlock the door and go through it"); - doDoor(); - if (owner.getX() <= 337) { - owner.teleport(338, owner.getY(), false); - } - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendInventory(); - } - - private void doDoor() { - owner.getActionSender().sendSound("opendoor"); - world.registerGameObject(new GameObject(object.getLocation(), 11, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), 1000); - } - - private boolean itemId(int[] ids) { - return DataConversions.inArray(ids, item.getID()); - } - }); - } - - private void handleObject(final Player player, final ActiveTile tile, final GameObject object, final InvItem item) { - player.setStatus(Action.USING_INVITEM_ON_OBJECT); - Instance.getDelayedEventHandler().add(new WalkToObjectEvent(player, object, false) { - public void arrived() { - owner.resetPath(); - if (owner.isBusy() || owner.isRanging() || !owner.getInventory().contains(item) || !owner.nextTo(object) || !tile.hasGameObject() || !tile.getGameObject().equals(object) || owner.getStatus() != Action.USING_INVITEM_ON_OBJECT) { - return; - } - owner.resetAll(); - String[] options; - if ((object.getID() == Dorics.ANVIL1_ID && object.getX() == Dorics.ANVIL1_X && object.getY() == Dorics.ANVIL1_Y) || (object.getID() == Dorics.ANVIL2_ID && object.getX() == Dorics.ANVIL2_X && object.getY() == Dorics.ANVIL2_Y)) { - if (owner.getQuestStage(7) != Quest.COMPLETE) { - Npc npc = World.getWorld().getNpc(Dorics.DORIC_ID, 323, 327, 487, 492); - - if (npc == null) { - player.getActionSender().sendMessage("You need to complete Doric's quest to use his anvils"); - player.setBusy(false); - return; - } else { - owner.informOfNpcMessage(new ChatMessage(npc, "Oi! Get off my anvil!", owner)); - Instance.getWorld().getDelayedEventHandler().add(new MiniEvent(owner) { - public void action() { - player.getActionSender().sendMessage("You need to complete Doric's quest to use his anvils"); - player.setBusy(false); - return; - } - }); - return; - - } - - } else { - player.setBusy(false); - } - - } - world.getQuestManager().handleAction(QuestAction.ITEM_USED_ON_OBJECT, new Object[] { item, object }, owner); - - int[] range = { 317, 254, 255, 256, 339, 324 }; - - if (object.getGameObjectDef().name.equalsIgnoreCase("fire")) { - for (Integer i : range) { - if (item.getID() == i) { - owner.getActionSender().sendMessage("You cannot cook this on a fire"); - return; - } - } - } - int[] sinks = { 48, 26, 86, 2, 466 }; - if (item.getID() == 341) { - for (Integer i : sinks) { - if (i == object.getID()) { - if (owner.getInventory().remove(new InvItem(item.getID())) > -1) { - owner.getActionSender().sendSound("filljug"); - owner.getActionSender().sendMessage("You fill up the bowl with water"); - owner.getInventory().add(new InvItem(342)); - owner.getActionSender().sendInventory(); - return; - } - } - } - } - if (item.getID() == 132) { - if (object.getID() == 97 || object.getID() == 11 || object.getID() == 435) { - player.setBusy(true); - player.getActionSender().sendMessage("You cook the " + item.getDef().name + " on the " + object.getGameObjectDef().name); - player.getInventory().remove(132, 1); - player.getActionSender().sendInventory(); - Instance.getDelayedEventHandler().add(new MiniEvent(owner, 2000) { - public void action() { - player.getActionSender().sendMessage("You burn the " + item.getDef().name); - player.getInventory().add(new InvItem(134)); - player.getActionSender().sendInventory(); - player.setBusy(false); - } - - }); - - return; - } - } - - if (object.getX() == 233 && object.getY() == 180) { - if (item.getID() == 414) { - if (owner.getInventory().remove(new InvItem(414)) > -1) { - owner.setBusy(true); - owner.getActionSender().sendMessage("you open the secret chest.."); - Instance.getDelayedEventHandler().add(new MiniEvent(owner, 1000) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("you find treasure!"); - owner.getInventory().add(new InvItem(158)); - owner.getInventory().add(new InvItem(173)); - owner.getInventory().add(new InvItem(64)); - owner.getInventory().add(new InvItem(42, 2)); - owner.getInventory().add(new InvItem(38, 2)); - owner.getInventory().add(new InvItem(41, 10)); - owner.getInventory().add(new InvItem(10, 50)); - owner.getActionSender().sendInventory(); - return; - } - }); - - } - } - } - - switch (object.getID()) { - case 52: // hopper - if (item.getID() == 29) { - - if (object.containsItem() == 29) { - owner.getActionSender().sendMessage("There is already grain in the hopper"); - return; - } - if (owner.getInventory().remove(item) > -1) { - Bubble bubble = new Bubble(player, 29); - for (Player p : player.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - owner.getActionSender().sendMessage("You put the grain in the hopper"); - object.containsItem(29); - owner.getActionSender().sendInventory(); - } - return; - } - - case 282: // Fountain of Heroes - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - if (item.getID() == 522) { - owner.getActionSender().sendMessage("You dip the amulet in the fountain..."); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("You feel more power coming from it than before."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getActionSender().sendMessage("You can now rub it to teleport."); - owner.getInventory().add(new InvItem(597)); - owner.getActionSender().sendInventory(); + private void handleDoor(final Player player, final ActiveTile tile, + final GameObject object, final int dir, final InvItem item) { + player.setStatus(Action.USING_INVITEM_ON_DOOR); + Instance.getDelayedEventHandler().add( + new WalkToObjectEvent(player, object, false) { + public void arrived() { + owner.resetPath(); + if (owner.isBusy() + || owner.isRanging() + || !owner.getInventory().contains(item) + || !tile.hasGameObject() + || !tile.getGameObject().equals(object) + || owner.getStatus() != Action.USING_INVITEM_ON_DOOR) { + return; + } + owner.resetAll(); + switch (object.getID()) { + case 24: // Web + ItemWieldableDef def = item.getWieldableDef(); + if ((def == null || def.getWieldPos() != 4) + && item.getID() != 13) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendMessage( + "You try to destroy the web"); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (Formulae.cutWeb()) { + owner.getActionSender() + .sendMessage( + "You slice through the web."); + world.unregisterGameObject(object); + world.delayedSpawnObject( + object.getLoc(), 15000); + } else { + owner.getActionSender() + .sendMessage( + "You fail to cut through it."); + } + owner.setBusy(false); + } + }); + break; + case 23: // Giant place near barb village + if (!itemId(new int[] { 99 })) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendMessage( + "You unlock the door and go through it"); + doDoor(); + if (owner.getY() <= 484) { + owner.teleport(owner.getX(), 485, false); + } else { + owner.teleport(owner.getX(), 484, false); + } + break; + case 60: // Melzars maze + if (!itemId(new int[] { 421 })) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendMessage( + "You unlock the door and go through it"); + doDoor(); + if (owner.getX() <= 337) { + owner.teleport(338, owner.getY(), false); + } + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendInventory(); + } + + private void doDoor() { + owner.getActionSender().sendSound("opendoor"); + world.registerGameObject(new GameObject(object + .getLocation(), 11, object.getDirection(), + object.getType())); + world.delayedSpawnObject(object.getLoc(), 1000); + } + + private boolean itemId(int[] ids) { + return DataConversions.inArray(ids, item.getID()); } - owner.setBusy(false); - } }); - } - }); - break; - } - case 2: // Well - case 466: // Well - case 814: // Well - case 48: // Sink - case 26: // Fountain - case 86: // Fountain - case 1130: // Fountain - handleRefill(); - break; - case 97: // Fire - case 11: - case 119: - case 274: - case 435: - case 491: // Range - handleCooking((int)Math.ceil(owner.getMaxStat(7) / 10)); - break; - case 118: - case 813: // Furnace - if(item.getID() == 172) { // Gold Bar (Crafting) - world.getDelayedEventHandler().add(new MiniEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("What would you like to make?"); - String[] options = new String[]{"Ring", "Necklace", "Amulet"}; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(int option, String reply) { - if(owner.isBusy() || option < 0 || option > 2) { - return; + } + + private void handleObject(final Player player, final ActiveTile tile, + final GameObject object, final InvItem item) { + player.setStatus(Action.USING_INVITEM_ON_OBJECT); + Instance.getDelayedEventHandler().add( + new WalkToObjectEvent(player, object, false) { + public void arrived() { + owner.resetPath(); + if (owner.isBusy() + || owner.isRanging() + || !owner.getInventory().contains(item) + || !owner.nextTo(object) + || !tile.hasGameObject() + || !tile.getGameObject().equals(object) + || owner.getStatus() != Action.USING_INVITEM_ON_OBJECT) { + return; + } + owner.resetAll(); + String[] options; + if ((object.getID() == Dorics.ANVIL1_ID + && object.getX() == Dorics.ANVIL1_X && object + .getY() == Dorics.ANVIL1_Y) + || (object.getID() == Dorics.ANVIL2_ID + && object.getX() == Dorics.ANVIL2_X && object + .getY() == Dorics.ANVIL2_Y)) { + if (owner.getQuestStage(7) != Quest.COMPLETE) { + Npc npc = World.getWorld().getNpc( + Dorics.DORIC_ID, 323, 327, 487, 492); + + if (npc == null) { + player.getActionSender() + .sendMessage( + "You need to complete Doric's quest to use his anvils"); + player.setBusy(false); + return; + } else { + owner.informOfNpcMessage(new ChatMessage( + npc, "Oi! Get off my anvil!", owner)); + Instance.getWorld() + .getDelayedEventHandler() + .add(new MiniEvent(owner) { + public void action() { + player.getActionSender() + .sendMessage( + "You need to complete Doric's quest to use his anvils"); + player.setBusy(false); + return; + } + }); + return; + + } + + } else { + player.setBusy(false); + } + + } + World.getQuestManager().handleAction( + QuestAction.ITEM_USED_ON_OBJECT, + new Object[] { item, object }, owner); + + int[] range = { 317, 254, 255, 256, 339, 324 }; + + if (object.getGameObjectDef().name + .equalsIgnoreCase("fire")) { + for (Integer i : range) { + if (item.getID() == i) { + owner.getActionSender().sendMessage( + "You cannot cook this on a fire"); + return; + } + } + } + int[] sinks = { 48, 26, 86, 2, 466 }; + if (item.getID() == 341) { + for (Integer i : sinks) { + if (i == object.getID()) { + if (owner.getInventory().remove( + new InvItem(item.getID())) > -1) { + owner.getActionSender().sendSound( + "filljug"); + owner.getActionSender() + .sendMessage( + "You fill up the bowl with water"); + owner.getInventory().add( + new InvItem(342)); + owner.getActionSender().sendInventory(); + return; + } + } + } + } + if (item.getID() == 132) { + if (object.getID() == 97 || object.getID() == 11 + || object.getID() == 435) { + player.setBusy(true); + player.getActionSender() + .sendMessage( + "You cook the " + + item.getDef().name + + " on the " + + object.getGameObjectDef().name); + player.getInventory().remove(132, 1); + player.getActionSender().sendInventory(); + Instance.getDelayedEventHandler().add( + new MiniEvent(owner, 2000) { + public void action() { + player.getActionSender() + .sendMessage( + "You burn the " + + item.getDef().name); + player.getInventory().add( + new InvItem(134)); + player.getActionSender() + .sendInventory(); + player.setBusy(false); + } + + }); + + return; + } + } + + if (object.getX() == 233 && object.getY() == 180) { + if (item.getID() == 414) { + if (owner.getInventory().remove( + new InvItem(414)) > -1) { + owner.setBusy(true); + owner.getActionSender().sendMessage( + "you open the secret chest.."); + Instance.getDelayedEventHandler().add( + new MiniEvent(owner, 1000) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "you find treasure!"); + owner.getInventory().add( + new InvItem(158)); + owner.getInventory().add( + new InvItem(173)); + owner.getInventory().add( + new InvItem(64)); + owner.getInventory().add( + new InvItem(42, 2)); + owner.getInventory().add( + new InvItem(38, 2)); + owner.getInventory() + .add(new InvItem( + 41, 10)); + owner.getInventory() + .add(new InvItem( + 10, 50)); + owner.getActionSender() + .sendInventory(); + return; + } + }); + + } + } + } + + switch (object.getID()) { + case 52: // hopper + if (item.getID() == 29) { + + if (object.containsItem() == 29) { + owner.getActionSender() + .sendMessage( + "There is already grain in the hopper"); + return; + } + if (owner.getInventory().remove(item) > -1) { + Bubble bubble = new Bubble(player, 29); + for (Player p : player.getViewArea() + .getPlayersInView()) { + p.informOfBubble(bubble); + } + owner.getActionSender().sendMessage( + "You put the grain in the hopper"); + object.containsItem(29); + owner.getActionSender().sendInventory(); + } + return; + } + + case 282: // Fountain of Heroes + if (!Server.isMembers()) { + owner.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + if (item.getID() == 522) { + owner.getActionSender() + .sendMessage( + "You dip the amulet in the fountain..."); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "You feel more power coming from it than before."); + Instance.getDelayedEventHandler() + .add(new ShortEvent( + owner) { + public void action() { + if (owner + .getInventory() + .remove(item) > -1) { + owner.getActionSender() + .sendMessage( + "You can now rub it to teleport."); + owner.getInventory() + .add(new InvItem( + 597)); + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + } + }); + } + }); + break; + } + case 2: // Well + case 466: // Well + case 814: // Well + case 48: // Sink + case 26: // Fountain + case 86: // Fountain + case 1130: // Fountain + handleRefill(); + break; + case 97: // Fire + case 11: + case 119: + case 274: + case 435: + case 491: // Range + handleCooking((int) Math.ceil(owner.getMaxStat(7) / 10)); + break; + case 118: + case 813: // Furnace + if (item.getID() == 172) { // Gold Bar (Crafting) + world.getDelayedEventHandler().add( + new MiniEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "What would you like to make?"); + String[] options = new String[] { + "Ring", "Necklace", + "Amulet" }; + owner.setMenuHandler(new MenuHandler( + options) { + public void handleReply( + int option, + String reply) { + if (owner.isBusy() + || option < 0 + || option > 2) { + return; + } + final int[] moulds = { + 293, 295, 294 }; + final int[] gems = { + -1, 164, 163, + 162, 161, 523 }; + String[] options = { + "Gold", + "Sapphire", + "Emerald", + "Ruby", + "Diamond", + "Dragonstone" }; + final int craftType = option; + if (owner + .getInventory() + .countId( + moulds[craftType]) < 1) { + owner.getActionSender() + .sendMessage( + "You need a " + + EntityHandler + .getItemDef( + moulds[craftType]) + .getName() + + " to make a " + + reply); + return; + } + owner.getActionSender() + .sendMessage( + "What type of " + + reply + + " would you like to make?"); + owner.setMenuHandler(new MenuHandler( + options) { + public void handleReply( + int option, + String reply) { + if (owner + .isBusy() + || option < 0 + || option > 5) { + return; + } + if (option != 0 + && owner.getInventory() + .countId( + gems[option]) < 1) { + owner.getActionSender() + .sendMessage( + "You don't have a " + + reply + + "."); + return; + } + ItemCraftingDef def = EntityHandler + .getCraftingDef((option * 3) + + craftType); + if (def == null) { + owner.getActionSender() + .sendMessage( + "Nothing interesting happens."); + return; + } + if (owner + .getCurStat(12) < def + .getReqLevel()) { + owner.getActionSender() + .sendMessage( + "You need at crafting level of " + + def.getReqLevel() + + " to make this"); + return; + } + if (owner + .getInventory() + .remove(item) > -1 + && (option == 0 || owner + .getInventory() + .remove(gems[option], + 1) > -1)) { + showBubble(); + InvItem result = new InvItem( + def.getItemID(), + 1); + owner.getActionSender() + .sendMessage( + "You make a " + + result.getDef() + .getName()); + owner.getInventory() + .add(result); + owner.incExp( + 12, + def.getExp(), + true, + true); + owner.getActionSender() + .sendStat( + 12); + owner.getActionSender() + .sendInventory(); + } + } + }); + owner.getActionSender() + .sendMenu( + options); + } + }); + owner.getActionSender() + .sendMenu(options); + } + }); + } + if (item.getID() == 384) { // Silver Bar (Crafting) + world.getDelayedEventHandler().add( + new MiniEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "What would you like to make?"); + String[] options = new String[] { + "Holy Symbol of Saradomin", + "UnHoly Symbol of Zamorak" }; + owner.setMenuHandler(new MenuHandler( + options) { + public void handleReply( + int option, + String reply) { + if (owner.isBusy() + || option < 0 + || option > 1) { + return; + } + int[] moulds = { 386, + 1026 }; + int[] results = { 44, + 1027 }; + if (owner + .getInventory() + .countId( + moulds[option]) < 1) { + owner.getActionSender() + .sendMessage( + "You need a " + + EntityHandler + .getItemDef( + moulds[option]) + .getName() + + " to make a " + + reply); + return; + } + if (owner + .getCurStat(12) < 16) { + owner.getActionSender() + .sendMessage( + "You need a crafting level of 16 to make this"); + return; + } + if (owner + .getInventory() + .remove(item) > -1) { + showBubble(); + InvItem result = new InvItem( + results[option]); + owner.getActionSender() + .sendMessage( + "You make a " + + result.getDef() + .getName()); + owner.getInventory() + .add(result); + owner.incExp(12, + 50, true, + true); + owner.getActionSender() + .sendStat( + 12); + owner.getActionSender() + .sendInventory(); + } + } + }); + owner.getActionSender() + .sendMenu(options); + } + }); + } else if (item.getID() == 625) { // Sand (Glass) + if (!Server.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is not avaliable in f2p"); + return; + } + if (player.getInventory().countId(624) < 1) { + owner.getActionSender() + .sendMessage( + "You need some soda ash to mix the sand with."); + return; + } + owner.setBusy(true); + showBubble(); + owner.getActionSender() + .sendMessage( + "You put the seaweed and the soda ash in the furnace."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (player.getInventory() + .remove(624, 1) > -1 + && player + .getInventory() + .remove(item) > -1) { + owner.getActionSender() + .sendMessage( + "It mixes to make some molten glass"); + owner.getInventory() + .add(new InvItem( + 623, 1)); + owner.incExp(12, 20, true); + owner.getActionSender() + .sendStat(12); + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + } + }); + } else { + handleRegularSmelting(); + } + break; + case 50: + case 177: // Anvil + int minSmithingLevel = Formulae + .minSmithingLevel(item.getID()); + if (minSmithingLevel < 0) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (owner.getInventory().countId(168) < 1) { + owner.getActionSender() + .sendMessage( + "You need a hammer to work the metal with."); + return; + } + if (owner.getCurStat(13) < minSmithingLevel) { + owner.getActionSender().sendMessage( + "You need a smithing level of " + + minSmithingLevel + + " to use this type of bar"); + return; + } + break; + case 121: // Spinning Wheel + switch (item.getID()) { + case 145: // Wool + handleWoolSpinning(); + break; + case 675: // Flax + handleFlaxSpinning(); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.setBusy(true); + showBubble(); + owner.getActionSender().sendSound("mechanical"); + break; + case 248: // Crystal key chest + if (item.getID() != 525) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (!Server.isMembers()) { + owner.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + owner.getActionSender().sendMessage( + "You use the key to unlock the chest"); + owner.setBusy(true); + showBubble(); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (owner.getInventory().remove( + item) > -1) { + owner.getInventory().add( + new InvItem(542, 1)); + List loot = Formulae + .getKeyChestLoot(); + for (InvItem i : loot) { + if (i.getAmount() > 1 + && !i.getDef() + .isStackable()) { + for (int x = 0; x < i + .getAmount(); x++) { + + owner.getInventory() + .add(new InvItem( + i.getID(), + 1)); + } + } else { + if (i.getID() == 518 + && i.getAmount() > 20) { + i = new InvItem( + 518, + DataConversions + .random(0, + 20) + 1); + } + if (i.getID() == 517 + && i.getAmount() > 20) { + i = new InvItem( + 517, + DataConversions + .random(0, + 20) + 1); + } + Logger.println("Player: " + + owner.getUsername() + + " Got item: " + + i.getID() + + " From CHEST (" + + i.getAmount() + + ") sys time (" + + GameEngine + .getTime() + + ")"); + if (i.getAmount() > 4000) { + Logger.println("WARNING!!!! Player: " + + owner.getUsername() + + " was about to get " + + i.getAmount() + + " of " + + i.getID() + + " from the CHEST sys time (" + + GameEngine + .getTime() + + ")"); + owner.setBusy(false); + owner.getActionSender() + .sendInventory(); + return; + } + owner.getInventory() + .add(i); + } + } + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + } + }); + break; + case 302: // Sandpit + if (item.getID() != 21) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendMessage( + "You fill the bucket with sand."); + owner.setBusy(true); + showBubble(); + Instance.getDelayedEventHandler().add( + new MiniEvent(owner) { + public void action() { + if (owner.getInventory().remove( + item) > -1) { + owner.getInventory().add( + new InvItem(625, 1)); + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + } + }); + break; + case 179: // Potters Wheel + if (item.getID() != 243) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendMessage( + "What would you like to make?"); + options = new String[] { "Pot", "Pie Dish", "Bowl", + "Cancel" }; + owner.setMenuHandler(new MenuHandler(options) { + public void handleReply(int option, String reply) { + if (owner.isBusy()) { + return; + } + int reqLvl, exp; + InvItem result; + switch (option) { + case 0: + result = new InvItem(279, 1); + reqLvl = 1; + exp = 6; + break; + case 1: + result = new InvItem(278, 1); + reqLvl = 4; + exp = 10; + break; + case 2: + result = new InvItem(340, 1); + reqLvl = 7; + exp = 10; + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (owner.getCurStat(12) < reqLvl) { + owner.getActionSender().sendMessage( + "You need a crafting level of " + + reqLvl + + " to make this"); + return; + } + if (owner.getInventory().remove(item) > -1) { + showBubble(); + owner.getActionSender().sendMessage( + "You make a " + + result.getDef() + .getName()); + owner.getInventory().add(result); + owner.incExp(12, exp, true); + owner.getActionSender().sendStat(12); + owner.getActionSender().sendInventory(); + } + } + }); + owner.getActionSender().sendMenu(options); + break; + case 178: // Potters Oven + int reqLvl, + xp, + resultID; + switch (item.getID()) { + case 279: // Pot + resultID = 135; + reqLvl = 1; + xp = 7; + break; + case 278: // Pie Dish + resultID = 251; + reqLvl = 4; + xp = 15; + break; + case 340: // Bowl + resultID = 341; + reqLvl = 7; + xp = 15; + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (owner.getCurStat(12) < reqLvl) { + owner.getActionSender().sendMessage( + "You need a crafting level of " + + reqLvl + " to make this"); + return; + } + final InvItem result = new InvItem(resultID, 1); + final int exp = xp; + final boolean fail = Formulae.crackPot(reqLvl, + owner.getCurStat(12)); + showBubble(); + owner.getActionSender().sendMessage( + "You place the " + item.getDef().getName() + + " in the oven"); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (owner.getInventory().remove( + item) > -1) { + if (fail) { + owner.getActionSender() + .sendMessage( + "The " + + result.getDef() + .getName() + + " cracks in the oven, you throw it away."); + } else { + owner.getActionSender() + .sendMessage( + "You take out the " + + result.getDef() + .getName()); + owner.getInventory().add( + result); + owner.incExp(12, exp, true); + owner.getActionSender() + .sendStat(12); + } + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + } + }); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } } - final int[] moulds = {293, 295, 294}; - final int[] gems = {-1, 164, 163, 162, 161, 523}; - String[] options = {"Gold", "Sapphire", "Emerald", "Ruby", "Diamond", "Dragonstone"}; - final int craftType = option; - if(owner.getInventory().countId(moulds[craftType]) < 1) { - owner.getActionSender().sendMessage("You need a " + EntityHandler.getItemDef(moulds[craftType]).getName() + " to make a " + reply); - return; + + private void handleWoolSpinning() { + handleWoolSpinning((int) Math.ceil(owner.getMaxStat(12) / 10)); } - owner.getActionSender().sendMessage("What type of " + reply + " would you like to make?"); - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(int option, String reply) { - if(owner.isBusy() || option < 0 || option > 5) { - return; + + private void handleWoolSpinning(int times) { + final int retries = --times; + owner.getActionSender() + .sendMessage( + "You spin the sheeps wool into a nice ball of wool"); + Instance.getDelayedEventHandler().add( + new MiniEvent(owner) { + public void action() { + if (owner.getInventory().remove(item) > -1) { + owner.getInventory().add( + new InvItem(207, 1)); + owner.incExp(12, 3, true); + owner.getActionSender() + .sendStat(12); + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + if (retries > 0) { + handleWoolSpinning(retries); + } + } + }); + } + + private void handleFlaxSpinning() { + handleFlaxSpinning((int) Math.ceil(owner.getMaxStat(12) / 10)); + + } + + private void handleFlaxSpinning(int times) { + final int retries = --times; + if (!Server.isMembers()) { + owner.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; } - if(option != 0 && owner.getInventory().countId(gems[option]) < 1) { - owner.getActionSender().sendMessage("You don't have a " + reply + "."); - return; + if (owner.getCurStat(12) < 10) { + owner.getActionSender() + .sendMessage( + "You need a crafting level of 10 to spin flax"); + return; } - ItemCraftingDef def = EntityHandler.getCraftingDef((option * 3) + craftType); - if(def == null) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; + owner.getActionSender().sendMessage( + "You make the flax into a bow string"); + Instance.getDelayedEventHandler().add( + new MiniEvent(owner) { + public void action() { + if (owner.getInventory().remove(item) > -1) { + owner.getInventory().add( + new InvItem(676, 1)); + owner.incExp(12, 15, true); + owner.getActionSender() + .sendStat(12); + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + if (retries > 0) { + handleFlaxSpinning(retries); + } + } + }); + } + + private void handleRegularSmelting() { + handleRegularSmelting((int) Math.ceil(owner + .getMaxStat(13) / 10)); + + } + + private void handleRegularSmelting(int times1) { + final int times = --times1; + ItemSmeltingDef smeltingDef = item.getSmeltingDef(); + if (smeltingDef == null) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; } - if(owner.getCurStat(12) < def.getReqLevel()) { - owner.getActionSender().sendMessage("You need at crafting level of " + def.getReqLevel() + " to make this"); - return; + for (ReqOreDef reqOre : smeltingDef.getReqOres()) { + if (owner.getInventory().countId(reqOre.getId()) < reqOre + .getAmount()) { + if (item.getID() == 151) { + smeltingDef = EntityHandler + .getItemSmeltingDef(9999); + break; + } + owner.getActionSender() + .sendMessage( + "You need " + + reqOre.getAmount() + + " " + + EntityHandler + .getItemDef( + reqOre.getId()) + .getName() + + " to smelt a " + + item.getDef() + .getName() + + "."); + return; + } } - if(owner.getInventory().remove(item) > -1 && (option == 0 || owner.getInventory().remove(gems[option], 1) > -1)) { - showBubble(); - InvItem result = new InvItem(def.getItemID(), 1); - owner.getActionSender().sendMessage("You make a " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(12, def.getExp(), true, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); + if (owner.getCurStat(13) < smeltingDef.getReqLevel()) { + owner.getActionSender().sendMessage( + "You need a smithing level of " + + smeltingDef.getReqLevel() + + " to smelt this."); + return; } - } - }); - owner.getActionSender().sendMenu(options); - } + if (!owner.getInventory().contains(item)) { + return; + } + owner.setBusy(true); + showBubble(); + owner.getActionSender().sendMessage( + "You smelt the " + item.getDef().getName() + + " in the furnace."); + + final ItemSmeltingDef def = smeltingDef; + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + InvItem bar = new InvItem(def + .getBarId()); + if (owner.getInventory().remove(item) > -1) { + for (ReqOreDef reqOre : def + .getReqOres()) { + for (int i = 0; i < reqOre + .getAmount(); i++) { + owner.getInventory() + .remove(new InvItem( + reqOre.getId())); + } + } + if (item.getID() == 151 + && def.getReqOres().length == 0 + && DataConversions.random( + 0, 1) == 1) { + owner.getActionSender() + .sendMessage( + "The ore is too impure and unable to be refined."); + } else { + owner.getInventory().add(bar); + owner.getActionSender() + .sendMessage( + "You retrieve a " + + bar.getDef() + .getName() + + "."); + owner.incExp(13, def.getExp(), + true); + owner.getActionSender() + .sendStat(13); + } + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + if (times > 0) + handleRegularSmelting(times); + } + }); + } + + private void handleRefill() { + handleRefill((int) Math.ceil(owner.getMaxStat(15) / 10)); + } + + private void handleRefill(int times) { + if (!itemId(new int[] { 21, 140, 465 }) + && !itemId(Formulae.potionsUnfinished) + && !itemId(Formulae.potions1Dose) + && !itemId(Formulae.potions2Dose) + && !itemId(Formulae.potions3Dose)) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (owner.getInventory().remove(item) > -1) { + showBubble(); + owner.getActionSender().sendSound("filljug"); + switch (item.getID()) { + case 21: + owner.getInventory().add(new InvItem(50)); + break; + case 140: + owner.getInventory().add(new InvItem(141)); + break; + default: + owner.getInventory().add(new InvItem(464)); + break; + } + owner.getActionSender().sendInventory(); + if (--times > 0) { + handleRefill(times); + } + } + + } + + private void handleCooking(int passedvalue) { + final int tries = --passedvalue; + if (item.getID() == 622) { // Seaweed (Glass) + if (!Server.isMembers()) { + owner.getActionSender().sendMessage( + "This feature is not avaliable in f2p"); + return; + } + owner.setBusy(true); + showBubble(); + owner.getActionSender().sendSound("cooking"); + owner.getActionSender().sendMessage( + "You put the seaweed on the " + + object.getGameObjectDef() + .getName() + "."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (owner.getInventory().remove( + item) > -1) { + owner.getActionSender() + .sendMessage( + "The seaweed burns to ashes"); + owner.getInventory().add( + new InvItem(624, 1)); + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + if (tries > 0) { + handleCooking(tries); + } + } + }); + } else { + final ItemCookingDef cookingDef = item + .getCookingDef(); + if (cookingDef == null) { + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + if (owner.getCurStat(7) < cookingDef.getReqLevel()) { + owner.getActionSender().sendMessage( + "You need a cooking level of " + + cookingDef.getReqLevel() + + " to cook this."); + return; + } + owner.setBusy(true); + showBubble(); + owner.getActionSender().sendSound("cooking"); + owner.getActionSender().sendMessage( + "You cook the " + + item.getDef().getName() + + " on the " + + object.getGameObjectDef() + .getName() + "."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + InvItem cookedFood = new InvItem( + cookingDef.getCookedId()); + if (owner.getInventory().remove( + item) > -1) { + if (!Formulae.burnFood( + item.getID(), + owner.getCurStat(7))) { + owner.getInventory().add( + cookedFood); + owner.getActionSender() + .sendMessage( + "The " + + item.getDef() + .getName() + + " is now nicely cooked."); + owner.incExp( + 7, + cookingDef.getExp(), + true); + owner.getActionSender() + .sendStat(7); + } else { + owner.getInventory() + .add(new InvItem( + cookingDef + .getBurnedId())); + owner.getActionSender() + .sendMessage( + "You accidently burn the " + + item.getDef() + .getName() + + "."); + } + owner.getActionSender() + .sendInventory(); + } + owner.setBusy(false); + if (tries > 0 + && owner.getInventory() + .contains(item)) { + handleCooking(tries); + } + } + }); + } + + } + + /* + * private void handleSmithing(int barID, int toMake) { + * + * ItemSmithingDef def = EntityHandler + * .getSmithingDef((Formulae.getBarType(barID) * 21) + + * toMake); if (def == null) { + * owner.getActionSender().sendMessage( + * "Nothing interesting happens."); return; } if + * (owner.getCurStat(13) < def.getRequiredLevel()) { + * owner.getActionSender().sendMessage( + * "You need a smithing level of " + def.getRequiredLevel() + * + " to make this"); return; } if + * (owner.getInventory().countId(barID) < def + * .getRequiredBars()) { + * owner.getActionSender().sendMessage( + * "You don't have enough bars to make this."); return; } if + * (EntityHandler.getItemDef(def.getItemID()) .isMembers() + * && !World.isMembers()) { owner.getActionSender() + * .sendMessage( + * "This feature is only avaliable on a members server"); + * return; } owner.getActionSender().sendSound("anvil"); for + * (int x = 0; x < def.getRequiredBars(); x++) { + * owner.getInventory().remove(new InvItem(barID, 1)); } + * Bubble bubble = new Bubble(owner, item.getID()); for + * (Player p : owner.getViewArea().getPlayersInView()) { + * p.informOfBubble(bubble); } if + * (EntityHandler.getItemDef(def.getItemID()) + * .isStackable()) { owner.getActionSender().sendMessage( + * "You hammer the metal into some " + + * EntityHandler.getItemDef( def.getItemID()).getName()); + * owner.getInventory().add( new InvItem(def.getItemID(), + * def .getAmount())); } else { + * owner.getActionSender().sendMessage( + * "You hammer the metal into a " + + * EntityHandler.getItemDef( def.getItemID()).getName()); + * for (int x = 0; x < def.getAmount(); x++) { + * owner.getInventory().add( new InvItem(def.getItemID(), + * 1)); } } owner.incExp( 13, Formulae.getSmithingExp(barID, + * def.getRequiredBars()), true); + * owner.getActionSender().sendStat(13); + * owner.getActionSender().sendInventory(); } + */ + + private boolean itemId(int[] ids) { + return DataConversions.inArray(ids, item.getID()); + } + + private void showBubble() { + Bubble bubble = new Bubble(owner, item.getID()); + for (Player p : owner.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + } }); - owner.getActionSender().sendMenu(options); - } - }); - }if(item.getID() == 384) { // Silver Bar (Crafting) - world.getDelayedEventHandler().add(new MiniEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("What would you like to make?"); - String[] options = new String[]{"Holy Symbol of Saradomin", "UnHoly Symbol of Zamorak"}; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(int option, String reply) { - if(owner.isBusy() || option < 0 || option > 1) { - return; - } - int[] moulds = {386, 1026}; - int[] results = {44, 1027}; - if(owner.getInventory().countId(moulds[option]) < 1) { - owner.getActionSender().sendMessage("You need a " + EntityHandler.getItemDef(moulds[option]).getName() + " to make a " + reply); - return; - } - if(owner.getCurStat(12) < 16) { - owner.getActionSender().sendMessage("You need a crafting level of 16 to make this"); - return; - } - if(owner.getInventory().remove(item) > -1) { - showBubble(); - InvItem result = new InvItem(results[option]); - owner.getActionSender().sendMessage("You make a " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(12, 50, true, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - } - }); - owner.getActionSender().sendMenu(options); - } - }); - } else if (item.getID() == 625) { // Sand (Glass) - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - if (player.getInventory().countId(624) < 1) { - owner.getActionSender().sendMessage("You need some soda ash to mix the sand with."); - return; - } - owner.setBusy(true); - showBubble(); - owner.getActionSender().sendMessage("You put the seaweed and the soda ash in the furnace."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (player.getInventory().remove(624, 1) > -1 && player.getInventory().remove(item) > -1) { - owner.getActionSender().sendMessage("It mixes to make some molten glass"); - owner.getInventory().add(new InvItem(623, 1)); - owner.incExp(12, 20, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - } - }); - } else { - handleRegularSmelting(); - } - break; - case 50: - case 177: // Anvil - int minSmithingLevel = Formulae.minSmithingLevel(item.getID()); - if (minSmithingLevel < 0) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (owner.getInventory().countId(168) < 1) { - owner.getActionSender().sendMessage("You need a hammer to work the metal with."); - return; - } - if (owner.getCurStat(13) < minSmithingLevel) { - owner.getActionSender().sendMessage("You need a smithing level of " + minSmithingLevel + " to use this type of bar"); - return; - } - break; - case 121: // Spinning Wheel - switch (item.getID()) { - case 145: // Wool - handleWoolSpinning(); - break; - case 675: // Flax - handleFlaxSpinning(); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.setBusy(true); - showBubble(); - owner.getActionSender().sendSound("mechanical"); - break; - case 248: // Crystal key chest - if (item.getID() != 525) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - owner.getActionSender().sendMessage("You use the key to unlock the chest"); - owner.setBusy(true); - showBubble(); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getInventory().add(new InvItem(542, 1)); - List loot = Formulae.getKeyChestLoot(); - for (InvItem i : loot) { - if (i.getAmount() > 1 && !i.getDef().isStackable()) { - for (int x = 0; x < i.getAmount(); x++) { - - owner.getInventory().add(new InvItem(i.getID(), 1)); - } - } else { - if (i.getID() == 518 && i.getAmount() > 20) { - i = new InvItem(518, DataConversions.random(0, 20) + 1); - } - if (i.getID() == 517 && i.getAmount() > 20) { - i = new InvItem(517, DataConversions.random(0, 20) + 1); - } - Logger.println("Player: " + owner.getUsername() + " Got item: " + i.getID() + " From CHEST (" + i.getAmount() + ") sys time (" + GameEngine.getTime() + ")"); - if (i.getAmount() > 4000) { - Logger.println("WARNING!!!! Player: " + owner.getUsername() + " was about to get " + i.getAmount() + " of " + i.getID() + " from the CHEST sys time (" + GameEngine.getTime() + ")"); - owner.setBusy(false); - owner.getActionSender().sendInventory(); - return; - } - owner.getInventory().add(i); - } - } - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - } - }); - break; - case 302: // Sandpit - if (item.getID() != 21) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendMessage("You fill the bucket with sand."); - owner.setBusy(true); - showBubble(); - Instance.getDelayedEventHandler().add(new MiniEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getInventory().add(new InvItem(625, 1)); - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - } - }); - break; - case 179: // Potters Wheel - if (item.getID() != 243) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendMessage("What would you like to make?"); - options = new String[] { "Pot", "Pie Dish", "Bowl", "Cancel" }; - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(int option, String reply) { - if (owner.isBusy()) { - return; - } - int reqLvl, exp; - InvItem result; - switch (option) { - case 0: - result = new InvItem(279, 1); - reqLvl = 1; - exp = 6; - break; - case 1: - result = new InvItem(278, 1); - reqLvl = 4; - exp = 10; - break; - case 2: - result = new InvItem(340, 1); - reqLvl = 7; - exp = 10; - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (owner.getCurStat(12) < reqLvl) { - owner.getActionSender().sendMessage("You need a crafting level of " + reqLvl + " to make this"); - return; - } - if (owner.getInventory().remove(item) > -1) { - showBubble(); - owner.getActionSender().sendMessage("You make a " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(12, exp, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - } - }); - owner.getActionSender().sendMenu(options); - break; - case 178: // Potters Oven - int reqLvl, - xp, - resultID; - switch (item.getID()) { - case 279: // Pot - resultID = 135; - reqLvl = 1; - xp = 7; - break; - case 278: // Pie Dish - resultID = 251; - reqLvl = 4; - xp = 15; - break; - case 340: // Bowl - resultID = 341; - reqLvl = 7; - xp = 15; - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (owner.getCurStat(12) < reqLvl) { - owner.getActionSender().sendMessage("You need a crafting level of " + reqLvl + " to make this"); - return; - } - final InvItem result = new InvItem(resultID, 1); - final int exp = xp; - final boolean fail = Formulae.crackPot(reqLvl, owner.getCurStat(12)); - showBubble(); - owner.getActionSender().sendMessage("You place the " + item.getDef().getName() + " in the oven"); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - if (fail) { - owner.getActionSender().sendMessage("The " + result.getDef().getName() + " cracks in the oven, you throw it away."); - } else { - owner.getActionSender().sendMessage("You take out the " + result.getDef().getName()); - owner.getInventory().add(result); - owner.incExp(12, exp, true); - owner.getActionSender().sendStat(12); - } - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - } - }); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - } - - private void handleWoolSpinning() { - handleWoolSpinning((int)Math.ceil(owner.getMaxStat(12) / 10)); - } - private void handleWoolSpinning(int times) { - final int retries = --times; - owner.getActionSender().sendMessage("You spin the sheeps wool into a nice ball of wool"); - Instance.getDelayedEventHandler().add(new MiniEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getInventory().add(new InvItem(207, 1)); - owner.incExp(12, 3, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - if(retries > 0) { - handleWoolSpinning(retries); - } - } - }); - } - private void handleFlaxSpinning() { - handleFlaxSpinning((int)Math.ceil(owner.getMaxStat(12) / 10)); - - } - private void handleFlaxSpinning(int times) { - final int retries = --times; - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - if (owner.getCurStat(12) < 10) { - owner.getActionSender().sendMessage("You need a crafting level of 10 to spin flax"); - return; - } - owner.getActionSender().sendMessage("You make the flax into a bow string"); - Instance.getDelayedEventHandler().add(new MiniEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getInventory().add(new InvItem(676, 1)); - owner.incExp(12, 15, true); - owner.getActionSender().sendStat(12); - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - if(retries > 0) { - handleFlaxSpinning(retries); - } - } - }); - } - - private void handleRegularSmelting() { - handleRegularSmelting((int)Math.ceil(owner.getMaxStat(13) / 10)); - - } - private void handleRegularSmelting(int times1) { - final int times = --times1; - ItemSmeltingDef smeltingDef = item.getSmeltingDef(); - if (smeltingDef == null) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - for (ReqOreDef reqOre : smeltingDef.getReqOres()) { - if (owner.getInventory().countId(reqOre.getId()) < reqOre.getAmount()) { - if (item.getID() == 151) { - smeltingDef = EntityHandler.getItemSmeltingDef(9999); - break; - } - owner.getActionSender().sendMessage("You need " + reqOre.getAmount() + " " + EntityHandler.getItemDef(reqOre.getId()).getName() + " to smelt a " + item.getDef().getName() + "."); - return; - } - } - if (owner.getCurStat(13) < smeltingDef.getReqLevel()) { - owner.getActionSender().sendMessage("You need a smithing level of " + smeltingDef.getReqLevel() + " to smelt this."); - return; - } - if(!owner.getInventory().contains(item)) { - return; - } - owner.setBusy(true); - showBubble(); - owner.getActionSender().sendMessage("You smelt the " + item.getDef().getName() + " in the furnace."); - - final ItemSmeltingDef def = smeltingDef; - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - InvItem bar = new InvItem(def.getBarId()); - if (owner.getInventory().remove(item) > -1) { - for (ReqOreDef reqOre : def.getReqOres()) { - for (int i = 0; i < reqOre.getAmount(); i++) { - owner.getInventory().remove(new InvItem(reqOre.getId())); - } - } - if (item.getID() == 151 && def.getReqOres().length == 0 && DataConversions.random(0, 1) == 1) { - owner.getActionSender().sendMessage("The ore is too impure and unable to be refined."); - } - else { - owner.getInventory().add(bar); - owner.getActionSender().sendMessage("You retrieve a " + bar.getDef().getName() + "."); - owner.incExp(13, def.getExp(), true); - owner.getActionSender().sendStat(13); - } - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - if(times > 0) - handleRegularSmelting(times); - } - }); - } - - private void handleRefill() { - handleRefill((int)Math.ceil(owner.getMaxStat(15) / 10)); - } - private void handleRefill(int times) { - if (!itemId(new int[] { 21, 140, 465 }) && !itemId(Formulae.potionsUnfinished) && !itemId(Formulae.potions1Dose) && !itemId(Formulae.potions2Dose) && !itemId(Formulae.potions3Dose)) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (owner.getInventory().remove(item) > -1) { - showBubble(); - owner.getActionSender().sendSound("filljug"); - switch (item.getID()) { - case 21: - owner.getInventory().add(new InvItem(50)); - break; - case 140: - owner.getInventory().add(new InvItem(141)); - break; - default: - owner.getInventory().add(new InvItem(464)); - break; - } - owner.getActionSender().sendInventory(); - if(--times > 0) { handleRefill(times); } - } - - } - - private void handleCooking(int passedvalue) { - final int tries = --passedvalue; - if (item.getID() == 622) { // Seaweed (Glass) - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is not avaliable in f2p"); - return; - } - owner.setBusy(true); - showBubble(); - owner.getActionSender().sendSound("cooking"); - owner.getActionSender().sendMessage("You put the seaweed on the " + object.getGameObjectDef().getName() + "."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (owner.getInventory().remove(item) > -1) { - owner.getActionSender().sendMessage("The seaweed burns to ashes"); - owner.getInventory().add(new InvItem(624, 1)); - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - if(tries > 0) { - handleCooking(tries); - } - } - }); - } else { - final ItemCookingDef cookingDef = item.getCookingDef(); - if (cookingDef == null) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (owner.getCurStat(7) < cookingDef.getReqLevel()) { - owner.getActionSender().sendMessage("You need a cooking level of " + cookingDef.getReqLevel() + " to cook this."); - return; - } - owner.setBusy(true); - showBubble(); - owner.getActionSender().sendSound("cooking"); - owner.getActionSender().sendMessage("You cook the " + item.getDef().getName() + " on the " + object.getGameObjectDef().getName() + "."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - InvItem cookedFood = new InvItem(cookingDef.getCookedId()); - if (owner.getInventory().remove(item) > -1) { - if (!Formulae.burnFood(item.getID(), owner.getCurStat(7))) { - owner.getInventory().add(cookedFood); - owner.getActionSender().sendMessage("The " + item.getDef().getName() + " is now nicely cooked."); - owner.incExp(7, cookingDef.getExp(), true); - owner.getActionSender().sendStat(7); - } else { - owner.getInventory().add(new InvItem(cookingDef.getBurnedId())); - owner.getActionSender().sendMessage("You accidently burn the " + item.getDef().getName() + "."); - } - owner.getActionSender().sendInventory(); - } - owner.setBusy(false); - if(tries > 0 && owner.getInventory().contains(item)) { - handleCooking(tries); - } - } - }); - } - - } - - private void handleSmithing(int barID, int toMake) { - - ItemSmithingDef def = EntityHandler.getSmithingDef((Formulae.getBarType(barID) * 21) + toMake); - if (def == null) { - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - if (owner.getCurStat(13) < def.getRequiredLevel()) { - owner.getActionSender().sendMessage("You need a smithing level of " + def.getRequiredLevel() + " to make this"); - return; - } - if (owner.getInventory().countId(barID) < def.getRequiredBars()) { - owner.getActionSender().sendMessage("You don't have enough bars to make this."); - return; - } - if (EntityHandler.getItemDef(def.getItemID()).isMembers() && !World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - owner.getActionSender().sendSound("anvil"); - for (int x = 0; x < def.getRequiredBars(); x++) { - owner.getInventory().remove(new InvItem(barID, 1)); - } - Bubble bubble = new Bubble(owner, item.getID()); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - if (EntityHandler.getItemDef(def.getItemID()).isStackable()) { - owner.getActionSender().sendMessage("You hammer the metal into some " + EntityHandler.getItemDef(def.getItemID()).getName()); - owner.getInventory().add(new InvItem(def.getItemID(), def.getAmount())); - } else { - owner.getActionSender().sendMessage("You hammer the metal into a " + EntityHandler.getItemDef(def.getItemID()).getName()); - for (int x = 0; x < def.getAmount(); x++) { - owner.getInventory().add(new InvItem(def.getItemID(), 1)); - } - } - owner.incExp(13, Formulae.getSmithingExp(barID, def.getRequiredBars()), true); - owner.getActionSender().sendStat(13); - owner.getActionSender().sendInventory(); - } - - private boolean itemId(int[] ids) { - return DataConversions.inArray(ids, item.getID()); - } - - private void showBubble() { - Bubble bubble = new Bubble(owner, item.getID()); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - } - }); - } - - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy()) { - player.resetPath();// sendSound - return; } - player.resetAll(); - ActiveTile tile = world.getTile(p.readShort(), p.readShort()); - if (tile == null) { - player.setSuspiciousPlayer(true); - player.resetPath(); - return; - } - GameObject object = tile.getGameObject(); - InvItem item; - switch (pID) { - case 36: // Use Item on Door - int dir = p.readByte(); - item = player.getInventory().get(p.readShort()); - if (object == null || object.getType() == 0 || item == null) { // This - // shoudln't - // happen - player.setSuspiciousPlayer(true); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item on door" + item.getDef().getName() + "(" + item.getID() + ")" + " [CMD: "+item.getDef().getCommand()+"] ON A DOOR (" +tile.getX() + "/" + tile.getY()+ ") at: " + player.getX() + "/" + player.getY())); - handleDoor(player, tile, object, dir, item); - break; - case 94: // Use Item on GameObject - item = player.getInventory().get(p.readShort()); - if (object == null || object.getType() == 1 || item == null) { // This - // shoudln't - // happen - player.setSuspiciousPlayer(true); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item on GameObject" + item.getDef().getName() + "(" + item.getID() + ")" + " [CMD: "+item.getDef().getCommand()+"] ON A DOOR (" +tile.getX() + "/" + tile.getY()+ ") at: " + player.getX() + "/" + player.getY())); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy()) { + player.resetPath();// sendSound + return; + } + player.resetAll(); + ActiveTile tile = world.getTile(p.readShort(), p.readShort()); + if (tile == null) { + player.setSuspiciousPlayer(true); + player.resetPath(); + return; + } + GameObject object = tile.getGameObject(); + InvItem item; + switch (pID) { + case 36: // Use Item on Door + int dir = p.readByte(); + item = player.getInventory().get(p.readShort()); + if (object == null || object.getType() == 0 || item == null) { // This + // shoudln't + // happen + player.setSuspiciousPlayer(true); + return; + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item on door" + + item.getDef().getName() + + "(" + + item.getID() + + ")" + + " [CMD: " + + item.getDef().getCommand() + + "] ON A DOOR (" + + tile.getX() + + "/" + + tile.getY() + + ") at: " + + player.getX() + "/" + player.getY())); - handleObject(player, tile, object, item); - break; + handleDoor(player, tile, object, dir, item); + break; + case 94: // Use Item on GameObject + item = player.getInventory().get(p.readShort()); + if (object == null || object.getType() == 1 || item == null) { // This + // shoudln't + // happen + player.setSuspiciousPlayer(true); + return; + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item on GameObject" + + item.getDef().getName() + + "(" + + item.getID() + + ")" + + " [CMD: " + + item.getDef().getCommand() + + "] ON A DOOR (" + + tile.getX() + + "/" + + tile.getY() + + ") at: " + + player.getX() + "/" + player.getY())); + + handleObject(player, tile, object, item); + break; + } + tile.cleanItself(); } - tile.cleanItself(); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnPlayer.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnPlayer.java index 1fb6284..dd99fd1 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnPlayer.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/InvUseOnPlayer.java @@ -15,79 +15,135 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; - public class InvUseOnPlayer implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; - } - player.resetAll(); - final Player affectedPlayer = world.getPlayer(p.readShort()); - final InvItem item = player.getInventory().get(p.readShort()); - if (affectedPlayer == null || item == null) { // This shouldn't happen - return; - } - if (GameEngine.getTime() - affectedPlayer.lastRun < 2000) { - player.resetPath(); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item on player " + item.getDef().getName() + "(" + item.getID() + ")" + " [CMD: "+item.getDef().getCommand()+"] ON A NPC "+ affectedPlayer.getUsername()+ " at: " + player.getX() + "/" + player.getY() + "|" + affectedPlayer.getX() + "/" + affectedPlayer.getY())); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); + return; + } + player.resetAll(); + final Player affectedPlayer = world.getPlayer(p.readShort()); + final InvItem item = player.getInventory().get(p.readShort()); + if (affectedPlayer == null || item == null) { // This shouldn't happen + return; + } + if (GameEngine.getTime() - affectedPlayer.getLastRun() < 2000) { + player.resetPath(); + return; + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used item on player " + + item.getDef().getName() + + "(" + + item.getID() + + ")" + + " [CMD: " + + item.getDef().getCommand() + + "] ON A NPC " + + affectedPlayer.getUsername() + + " at: " + + player.getX() + + "/" + + player.getY() + + "|" + + affectedPlayer.getX() + + "/" + + affectedPlayer.getY())); - player.setFollowing(affectedPlayer); - player.setStatus(Action.USING_INVITEM_ON_PLAYER); - Instance.getDelayedEventHandler().add(new WalkToMobEvent(player, affectedPlayer, 1) { - public void arrived() { - owner.resetPath(); - owner.resetFollowing(); - if (!owner.getInventory().contains(item) || !owner.nextTo(affectedPlayer) || owner.isBusy() || owner.isRanging() || owner.getStatus() != Action.USING_INVITEM_ON_PLAYER) { - return; - } - owner.resetAll(); - switch (item.getID()) { - case 575: // Christmas cracker - owner.setBusy(true); - affectedPlayer.setBusy(true); - owner.resetPath(); - affectedPlayer.resetPath(); - Bubble crackerBubble = new Bubble(owner, 575); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(crackerBubble); - } - owner.getActionSender().sendMessage("You pull the cracker with " + affectedPlayer.getUsername() + "..."); - affectedPlayer.getActionSender().sendMessage(owner.getUsername() + " is pulling a cracker with you..."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - InvItem phat = new InvItem(DataConversions.random(576, 581)); - if (DataConversions.random(0, 1) == 1) { - owner.getActionSender().sendMessage("Out comes a " + phat.getDef().getName() + "!"); - affectedPlayer.getActionSender().sendMessage(owner.getUsername() + " got the contents!"); - owner.getInventory().add(phat); - } else { - owner.getActionSender().sendMessage(affectedPlayer.getUsername() + " got the contents!"); - affectedPlayer.getActionSender().sendMessage("Out comes a " + phat.getDef().getName() + "!"); - affectedPlayer.getInventory().add(phat); - } - owner.getInventory().remove(item); - owner.setBusy(false); - affectedPlayer.setBusy(false); - owner.getActionSender().sendInventory(); - affectedPlayer.getActionSender().sendInventory(); - } - }); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - break; - } - } - }); - } + player.setFollowing(affectedPlayer); + player.setStatus(Action.USING_INVITEM_ON_PLAYER); + Instance.getDelayedEventHandler().add( + new WalkToMobEvent(player, affectedPlayer, 1) { + public void arrived() { + owner.resetPath(); + owner.resetFollowing(); + if (!owner.getInventory().contains(item) + || !owner.nextTo(affectedPlayer) + || owner.isBusy() + || owner.isRanging() + || owner.getStatus() != Action.USING_INVITEM_ON_PLAYER) { + return; + } + owner.resetAll(); + switch (item.getID()) { + case 575: // Christmas cracker + owner.setBusy(true); + affectedPlayer.setBusy(true); + owner.resetPath(); + affectedPlayer.resetPath(); + Bubble crackerBubble = new Bubble(owner, 575); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.informOfBubble(crackerBubble); + } + owner.getActionSender().sendMessage( + "You pull the cracker with " + + affectedPlayer.getUsername() + + "..."); + affectedPlayer + .getActionSender() + .sendMessage( + owner.getUsername() + + " is pulling a cracker with you..."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + InvItem phat = new InvItem( + DataConversions.random(576, + 581)); + if (DataConversions.random(0, 1) == 1) { + owner.getActionSender() + .sendMessage( + "Out comes a " + + phat.getDef() + .getName() + + "!"); + affectedPlayer + .getActionSender() + .sendMessage( + owner.getUsername() + + " got the contents!"); + owner.getInventory().add(phat); + } else { + owner.getActionSender() + .sendMessage( + affectedPlayer + .getUsername() + + " got the contents!"); + affectedPlayer + .getActionSender() + .sendMessage( + "Out comes a " + + phat.getDef() + .getName() + + "!"); + affectedPlayer.getInventory() + .add(phat); + } + owner.getInventory().remove(item); + owner.setBusy(false); + affectedPlayer.setBusy(false); + owner.getActionSender() + .sendInventory(); + affectedPlayer.getActionSender() + .sendInventory(); + } + }); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + break; + } + } + }); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/MenuReplyHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/MenuReplyHandler.java index fc518bd..6a11e8d 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/MenuReplyHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/MenuReplyHandler.java @@ -8,27 +8,26 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class MenuReplyHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - MenuHandler menuHandler = player.getMenuHandler(); - if (menuHandler == null) { - player.setSuspiciousPlayer(true); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + MenuHandler menuHandler = player.getMenuHandler(); + if (menuHandler == null) { + player.setSuspiciousPlayer(true); + return; + } + int option = (int) p.readByte(); + String reply = menuHandler.getOption(option); + player.resetMenuHandler(); + if (reply == null) { + player.setSuspiciousPlayer(true); + return; + } + menuHandler.handleReply(option, reply); } - int option = (int) p.readByte(); - String reply = menuHandler.getOption(option); - player.resetMenuHandler(); - if (reply == null) { - player.setSuspiciousPlayer(true); - return; - } - menuHandler.handleReply(option, reply); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/NpcCommand.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/NpcCommand.java index e016add..c571638 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/NpcCommand.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/NpcCommand.java @@ -11,33 +11,40 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.plugins.extras.Thieving; - public class NpcCommand implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + + public void handlePacket(Packet p, IoSession session) throws Exception { + int serverIndex = p.readShort(); + final Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + return; + } + final Mob affectedMob = world.getNpc(serverIndex); + final Npc affectedNpc = (Npc) affectedMob; + if (affectedNpc == null + || affectedMob == null + || player == null + || !World.getQuestManager().isNpcVisible((Npc) affectedMob, + player)) + return; + if (!World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + + Thieving thiev = new Thieving(player, affectedNpc, affectedMob); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " thieved a (" + + affectedNpc.getDef().name + + ")")); + thiev.beginPickpocket(); - public void handlePacket(Packet p, IoSession session) throws Exception { - int serverIndex = p.readShort(); - final Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - return; } - final Mob affectedMob = world.getNpc(serverIndex); - final Npc affectedNpc = (Npc) affectedMob; - if (affectedNpc == null || affectedMob == null || player == null || !world.getQuestManager().isNpcVisible((Npc) affectedMob, player)) - return; - final int npcID = affectedNpc.getID(); - if (!World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - - Thieving thiev = new Thieving(player, affectedNpc, affectedMob); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " thieved a (" + affectedNpc.getDef().name + ")")); - thiev.beginPickpocket(); - - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/ObjectAction.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/ObjectAction.java index 3e8b466..8d2fe26 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/ObjectAction.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/ObjectAction.java @@ -41,1003 +41,1357 @@ import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; - public class ObjectAction implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy()) { - if (player.getStatus() != Action.AGILITYING) - player.resetPath(); + public void handlePacket(Packet p, IoSession session) { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy()) { + if (player.getStatus() != Action.AGILITYING) + player.resetPath(); - return; - }// f2p + return; + }// f2p - player.resetAll(); - ActiveTile t = world.getTile(p.readShort(), p.readShort()); - final GameObject object = t.getGameObject(); - final int click = pID == 51 ? 0 : 1; - player.click = click; - if (object == null) { - t.cleanItself(); - player.setSuspiciousPlayer(true); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " clicked on a object (" + object.getID() + ") at: " + player.getX() + "/" + player.getY() + "|" + object.getX() + "/" + object.getY())); - - //long newtime = p.readLong(); // reads the timestamp *Removing for now as causing an NPE - KO9 - /* - if (newtime == 0) { - if (player.sessionFlags < 4) { - Logging.debug("[Anti-Bot] " + player.getUsername() + " is using a 3rd party client [B&]"); - player.sessionFlags++; - } - } else {// dummy - if (player.lastPacketTime == -1) - player.lastPacketTime = newtime; - else { - if (newtime <= player.lastPacketTime && (System.currentTimeMillis() / 1000) > player.lastPacketRecTime) { - Logging.debug("[Anti-Bot] " + player.getUsername() + " tried to send a recorded packet, WPE."); - player.destroy(false); - } else { - player.lastPacketTime = newtime; - player.lastPacketRecTime = System.currentTimeMillis() / 1000; + player.resetAll(); + ActiveTile t = world.getTile(p.readShort(), p.readShort()); + final GameObject object = t.getGameObject(); + final int click = pID == 51 ? 0 : 1; + player.setClick(click); + if (object == null) { + t.cleanItself(); + player.setSuspiciousPlayer(true); + return; } - } - }*/ - if (object.getID() == 198 && object.getX() == 251 && object.getY() == 468) { // Prayer - // Guild - // Ladder - if (player.getMaxStat(5) < 31) { - player.getActionSender().sendMessage("You need 31 Prayer to get up here"); - return; - } else { - // player.teleport(251, 1411, false); - } - }// 621 - if(object.getID() == 982 && player.withinRange(object.getLocation(), 2)) { - player.getActionSender().sendMessage("You slide down the rocks"); - player.teleport(579, 3357, false); - return; - } - - if (object.getX() == 243 && object.getY() == 178) - return; - if (object.getX() == 59 && object.getY() == 573) - return; - if (object.getX() == 196 && object.getY() == 3266 && !Server.isMembers()) - return; + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " clicked on a object (" + + object.getID() + + ") at: " + + player.getX() + + "/" + + player.getY() + + "|" + + object.getX() + "/" + object.getY())); - player.setStatus(Action.USING_OBJECT); - Instance.getDelayedEventHandler().add(new WalkToObjectEvent(player, object, false) { - public void arrived() { - - try { - if (owner.getStatus() != Action.AGILITYING) - owner.resetPath(); - - GameObjectDef def = object.getGameObjectDef(); - if (owner.isBusy() || owner.isRanging() || !owner.nextTo(object) || def == null || owner.getStatus() != Action.USING_OBJECT) { - return; - } - world.addEntryToSnapshots(new Activity(owner.getUsername(), owner.getUsername() + " used an Object (" + object.getID() + ") @ " + object.getX() + ", " + object.getY())); - owner.resetAll(); - if (object.getX() == 621 && object.getY() == 596 && Config.f2pWildy) { - owner.getActionSender().sendMessage("Currently disabled!1!"); - return; - } - String command = (click == 0 ? def.getCommand1() : def.getCommand2()).toLowerCase(); - // Logging.debug(object.getID() + " " + - // command); - if(object.getID() == 487 && GameEngine.getTime() - owner.getLastMoved() < 10000) { owner.getActionSender().sendMessage("You must stand still for 10 seconds before using this"); return; } - Point telePoint = EntityHandler.getObjectTelePoint(object.getLocation(), command); - if (telePoint != null) { - owner.teleport(telePoint.getX(), telePoint.getY(), false); - return; - } - if (world.getQuestManager().handleObject(object, owner, click == 1)) - return; - if (Instance.getPluginHandler().handleObjectAction(object, command, owner)) - return; - - else if (object.getID() == 198 && object.getX() == 251 && object.getY() == 468) { - if (owner.getMaxStat(5) < 31) { - owner.setBusy(true); - Npc abbot = world.getNpc(174, 249, 252, 458, 468); - if (abbot != null) { - owner.informOfNpcMessage(new ChatMessage(abbot, "Hello only people with high prayer are allowed in here", owner)); - } else { + // long newtime = p.readLong(); // reads the timestamp *Removing for now + // as causing an NPE - KO9 + /* + * if (newtime == 0) { if (player.sessionFlags < 4) { + * Logging.debug("[Anti-Bot] " + player.getUsername() + + * " is using a 3rd party client [B&]"); player.sessionFlags++; } } else + * {// dummy if (player.lastPacketTime == -1) player.lastPacketTime = + * newtime; else { if (newtime <= player.lastPacketTime && + * (System.currentTimeMillis() / 1000) > player.lastPacketRecTime) { + * Logging.debug("[Anti-Bot] " + player.getUsername() + + * " tried to send a recorded packet, WPE."); player.destroy(false); } + * else { player.lastPacketTime = newtime; player.lastPacketRecTime = + * System.currentTimeMillis() / 1000; } } } + */ + if (object.getID() == 198 && object.getX() == 251 + && object.getY() == 468) { // Prayer + // Guild + // Ladder + if (player.getMaxStat(5) < 31) { + player.getActionSender().sendMessage( + "You need 31 Prayer to get up here"); return; - } - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a prayer level of 31 to enter"); - } - }); - return; } else { - // owner.teleport(251, 1411, false); + // player.teleport(251, 1411, false); } - } - Logger.println("Command: " + command); - if(command.equalsIgnoreCase("talk to") && object.getID() == 391) { - - final String[] options = { "Yes please!", "No thanks I prefer to walk!" }; - owner.getActionSender().sendMessage("Would you like to be teleported to edgeville for 1000gp?"); - owner.getActionSender().sendMessage("We'll take the money from your bank account!"); - - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setMenuHandler(new MenuHandler(options) { - public void handleReply(final int option, final String reply) { - if (option < 0 && option > options.length) - return; - if (option == 0) { - if(owner.getBank().countId(10) < 1000) { - owner.getActionSender().sendMessage("It looks like you don't have enough money in your bank!"); - owner.setBusy(false); - return; - } - if(owner.getBank().remove(10, 1000) == -1) { - owner.getActionSender().sendMessage("It looks like you don't have enough money in your bank!"); - owner.setBusy(false); - return; - } - owner.setBusy(true); - owner.getActionSender().sendMessage("The tree is looking for a fellow spirit tree!"); - handleMovement(owner, 0, Formulae.dray2edge); - } - } + }// 621 + if (object.getID() == 982 + && player.withinRange(object.getLocation(), 2)) { + player.getActionSender().sendMessage("You slide down the rocks"); + player.teleport(579, 3357, false); + return; + } - public void handleMovement(Player p, final int i, final ArrayList path) { - Instance.getDelayedEventHandler().add(new MiniEvent(p,Formulae.Rand(4500, 5500)) { - @Override - public void action() { - if(i >= path.size()) { - owner.setBusy(false); - owner.getActionSender().sendMessage("You've arrived!"); - return; + if (object.getX() == 243 && object.getY() == 178) + return; + if (object.getX() == 59 && object.getY() == 573) + return; + if (object.getX() == 196 && object.getY() == 3266 + && !Server.isMembers()) + return; + + player.setStatus(Action.USING_OBJECT); + Instance.getDelayedEventHandler().add( + new WalkToObjectEvent(player, object, false) { + public void arrived() { + + try { + if (owner.getStatus() != Action.AGILITYING) + owner.resetPath(); + + GameObjectDef def = object.getGameObjectDef(); + if (owner.isBusy() || owner.isRanging() + || !owner.nextTo(object) || def == null + || owner.getStatus() != Action.USING_OBJECT) { + return; + } + world.addEntryToSnapshots(new Activity(owner + .getUsername(), owner.getUsername() + + " used an Object (" + object.getID() + + ") @ " + object.getX() + ", " + + object.getY())); + owner.resetAll(); + if (object.getX() == 621 && object.getY() == 596 + && Config.f2pWildy) { + owner.getActionSender().sendMessage( + "Currently disabled!1!"); + return; + } + String command = (click == 0 ? def.getCommand1() + : def.getCommand2()).toLowerCase(); + // Logging.debug(object.getID() + " " + + // command); + if (object.getID() == 487 + && GameEngine.getTime() + - owner.getLastMoved() < 10000) { + owner.getActionSender() + .sendMessage( + "You must stand still for 10 seconds before using this"); + return; + } + Point telePoint = EntityHandler.getObjectTelePoint( + object.getLocation(), command); + if (telePoint != null) { + owner.teleport(telePoint.getX(), + telePoint.getY(), false); + return; + } + if (World.getQuestManager().handleObject(object, + owner, click == 1)) + return; + if (Instance.getPluginHandler().handleObjectAction( + object, command, owner)) + return; + + else if (object.getID() == 198 + && object.getX() == 251 + && object.getY() == 468) { + if (owner.getMaxStat(5) < 31) { + owner.setBusy(true); + Npc abbot = world.getNpc(174, 249, 252, + 458, 468); + if (abbot != null) { + owner.informOfNpcMessage(new ChatMessage( + abbot, + "Hello only people with high prayer are allowed in here", + owner)); + } else { + return; + } + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a prayer level of 31 to enter"); + } + }); + return; + } else { + // owner.teleport(251, 1411, false); + } + } + Logger.println("Command: " + command); + if (command.equalsIgnoreCase("talk to") + && object.getID() == 391) { + + final String[] options = { "Yes please!", + "No thanks I prefer to walk!" }; + owner.getActionSender() + .sendMessage( + "Would you like to be teleported to edgeville for 1000gp?"); + owner.getActionSender() + .sendMessage( + "We'll take the money from your bank account!"); + + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setMenuHandler(new MenuHandler( + options) { + public void handleReply( + final int option, + final String reply) { + if (option < 0 + && option > options.length) + return; + if (option == 0) { + if (owner + .getBank() + .countId(10) < 1000) { + owner.getActionSender() + .sendMessage( + "It looks like you don't have enough money in your bank!"); + owner.setBusy(false); + return; + } + if (owner + .getBank() + .remove(10, + 1000) == -1) { + owner.getActionSender() + .sendMessage( + "It looks like you don't have enough money in your bank!"); + owner.setBusy(false); + return; + } + owner.setBusy(true); + owner.getActionSender() + .sendMessage( + "The tree is looking for a fellow spirit tree!"); + handleMovement( + owner, + 0, + Formulae.dray2edge); + } + } + + public void handleMovement( + Player p, + final int i, + final ArrayList path) { + Instance.getDelayedEventHandler() + .add(new MiniEvent( + p, + Formulae.Rand( + 4500, + 5500)) { + @Override + public void action() { + if (i >= path + .size()) { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You've arrived!"); + return; + } + owner.teleport( + path.get( + i) + .getX(), + path.get( + i) + .getY(), + true); + owner.getActionSender() + .sendMessage( + "The tree is looking for another spirit tree to throw you into!"); + handleMovement( + owner, + (i + 1), + path); + + } + }); + } + }); + owner.getActionSender() + .sendMenu(options); + } + }); + return; + } + if (command.equals("search") + && def.name.equals("cupboard")) { + owner.getActionSender().sendMessage( + "You search the " + def.name + "..."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (object.getX() == 216 + && object.getY() == 1562) { + owner.getActionSender() + .sendMessage( + "You find Garlic!"); + owner.getInventory().add( + new InvItem(218)); + owner.getActionSender() + .sendInventory(); + } else { + owner.getActionSender() + .sendMessage( + "You find nothing"); + } + return; + } + }); + }// create a + else if (object.getID() == 52 + || object.getID() == 173 + && object.containsItem() == 29) // hopper + { + owner.getActionSender().sendMessage( + "You operate the hopper.."); + Instance.getDelayedEventHandler() + .add(new org.moparscape.msc.gs.event.MiniEvent( + owner, 1000) { + public void action() { + owner.getActionSender() + .sendMessage( + "The grain slides down the chute"); + } + }); + // Konijn/xEnt == TEAM WORK BIATCH. + + if (object.getX() == 179 + && object.getY() == 2371) { + world.registerItem(new Item(23, 179, 481, + 1, owner)); + } else { + world.registerItem(new Item(23, 166, 599, + 1, owner)); + } + object.containsItem(-1); + } else if (object.getID() == 223 + && object.getX() == 274 + && object.getY() == 566) { // Mining + // Guild + // Ladder + if (owner.getCurStat(14) < 60) { + owner.setBusy(true); + Npc dwarf = world.getNpc(191, 272, 277, + 563, 567); + if (dwarf != null) { + owner.informOfNpcMessage(new ChatMessage( + dwarf, + "Hello only the top miners are allowed in here", + owner)); + } + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a mining level of 66 to enter"); + } + }); + } else { + owner.teleport(274, 3397, false); + } + } else if (command.equals("climb-up") + || command.equals("climb up") + || command.equals("go up")) { + int[] coords = coordModifier(owner, true); + owner.teleport(coords[0], coords[1], false); + } else if (command.equals("climb-down") + || command.equals("climb down") + || command.equals("go down")) { + int[] coords = coordModifier(owner, false); + owner.teleport(coords[0], coords[1], false); + } else if (command.equals("steal from")) { + if (!Server.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + + if (object == null) { + return; + } + if (owner.getSpam()) { + return; + } else { + owner.setSpam(true); + Thieving thiev = new Thieving(owner, object); + thiev.thieveStall(); + } + + } else if (command.equals("search for traps")) { + if (!Server.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + if (object == null) { + return; + } + if (owner.getSpam()) { + return; + } else { + owner.setSpam(true); + Thieving thiev = new Thieving(owner, object); + thiev.thieveChest(); + } + } else if (command.equals("rest")) { + owner.getActionSender().sendMessage( + "You rest on the bed"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + // owner.setFatigue(0); + // owner.getActionSender().sendFatigue(); + + owner.getActionSender() + .sendEnterSleep(); + } + }); + } else if (command.equals("hit")) { + owner.setBusy(true); + owner.getActionSender().sendMessage( + "You attempt to hit the Dummy"); + Instance.getDelayedEventHandler().add( + new MiniEvent(owner, 3500) { + public void action() { + owner.setBusy(false); + int lvl = owner.getCurStat(0); + if (lvl > 7 + || owner.getMaxStat(0) >= 40) { + owner.getActionSender() + .sendMessage( + "There is only so much you can learn from hitting a Dummy"); + return; + } + owner.getActionSender() + .sendMessage( + "You hit the Dummy"); + owner.incExp(0, 5, false); + owner.getActionSender() + .sendStat(0); + } + }); + return; + } else if (command.equalsIgnoreCase("approach")) { + owner.getActionSender().sendMessage( + "You start to approach the tree"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + int damage = owner + .getCurStat(3) / 10; + owner.getActionSender() + .sendMessage( + "The tree lashes out at you."); + owner.setLastDamage(damage); + owner.setCurStat(3, + owner.getCurStat(3) + - damage); + ArrayList playersToInform = new ArrayList(); + playersToInform.addAll(owner + .getViewArea() + .getPlayersInView()); + owner.getActionSender() + .sendStat(3); + for (Player p : playersToInform) { + p.informOfModifiedHits(owner); + } + } + }); + + } else if (command.equals("open") + && object.getGameObjectDef().name + .equals("Chest")) { + if (object == null) { + return; + } + if (owner.getSpam()) + return; + + Thieving lock = new Thieving(owner, object); + for (int i = 0; i < lock.Chests.length; i++) { + if (object.getID() == lock.Chests[i][0]) { + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + owner.setSpam(true); + lock.openThievedChest(); + break; + } + } + return; + } + + else if (command.equals("close") + || command.equals("open")) { + switch (object.getID()) { + case 18: + replaceGameObject(17, true); + return; + case 17: + replaceGameObject(18, false); + return; + case 58: + replaceGameObject(57, false); + return; + case 57: + replaceGameObject(58, true); + return; + case 63: + replaceGameObject(64, false); + return; + case 64: + replaceGameObject(63, true); + return; + case 79: + replaceGameObject(78, false); + return; + case 78: + replaceGameObject(79, true); + return; + case 60: + replaceGameObject(59, true); + return; + case 59: + replaceGameObject(60, false); + return; + case 137: // Members Gate (Doriks) + if (object.getX() != 341 + || object.getY() != 487) { + return; + } + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + doGate(); + if (owner.getX() <= 341) { + owner.teleport(342, 487, false); + } else { + owner.teleport(341, 487, false); + } + break; + case 138: // Members Gate (Crafting Guild) + if (object.getX() != 343 + || object.getY() != 581) { + return; + } + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + doGate(); + if (owner.getY() <= 580) { + owner.teleport(343, 581, false); + } else { + owner.teleport(343, 580, false); + } + break; + case 180: // Al-Kharid Gate + if (object.getX() != 92 + || object.getY() != 649) { + return; + } + doGate(); + if (owner.getX() <= 91) { + owner.teleport(92, 649, false); + } else { + owner.teleport(91, 649, false); + } + break; + case 254: // Karamja Gate + if (object.getX() != 434 + || object.getY() != 682) { + return; + } + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + doGate(); + if (owner.getX() <= 434) { + owner.teleport(435, 682, false); + } else { + owner.teleport(434, 682, false); + } + break; + case 563: // King Lanthlas Gate + if (object.getX() != 660 + || object.getY() != 551) { + return; + } + doGate(); + if (owner.getY() <= 551) { + owner.teleport(660, 552, false); + } else { + owner.teleport(660, 551, false); + } + break; + case 626: // Gnome Stronghold Gate + if (object.getX() != 703 + || object.getY() != 531) { + return; + } + doGate(); + if (owner.getY() <= 531) { + owner.teleport(703, 532, false); + } else { + owner.teleport(703, 531, false); + } + break; + case 305: // Edgeville Members Gate + if (object.getX() != 196 + || object.getY() != 3266) { + return; + } + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + doGate(); + if (owner.getY() <= 3265) { + owner.teleport(196, 3266, false); + } else { + owner.teleport(196, 3265, false); + } + break; + case 1089: // Dig Site Gate + if (object.getX() != 59 + || object.getY() != 573) { + return; + } + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + doGate(); + if (owner.getX() <= 58) { + owner.teleport(59, 573, false); + } else { + owner.teleport(58, 573, false); + } + break; + case 356: // Woodcutting Guild Gate + if (object.getX() != 560 + || object.getY() != 472) { + return; + } + if (owner.getY() <= 472) { + doGate(); + owner.teleport(560, 473, false); + } else { + if (owner.getCurStat(8) < 70) { + owner.setBusy(true); + Npc mcgrubor = world.getNpc(255, + 556, 564, 473, 476); + + if (mcgrubor != null) { + owner.informOfNpcMessage(new ChatMessage( + mcgrubor, + "Hello only the top woodcutters are allowed in here", + owner)); + } + Instance.getDelayedEventHandler() + .add(new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a woodcutting level of 70 to enter"); + } + }); + } else { + doGate(); + owner.teleport(560, 472, false); + } + } + break; + case 142: // Black Knight Big Door + owner.getActionSender().sendMessage( + "The doors are locked"); + break; + case 93: // Red dragon gate + if (object.getX() != 140 + || object.getY() != 180) { + return; + } + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + doGate(); + if (owner.getY() <= 180) { + owner.teleport(140, 181, false); + } else { + owner.teleport(140, 180, false); + } + break; + case 508: // Lesser demon gate + if (object.getX() != 285 + || object.getY() != 185) { + return; + } + doGate(); + if (owner.getX() <= 284) { + owner.teleport(285, 185, false); + } else { + owner.teleport(284, 185, false); + } + break; + case 319: // Lava Maze Gate + if (object.getX() != 243 + || object.getY() != 178) { + return; + } + doGate(); + if (owner.getY() <= 178) { + owner.teleport(243, 179, false); + } else { + owner.teleport(243, 178, false); + } + break; + case 712: // Shilo inside gate + if (object.getX() != 394 + || object.getY() != 851) { + return; + } + owner.teleport(383, 851, false); + break; + case 611: // Shilo outside gate + if (object.getX() != 388 + || object.getY() != 851) { + return; + } + owner.teleport(394, 851, false); + break; + case 1079: // Legends guild gate + if (object.getX() != 512 + || object.getY() != 550) { + return; + } + if (owner.getY() <= 550) { + doGate(); + owner.teleport(513, 551, false); + } else { + if (owner.getSkillTotal() < 1150) { + owner.getActionSender() + .sendMessage( + "You need a skill total of 1150 or more to enter"); + return; + } + doGate(); + owner.teleport(513, 550, false); + } + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + } else if (command.equals("pick") + || command.equals("pick banana")) { + switch (object.getID()) { + case 72: // Wheat + owner.getActionSender().sendMessage( + "You get some grain"); + owner.getInventory() + .add(new InvItem(29, 1)); + break; + case 191: // Potatos + owner.getActionSender().sendMessage( + "You pick a potato"); + owner.getInventory().add( + new InvItem(348, 1)); + break; + case 313: // Flax + handleFlaxPickup(); + break; + case 183: // Banana + owner.getActionSender().sendMessage( + "You pull a banana off the tree"); + owner.getInventory().add( + new InvItem(249, 1)); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + owner.getActionSender().sendInventory(); + owner.getActionSender().sendSound("potato"); + owner.setBusy(true); + Instance.getDelayedEventHandler().add( + new SingleEvent(owner, 200) { + public void action() { + owner.setBusy(false); + } + }); + } else if (command.equals("lure") + || command.equals("bait") + || command.equals("net") + || command.equals("harpoon") + || command.equals("cage")) { + owner.setSkillLoops(0); + + handleFishing(click); + } else if (command.equals("chop")) { + handleWoodcutting(click); + } else if (command.equals("recharge at")) { + owner.getActionSender().sendMessage( + "You recharge at the altar."); + owner.getActionSender().sendSound("recharge"); + int maxPray = object.getID() == 200 ? owner + .getMaxStat(5) + 2 : owner + .getMaxStat(5); + if (owner.getCurStat(5) < maxPray) { + owner.setCurStat(5, maxPray); + } + owner.getActionSender().sendStat(5); + } else if (command.equals("board")) { + owner.getActionSender() + .sendMessage( + "You must talk to the owner about this."); + } else if (EntityHandler.getAgilityDef(object + .getID()) != null) { + handleAgility(object); + } else { + switch (object.getID()) { + case 613: // Shilo cart + if (object.getX() != 384 + || object.getY() != 851) { + return; + } + owner.setBusy(true); + owner.getActionSender() + .sendMessage( + "You search for a way over the cart"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "You climb across"); + if (owner.getX() <= 383) { + owner.teleport(386, + 851, false); + } else { + owner.teleport(383, + 851, false); + } + owner.setBusy(false); + } + }); + break; + case 643: // Gnome tree stone + if (object.getX() != 416 + || object.getY() != 161) { + return; + }// getCurStat(14 + owner.setBusy(true); + owner.getActionSender() + .sendMessage( + "You twist the stone tile to one side"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "It reveals a ladder, you climb down"); + owner.teleport(703, 3284, + false); + owner.setBusy(false); + } + }); + break; + case 638: // First roots in gnome cave + if (object.getX() != 701 + || object.getY() != 3280) { + return; + } + // door + owner.setBusy(true); + owner.getActionSender().sendMessage( + "You push the roots"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "They wrap around you and drag you forwards"); + owner.teleport(701, 3278, + false); + owner.setBusy(false); + } + }); + case 639: // Second roots in gnome cave + if (object.getX() != 701 + || object.getY() != 3279) { + return; + } + owner.setBusy(true); + owner.getActionSender().sendMessage( + "You push the roots"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "They wrap around you and drag you forwards"); + owner.teleport(701, 3281, + false); + owner.setBusy(false); + } + }); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void handleFlaxPickup() { + handleFlaxPickup((int) Math.ceil(owner.getMaxStat(12) / 10)); + + } + + private void handleFlaxPickup(int times) { + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + owner.getActionSender().sendMessage( + "You uproot a flax plant"); + owner.getInventory().add(new InvItem(675, 1)); + if (--times > 0) { + handleFlaxPickup(times); + } + } + + private int[] coordModifier(Player player, boolean up) { + if (object.getGameObjectDef().getHeight() <= 1) { + return new int[] { player.getX(), + Formulae.getNewY(player.getY(), up) }; + } + int[] coords = { object.getX(), + Formulae.getNewY(object.getY(), up) }; + switch (object.getDirection()) { + case 0: + coords[1] -= (up ? -object.getGameObjectDef() + .getHeight() : 1); + break; + case 2: + coords[0] -= (up ? -object.getGameObjectDef() + .getHeight() : 1); + break; + case 4: + coords[1] += (up ? -1 : object.getGameObjectDef() + .getHeight()); + break; + case 6: + coords[0] += (up ? -1 : object.getGameObjectDef() + .getHeight()); + break; + } + return coords; + } + + private void doGate() { + owner.getActionSender().sendSound("opendoor"); + world.registerGameObject(new GameObject(object + .getLocation(), 181, object.getDirection(), + object.getType())); + world.delayedSpawnObject(object.getLoc(), 1000); + } + + private void handleAgility(final GameObject object) { + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + final AgilityDef def = EntityHandler + .getAgilityDef(object.getID()); + if (owner.getCurStat(16) < def.getReqLevel()) { + owner.getActionSender().sendMessage( + "You need an agility level of " + + def.getReqLevel() + + " to try this obstacle"); + return; + } + + owner.setBusy(true); + owner.setStatus(Action.AGILITYING); + owner.getActionSender().sendMessage(def.getMessage()); + + if (Formulae.getHeight(def.getY()) == Formulae + .getHeight(def.getToY())) + owner.setPath(new Path(def.getX(), def.getY(), def + .getToX(), def.getToY(), true)); + else + owner.teleport(def.getToX(), def.getToY(), false); + + Instance.getDelayedEventHandler().add( + new DelayedEvent(owner, 100) { + private boolean testedFail = false; + + public void run() { + if (def.canFail() && !testedFail) { + if (owner.getX() >= ((def.getToX() + def + .getX()) / 2) + && owner.getY() >= ((def + .getToY() + def + .getY()) / 2)) // half + // way + // accross + // the + // obstacle + { + int damage = Formulae + .failObstacle( + owner, + def.getReqLevel()); + if (damage != -1) { + owner.getActionSender() + .sendMessage( + "You slip off the obstacle!"); + owner.teleport( + def.getFailX(), + def.getFailY(), + false); + owner.setBusy(false); + owner.setStatus(Action.IDLE); + owner.setLastDamage(damage); + int newHp = owner.getHits() + - damage; + owner.setHits(newHp); + java.util.ArrayList playersToInform = new java.util.ArrayList(); + playersToInform + .addAll(owner + .getViewArea() + .getPlayersInView()); + for (Player p : playersToInform) + p.informOfModifiedHits(owner); + stop(); + } + + testedFail = true; + } + } + + if (owner.getX() == def.getToX() + && owner.getY() == def.getToY()) { + owner.getActionSender() + .sendMessage( + "You successfully make it to the other side of the obstacle"); + owner.setBusy(false); + owner.setStatus(Action.IDLE); + owner.incExp(16, def.getExp(), true); + owner.getActionSender() + .sendStat(16); + + AgilityCourseDef course = EntityHandler + .getAgilityCourseDef(object + .getID()); + + if (owner.getAgilityCourseDef() != null) // We're + // currently + // doing + // a + // course + { + course = owner + .getAgilityCourseDef(); + if (def.getOrder() == (owner + .getCurrentCourseObject() + 1)) // We've + // used + // the + // next + // object + // in + // the + // sequence + { + if (object.getID() == course + .getEndID() + && object.getX() == course + .getEndX() + && object.getY() == course + .getEndY()) // We've + // finished + // the + // course + { + owner.getActionSender() + .sendMessage( + "You have completed the " + + course.getName() + + " obstacle course!"); + owner.incExp( + 16, + course.getExp(), + true); + owner.setAgilityCourseDef(null); + owner.setCurrentCourseObject(-1); + } else + owner.setCurrentCourseObject(def + .getOrder()); // Continue + // the + // sequence + } else { + owner.setAgilityCourseDef(null); // We've + // broken + // the + // sequence, + // end + // the + // course + owner.setCurrentCourseObject(-1); + } + } else // We're not doing a course, + // so check if this object + // is the start of a new + // course + { + if (course != null) // It is, so + // we start + // a new + // agility + // course + { + owner.setAgilityCourseDef(course); + owner.setCurrentCourseObject(def + .getOrder()); + } + } + + owner.getActionSender() + .sendStat(16); + stop(); } - owner.teleport(path.get(i).getX(), path.get(i).getY(), true); - owner.getActionSender().sendMessage("The tree is looking for another spirit tree to throw you into!"); - handleMovement(owner, (i+1), path); - } }); + } + + private void handleFishing(final int click) { + int retries = (int) Math.ceil(owner.getMaxStat(10) / 10); + handleFishing(click, retries); + } + + private void handleFishing(final int click, int passvalue) { + final int tries = --passvalue; + final ObjectFishingDef def = EntityHandler + .getObjectFishingDef(object.getID(), click); + if (owner.isBusy()) { + return; + } + if (!owner.withinRange(object, 1)) + return; + if (def == null) { // This shouldn't happen + return; + } + if (owner.getCurStat(10) < def.getReqLevel()) { + owner.getActionSender().sendMessage( + "You need a fishing level of " + + def.getReqLevel() + + " to fish here."); + return; + } + int netId = def.getNetId(); + if (owner.getInventory().countId(netId) <= 0) { + owner.getActionSender().sendMessage( + "You need a " + + EntityHandler.getItemDef(netId) + .getName() + + " to catch these fish."); + return; + } + final int baitId = def.getBaitId(); + if (baitId >= 0) { + if (owner.getInventory().countId(baitId) <= 0) { + owner.getActionSender().sendMessage( + "You don't have any " + + EntityHandler.getItemDef( + baitId).getName() + + " left."); + return; } - }); - owner.getActionSender().sendMenu(options); - } - }); - return; - } - if (command.equals("search") && def.name.equals("cupboard")) { - owner.getActionSender().sendMessage("You search the " + def.name + "..."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (object.getX() == 216 && object.getY() == 1562) { - owner.getActionSender().sendMessage("You find Garlic!"); - owner.getInventory().add(new InvItem(218)); - owner.getActionSender().sendInventory(); - } else { - owner.getActionSender().sendMessage("You find nothing"); - } - return; - } - }); - }// create a - else if (object.getID() == 52 || object.getID() == 173 && object.containsItem() == 29) // hopper - { - owner.getActionSender().sendMessage("You operate the hopper.."); - Instance.getDelayedEventHandler().add(new org.moparscape.msc.gs.event.MiniEvent(owner, 1000) { - public void action() { - owner.getActionSender().sendMessage("The grain slides down the chute"); - } - }); - // Konijn/xEnt == TEAM WORK BIATCH. + } - if (object.getX() == 179 && object.getY() == 2371) { - world.registerItem(new Item(23, 179, 481, 1, owner)); - } else { - world.registerItem(new Item(23, 166, 599, 1, owner)); - } - object.containsItem(-1); - } else if (object.getID() == 223 && object.getX() == 274 && object.getY() == 566) { // Mining - // Guild - // Ladder - if (owner.getCurStat(14) < 60) { - owner.setBusy(true); - Npc dwarf = world.getNpc(191, 272, 277, 563, 567); - if (dwarf != null) { - owner.informOfNpcMessage(new ChatMessage(dwarf, "Hello only the top miners are allowed in here", owner)); - } - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a mining level of 66 to enter"); - } - }); - } else { - owner.teleport(274, 3397, false); - } - } else if (command.equals("climb-up") || command.equals("climb up") || command.equals("go up")) { - int[] coords = coordModifier(owner, true); - owner.teleport(coords[0], coords[1], false); - } else if (command.equals("climb-down") || command.equals("climb down") || command.equals("go down")) { - int[] coords = coordModifier(owner, false); - owner.teleport(coords[0], coords[1], false); - } else if (command.equals("steal from")) { - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } + owner.setBusy(true); + owner.getActionSender().sendSound("fish"); + Bubble bubble = new Bubble(owner, netId); + for (Player p : owner.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } - if (object == null) { - return; - } - if (owner.getSpam()) { - return; - } else { - owner.setSpam(true); - Thieving thiev = new Thieving(owner, object); - thiev.thieveStall(); - } - - } else if (command.equals("search for traps")) { - if (!Server.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - if (object == null) { - return; - } - if (owner.getSpam()) { - return; - } else { - owner.setSpam(true); - Thieving thiev = new Thieving(owner, object); - thiev.thieveChest(); - } - } else if (command.equals("rest")) { - owner.getActionSender().sendMessage("You rest on the bed"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - // owner.setFatigue(0); - // owner.getActionSender().sendFatigue(); - - owner.getActionSender().sendEnterSleep(); - } - }); - } else if (command.equals("hit")) { - owner.setBusy(true); - owner.getActionSender().sendMessage("You attempt to hit the Dummy"); - Instance.getDelayedEventHandler().add(new MiniEvent(owner, 3500) { - public void action() { - owner.setBusy(false); - int lvl = owner.getCurStat(0); - if (lvl > 7 || owner.getMaxStat(0) >= 40) { - owner.getActionSender().sendMessage("There is only so much you can learn from hitting a Dummy"); - return; - } - owner.getActionSender().sendMessage("You hit the Dummy"); - owner.incExp(0, 5, false); - owner.getActionSender().sendStat(0); - } - }); - return; - } else if (command.equalsIgnoreCase("approach")) { - owner.getActionSender().sendMessage("You start to approach the tree"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - int damage = owner.getCurStat(3) / 10; - owner.getActionSender().sendMessage("The tree lashes out at you."); - owner.setLastDamage(damage); - owner.setCurStat(3, owner.getCurStat(3) - damage); - ArrayList playersToInform = new ArrayList(); - playersToInform.addAll(owner.getViewArea().getPlayersInView()); - owner.getActionSender().sendStat(3); - for (Player p : playersToInform) { - p.informOfModifiedHits(owner); - } - } - }); - - } else if (command.equals("open") && object.getGameObjectDef().name.equals("Chest")) { - if (object == null) { - return; - } - if (owner.getSpam()) - return; - - Thieving lock = new Thieving(owner, object); - boolean cont = false; - for (int i = 0; i < lock.Chests.length; i++) { - if (object.getID() == lock.Chests[i][0]) { - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - owner.setSpam(true); - lock.openThievedChest(); - break; - } - } - return; - } - - else if (command.equals("close") || command.equals("open")) { - switch (object.getID()) { - case 18: - replaceGameObject(17, true); - return; - case 17: - replaceGameObject(18, false); - return; - case 58: - replaceGameObject(57, false); - return; - case 57: - replaceGameObject(58, true); - return; - case 63: - replaceGameObject(64, false); - return; - case 64: - replaceGameObject(63, true); - return; - case 79: - replaceGameObject(78, false); - return; - case 78: - replaceGameObject(79, true); - return; - case 60: - replaceGameObject(59, true); - return; - case 59: - replaceGameObject(60, false); - return; - case 137: // Members Gate (Doriks) - if (object.getX() != 341 || object.getY() != 487) { - return; - } - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - doGate(); - if (owner.getX() <= 341) { - owner.teleport(342, 487, false); - } else { - owner.teleport(341, 487, false); - } - break; - case 138: // Members Gate (Crafting Guild) - if (object.getX() != 343 || object.getY() != 581) { - return; - } - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - doGate(); - if (owner.getY() <= 580) { - owner.teleport(343, 581, false); - } else { - owner.teleport(343, 580, false); - } - break; - case 180: // Al-Kharid Gate - if (object.getX() != 92 || object.getY() != 649) { - return; - } - doGate(); - if (owner.getX() <= 91) { - owner.teleport(92, 649, false); - } else { - owner.teleport(91, 649, false); - } - break; - case 254: // Karamja Gate - if (object.getX() != 434 || object.getY() != 682) { - return; - } - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - doGate(); - if (owner.getX() <= 434) { - owner.teleport(435, 682, false); - } else { - owner.teleport(434, 682, false); - } - break; - case 563: // King Lanthlas Gate - if (object.getX() != 660 || object.getY() != 551) { - return; - } - doGate(); - if (owner.getY() <= 551) { - owner.teleport(660, 552, false); - } else { - owner.teleport(660, 551, false); - } - break; - case 626: // Gnome Stronghold Gate - if (object.getX() != 703 || object.getY() != 531) { - return; - } - doGate(); - if (owner.getY() <= 531) { - owner.teleport(703, 532, false); - } else { - owner.teleport(703, 531, false); - } - break; - case 305: // Edgeville Members Gate - if (object.getX() != 196 || object.getY() != 3266) { - return; - } - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - doGate(); - if (owner.getY() <= 3265) { - owner.teleport(196, 3266, false); - } else { - owner.teleport(196, 3265, false); - } - break; - case 1089: // Dig Site Gate - if (object.getX() != 59 || object.getY() != 573) { - return; - } - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - doGate(); - if (owner.getX() <= 58) { - owner.teleport(59, 573, false); - } else { - owner.teleport(58, 573, false); - } - break; - case 356: // Woodcutting Guild Gate - if (object.getX() != 560 || object.getY() != 472) { - return; - } - if (owner.getY() <= 472) { - doGate(); - owner.teleport(560, 473, false); - } else { - if (owner.getCurStat(8) < 70) { - owner.setBusy(true); - Npc mcgrubor = world.getNpc(255, 556, 564, 473, 476); - - if (mcgrubor != null) { - owner.informOfNpcMessage(new ChatMessage(mcgrubor, "Hello only the top woodcutters are allowed in here", owner)); - } - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a woodcutting level of 70 to enter"); + owner.getActionSender().sendMessage( + "You attempt to catch some fish"); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + ObjectFishDef def = Formulae.getFish( + object.getID(), + owner.getCurStat(10), click); + if (def != null) { + if (baitId >= 0) { + int idx = owner.getInventory() + .getLastIndexById( + baitId); + InvItem bait = owner + .getInventory() + .get(idx); + int newCount = bait.getAmount() - 1; + if (newCount <= 0) { + owner.getInventory() + .remove(idx); + } else { + bait.setAmount(newCount); + } + } + InvItem fish = new InvItem(def + .getId()); + owner.getInventory().add(fish); + owner.getActionSender() + .sendMessage( + "You catch a " + + fish.getDef() + .getName() + + "."); + owner.getActionSender() + .sendInventory(); + owner.incExp(10, def.getExp(), true); + owner.getActionSender() + .sendStat(10); + } else { + owner.getActionSender() + .sendMessage( + "You fail to catch anything."); + } + owner.setBusy(false); + if (tries > 0) { + handleFishing(click, tries); + } + } + }); } - }); - } else { - doGate(); - owner.teleport(560, 472, false); - } - } - break; - case 142: // Black Knight Big Door - owner.getActionSender().sendMessage("The doors are locked"); - break; - case 93: // Red dragon gate - if (object.getX() != 140 || object.getY() != 180) { - return; - } - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - doGate(); - if (owner.getY() <= 180) { - owner.teleport(140, 181, false); - } else { - owner.teleport(140, 180, false); - } - break; - case 508: // Lesser demon gate - if (object.getX() != 285 || object.getY() != 185) { - return; - } - doGate(); - if (owner.getX() <= 284) { - owner.teleport(285, 185, false); - } else { - owner.teleport(284, 185, false); - } - break; - case 319: // Lava Maze Gate - if (object.getX() != 243 || object.getY() != 178) { - return; - } - doGate(); - if (owner.getY() <= 178) { - owner.teleport(243, 179, false); - } else { - owner.teleport(243, 178, false); - } - break; - case 712: // Shilo inside gate - if (object.getX() != 394 || object.getY() != 851) { - return; - } - owner.teleport(383, 851, false); - break; - case 611: // Shilo outside gate - if (object.getX() != 388 || object.getY() != 851) { - return; - } - owner.teleport(394, 851, false); - break; - case 1079: // Legends guild gate - if (object.getX() != 512 || object.getY() != 550) { - return; - } - if (owner.getY() <= 550) { - doGate(); - owner.teleport(513, 551, false); - } else { - if(owner.getSkillTotal() < 1150) { owner.getActionSender().sendMessage("You need a skill total of 1150 or more to enter"); return; } - doGate(); - owner.teleport(513, 550, false); - } - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - } else if (command.equals("pick") || command.equals("pick banana")) { - switch (object.getID()) { - case 72: // Wheat - owner.getActionSender().sendMessage("You get some grain"); - owner.getInventory().add(new InvItem(29, 1)); - break; - case 191: // Potatos - owner.getActionSender().sendMessage("You pick a potato"); - owner.getInventory().add(new InvItem(348, 1)); - break; - case 313: // Flax - handleFlaxPickup(); - break; - case 183: // Banana - owner.getActionSender().sendMessage("You pull a banana off the tree"); - owner.getInventory().add(new InvItem(249, 1)); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - owner.getActionSender().sendInventory(); - owner.getActionSender().sendSound("potato"); - owner.setBusy(true); - Instance.getDelayedEventHandler().add(new SingleEvent(owner, 200) { - public void action() { - owner.setBusy(false); - } - }); - } else if (command.equals("lure") || command.equals("bait") || command.equals("net") || command.equals("harpoon") || command.equals("cage")) { - owner.setSkillLoops(0); - handleFishing(click); - } else if (command.equals("chop")) { - handleWoodcutting(click); - } else if (command.equals("recharge at")) { - owner.getActionSender().sendMessage("You recharge at the altar."); - owner.getActionSender().sendSound("recharge"); - int maxPray = object.getID() == 200 ? owner.getMaxStat(5) + 2 : owner.getMaxStat(5); - if (owner.getCurStat(5) < maxPray) { - owner.setCurStat(5, maxPray); - } - owner.getActionSender().sendStat(5); - } else if (command.equals("board")) { - owner.getActionSender().sendMessage("You must talk to the owner about this."); - } else if (EntityHandler.getAgilityDef(object.getID()) != null) { - handleAgility(object); - } else { - switch (object.getID()) { - case 613: // Shilo cart - if (object.getX() != 384 || object.getY() != 851) { - return; - } - owner.setBusy(true); - owner.getActionSender().sendMessage("You search for a way over the cart"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("You climb across"); - if (owner.getX() <= 383) { - owner.teleport(386, 851, false); - } else { - owner.teleport(383, 851, false); - } - owner.setBusy(false); - } - }); - break; - case 643: // Gnome tree stone - if (object.getX() != 416 || object.getY() != 161) { - return; - }// getCurStat(14 - owner.setBusy(true); - owner.getActionSender().sendMessage("You twist the stone tile to one side"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("It reveals a ladder, you climb down"); - owner.teleport(703, 3284, false); - owner.setBusy(false); - } - }); - break; - case 638: // First roots in gnome cave - if (object.getX() != 701 || object.getY() != 3280) { - return; - } - // door - owner.setBusy(true); - owner.getActionSender().sendMessage("You push the roots"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("They wrap around you and drag you forwards"); - owner.teleport(701, 3278, false); - owner.setBusy(false); - } - }); - case 639: // Second roots in gnome cave - if (object.getX() != 701 || object.getY() != 3279) { - return; - } - owner.setBusy(true); - owner.getActionSender().sendMessage("You push the roots"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("They wrap around you and drag you forwards"); - owner.teleport(701, 3281, false); - owner.setBusy(false); - } - }); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - return; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void handleFlaxPickup() { - handleFlaxPickup((int)Math.ceil(owner.getMaxStat(12) / 10)); - - } - private void handleFlaxPickup(int times) { - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - owner.getActionSender().sendMessage("You uproot a flax plant"); - owner.getInventory().add(new InvItem(675, 1)); - if(--times > 0) { - handleFlaxPickup(times); - } - } - private int[] coordModifier(Player player, boolean up) { - if (object.getGameObjectDef().getHeight() <= 1) { - return new int[] { player.getX(), Formulae.getNewY(player.getY(), up) }; - } - int[] coords = { object.getX(), Formulae.getNewY(object.getY(), up) }; - switch (object.getDirection()) { - case 0: - coords[1] -= (up ? -object.getGameObjectDef().getHeight() : 1); - break; - case 2: - coords[0] -= (up ? -object.getGameObjectDef().getHeight() : 1); - break; - case 4: - coords[1] += (up ? -1 : object.getGameObjectDef().getHeight()); - break; - case 6: - coords[0] += (up ? -1 : object.getGameObjectDef().getHeight()); - break; - } - return coords; - } - - private void doGate() { - owner.getActionSender().sendSound("opendoor"); - world.registerGameObject(new GameObject(object.getLocation(), 181, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), 1000); - } - - private void handleAgility(final GameObject object) { - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - final AgilityDef def = EntityHandler.getAgilityDef(object.getID()); - if (owner.getCurStat(16) < def.getReqLevel()) { - owner.getActionSender().sendMessage("You need an agility level of " + def.getReqLevel() + " to try this obstacle"); - return; - } - - owner.setBusy(true); - owner.setStatus(Action.AGILITYING); - owner.getActionSender().sendMessage(def.getMessage()); - - if (Formulae.getHeight(def.getY()) == Formulae.getHeight(def.getToY())) - owner.setPath(new Path(def.getX(), def.getY(), def.getToX(), def.getToY(), true)); - else - owner.teleport(def.getToX(), def.getToY(), false); - - Instance.getDelayedEventHandler().add(new DelayedEvent(owner, 100) { - private boolean testedFail = false; - - public void run() { - if (def.canFail() && !testedFail) { - if (owner.getX() >= ((def.getToX() + def.getX()) / 2) && owner.getY() >= ((def.getToY() + def.getY()) / 2)) // half - // way - // accross - // the - // obstacle - { - int damage = Formulae.failObstacle(owner, def.getReqLevel()); - if (damage != -1) { - owner.getActionSender().sendMessage("You slip off the obstacle!"); - owner.teleport(def.getFailX(), def.getFailY(), false); - owner.setBusy(false); - owner.setStatus(Action.IDLE); - owner.setLastDamage(damage); - int newHp = owner.getHits() - damage; - owner.setHits(newHp); - java.util.ArrayList playersToInform = new java.util.ArrayList(); - playersToInform.addAll(owner.getViewArea().getPlayersInView()); - for (Player p : playersToInform) - p.informOfModifiedHits(owner); - stop(); - } - - testedFail = true; - } - } - - if (owner.getX() == def.getToX() && owner.getY() == def.getToY()) { - owner.getActionSender().sendMessage("You successfully make it to the other side of the obstacle"); - owner.setBusy(false); - owner.setStatus(Action.IDLE); - owner.incExp(16, def.getExp(), true); - owner.getActionSender().sendStat(16); - - AgilityCourseDef course = EntityHandler.getAgilityCourseDef(object.getID()); - - if (owner.getAgilityCourseDef() != null) // We're - // currently - // doing - // a - // course - { - course = owner.getAgilityCourseDef(); - if (def.getOrder() == (owner.getCurrentCourseObject() + 1)) // We've - // used - // the - // next - // object - // in - // the - // sequence - { - if (object.getID() == course.getEndID() && object.getX() == course.getEndX() && object.getY() == course.getEndY()) // We've - // finished - // the - // course - { - owner.getActionSender().sendMessage("You have completed the " + course.getName() + " obstacle course!"); - owner.incExp(16, course.getExp(), true); - owner.setAgilityCourseDef(null); - owner.setCurrentCourseObject(-1); - } else - owner.setCurrentCourseObject(def.getOrder()); // Continue - // the - // sequence - } else { - owner.setAgilityCourseDef(null); // We've - // broken - // the - // sequence, - // end - // the - // course - owner.setCurrentCourseObject(-1); - } - } else // We're not doing a course, - // so check if this object - // is the start of a new - // course - { - if (course != null) // It is, so - // we start - // a new - // agility - // course - { - owner.setAgilityCourseDef(course); - owner.setCurrentCourseObject(def.getOrder()); - } - } - - owner.getActionSender().sendStat(16); - stop(); - } - } - }); - } - - private void handleFishing(final int click) { - int retries = (int)Math.ceil(owner.getMaxStat(10) / 10); - handleFishing(click,retries); - } - - private void handleFishing(final int click, int passvalue) { - final int tries = --passvalue; - final ObjectFishingDef def = EntityHandler.getObjectFishingDef(object.getID(), click); - if (owner.isBusy()) { - return; - } - if (!owner.withinRange(object, 1)) - return; - if (def == null) { // This shouldn't happen - return; - } - if (owner.getCurStat(10) < def.getReqLevel()) { - owner.getActionSender().sendMessage("You need a fishing level of " + def.getReqLevel() + " to fish here."); - return; - } - int netId = def.getNetId(); - if (owner.getInventory().countId(netId) <= 0) { - owner.getActionSender().sendMessage("You need a " + EntityHandler.getItemDef(netId).getName() + " to catch these fish."); - return; - } - final int baitId = def.getBaitId(); - if (baitId >= 0) { - if (owner.getInventory().countId(baitId) <= 0) { - owner.getActionSender().sendMessage("You don't have any " + EntityHandler.getItemDef(baitId).getName() + " left."); - return; - } - } - - owner.setBusy(true); - owner.getActionSender().sendSound("fish"); - Bubble bubble = new Bubble(owner, netId); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - - owner.getActionSender().sendMessage("You attempt to catch some fish"); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - ObjectFishDef def = Formulae.getFish(object.getID(), owner.getCurStat(10), click); - final int fishes = owner.getSkillLoops(); - if (def != null) { - if (baitId >= 0) { - int idx = owner.getInventory().getLastIndexById(baitId); - InvItem bait = owner.getInventory().get(idx); - int newCount = bait.getAmount() - 1; - if (newCount <= 0) { - owner.getInventory().remove(idx); - } else { - bait.setAmount(newCount); - } - } - InvItem fish = new InvItem(def.getId()); - owner.getInventory().add(fish); - owner.getActionSender().sendMessage("You catch a " + fish.getDef().getName() + "."); - owner.getActionSender().sendInventory(); - owner.incExp(10, def.getExp(), true); - owner.getActionSender().sendStat(10); - } else { - owner.getActionSender().sendMessage("You fail to catch anything."); - } - owner.setBusy(false); - if(tries > 0) { - handleFishing(click,tries); - } - } - }); - } - - private void handleWoodcutting(final int click) { - int retries = (int)Math.ceil(owner.getMaxStat(8) / 10); - handleWoodcutting(click,retries); - } - private void handleWoodcutting(final int click, int passedvalue) { - final int tries = --passedvalue; - final ObjectWoodcuttingDef def = EntityHandler.getObjectWoodcuttingDef(object.getID()); - if (owner.isBusy()) { - return; - } - if (!owner.withinRange(object, 2)) - return; - if (def == null) { // This shoudln't happen - return; - } - if (owner.getCurStat(8) < def.getReqLevel()) { - owner.getActionSender().sendMessage("You need a woodcutting level of " + def.getReqLevel() + " to axe this tree."); - return; - } - int axeId = -1; - for (int a : Formulae.woodcuttingAxeIDs) { - if (owner.getInventory().countId(a) > 0) { - axeId = a; - break; - } - } - if (axeId < 0) { - owner.getActionSender().sendMessage("You need an axe to chop this tree down."); - return; - } - owner.setBusy(true); - Bubble bubble = new Bubble(owner, axeId); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - owner.getActionSender().sendMessage("You swing your " + EntityHandler.getItemDef(axeId).getName() + " at the tree..."); - final int axeID = axeId; - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (Formulae.getLog(def, owner.getCurStat(8), axeID)) { - InvItem log = new InvItem(def.getLogId()); - owner.getInventory().add(log); - owner.getActionSender().sendMessage("You get some wood."); - owner.getActionSender().sendInventory(); - owner.incExp(8, def.getExp(), true); - owner.getActionSender().sendStat(8); - if (DataConversions.random(1, 100) <= def.getFell()) { - world.registerGameObject(new GameObject(object.getLocation(), 4, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), def.getRespawnTime() * 1000); - owner.setBusy(false); - } - else { - owner.setBusy(false); - if(tries > 0) { - handleWoodcutting(click,tries); + private void handleWoodcutting(final int click) { + int retries = (int) Math.ceil(owner.getMaxStat(8) / 10); + handleWoodcutting(click, retries); } - } - - } else { - owner.getActionSender().sendMessage("You slip and fail to hit the tree."); - owner.setBusy(false); - if(tries > 0) { - handleWoodcutting(click,tries); - } - } - } - }); - } - private void replaceGameObject(int newID, boolean open) { - world.registerGameObject(new GameObject(object.getLocation(), newID, object.getDirection(), object.getType())); - owner.getActionSender().sendSound(open ? "opendoor" : "closedoor"); - } - }); - } + private void handleWoodcutting(final int click, + int passedvalue) { + final int tries = --passedvalue; + final ObjectWoodcuttingDef def = EntityHandler + .getObjectWoodcuttingDef(object.getID()); + if (owner.isBusy()) { + return; + } + if (!owner.withinRange(object, 2)) + return; + if (def == null) { // This shoudln't happen + return; + } + if (owner.getCurStat(8) < def.getReqLevel()) { + owner.getActionSender().sendMessage( + "You need a woodcutting level of " + + def.getReqLevel() + + " to axe this tree."); + return; + } + int axeId = -1; + for (int a : Formulae.woodcuttingAxeIDs) { + if (owner.getInventory().countId(a) > 0) { + axeId = a; + break; + } + } + if (axeId < 0) { + owner.getActionSender().sendMessage( + "You need an axe to chop this tree down."); + return; + } + owner.setBusy(true); + Bubble bubble = new Bubble(owner, axeId); + for (Player p : owner.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + owner.getActionSender().sendMessage( + "You swing your " + + EntityHandler.getItemDef(axeId) + .getName() + " at the tree..."); + final int axeID = axeId; + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + if (Formulae.getLog(def, + owner.getCurStat(8), axeID)) { + InvItem log = new InvItem(def + .getLogId()); + owner.getInventory().add(log); + owner.getActionSender() + .sendMessage( + "You get some wood."); + owner.getActionSender() + .sendInventory(); + owner.incExp(8, def.getExp(), true); + owner.getActionSender().sendStat(8); + if (DataConversions.random(1, 100) <= def + .getFell()) { + world.registerGameObject(new GameObject( + object.getLocation(), + 4, + object.getDirection(), + object.getType())); + world.delayedSpawnObject( + object.getLoc(), + def.getRespawnTime() * 1000); + owner.setBusy(false); + } else { + owner.setBusy(false); + if (tries > 0) { + handleWoodcutting(click, + tries); + } + } + + } else { + owner.getActionSender() + .sendMessage( + "You slip and fail to hit the tree."); + owner.setBusy(false); + if (tries > 0) { + handleWoodcutting(click, tries); + } + } + } + }); + } + + private void replaceGameObject(int newID, boolean open) { + world.registerGameObject(new GameObject(object + .getLocation(), newID, object.getDirection(), + object.getType())); + owner.getActionSender().sendSound( + open ? "opendoor" : "closedoor"); + } + }); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java index cbe56ac..bcb4428 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PickupItem.java @@ -12,7 +12,6 @@ import org.moparscape.msc.gs.model.ActiveTile; import org.moparscape.msc.gs.model.ChatMessage; import org.moparscape.msc.gs.model.InvItem; import org.moparscape.msc.gs.model.Item; -import org.moparscape.msc.gs.model.Mob; import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.Point; @@ -20,160 +19,192 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; -import org.moparscape.msc.gs.tools.DataConversions; - public class PickupItem implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private Item getItem(int id, ActiveTile tile, Player player) { - if (tile != null) - for (Item i : tile.getItems()) { - if (i.getID() == id && i.visibleTo(player)) { - return i; - } - } - return null; + private Item getItem(int id, ActiveTile tile, Player player) { + if (tile != null) + for (Item i : tile.getItems()) { + if (i.getID() == id && i.visibleTo(player)) { + return i; + } + } + return null; - } - - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; } - player.resetAll(); - Point location = Point.location(p.readShort(), p.readShort()); - int id = p.readShort(); - final ActiveTile tile = world.getTile(location); - final Item item = getItem(id, tile, player); - - if (item == null) { - //player.setSuspiciousPlayer(true); - player.resetPath(); - return; - } - - if(!item.getDef().canTrade()) { - if(item.droppedby() != 0 && org.moparscape.msc.gs.tools.DataConversions.usernameToHash(player.getUsername()) != item.droppedby()) { - player.getActionSender().sendMessage("This item is non-tradable."); + + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); return; } - } - - if(player.isPMod() && !player.isMod()) - return; - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; + player.resetAll(); + Point location = Point.location(p.readShort(), p.readShort()); + int id = p.readShort(); + final ActiveTile tile = world.getTile(location); + final Item item = getItem(id, tile, player); + + if (item == null) { + // player.setSuspiciousPlayer(true); + player.resetPath(); + return; + } + + if (!item.getDef().canTrade()) { + if (item.droppedby() != 0 + && org.moparscape.msc.gs.tools.DataConversions + .usernameToHash(player.getUsername()) != item + .droppedby()) { + player.getActionSender().sendMessage( + "This item is non-tradable."); + return; + } + } + + if (player.isPMod() && !player.isMod()) + return; + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + + player.setStatus(Action.TAKING_GITEM); + Instance.getDelayedEventHandler().add( + new WalkToPointEvent(player, location, 0, true) { + public void arrived() { + if (owner.isBusy() || owner.isRanging() + || !tile.hasItem(item) || !owner.nextTo(item) + || owner.getStatus() != Action.TAKING_GITEM) { + return; + } + + if (item.getID() == 23) { + owner.getActionSender().sendMessage( + "I can't pick it up!"); + owner.getActionSender().sendMessage( + "I need a pot to hold it in."); + return; + } + + int[] Rares = { 576, 577, 578, 579, 580, 581, 828, 831, + 832, 1278, 593, 594, 795 }; + boolean pickedUpRare = false; + if (item.getAmount() > 99999) + pickedUpRare = true; + + for (int i = 0; i < Rares.length; i++) { + if (item.getID() == Rares[i]) { + pickedUpRare = true; + break; + } + } + owner.resetAll(); + InvItem invItem = new InvItem(item.getID(), item + .getAmount()); + if (!owner.getInventory().canHold(invItem)) { + owner.getActionSender() + .sendMessage( + "You cannot pickup this item, your inventory is full!"); + return; + } + try { + if (item.getID() == 59 && item.getX() == 106 + && item.getY() == 1476) { + Npc n = world.getNpc(37, 103, 107, 1476, 1479); + + if (n != null && !n.inCombat()) { + owner.informOfNpcMessage(new ChatMessage(n, + "Nobody steals from this gang!", + owner)); + fight(owner, n); + } + } else if (item.getID() == 501 + && item.getX() == 333 && item.getY() == 434) { + Npc zam = world.getNpc(140, 328, 333, 433, 438, + true); + if (zam != null && !zam.inCombat()) { + owner.informOfNpcMessage(new ChatMessage( + zam, "a curse be upon you", owner)); + for (int i = 0; i < 3; i++) { + int stat = owner.getCurStat(i); + if (stat < 3) + owner.setCurStat(i, 0); + else + owner.setCurStat(i, stat - 3); + } + owner.getActionSender().sendStats(); + fight(owner, zam); + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (pickedUpRare) { + // Code goes here if they picked up some BS items. + MiscPacketBuilder loginServer = Instance + .getServer().getLoginConnector() + .getActionSender(); + final long droppedby = item.droppedby(); + final long playerLong = org.moparscape.msc.gs.tools.DataConversions + .usernameToHash(owner.getUsername()); + loginServer.tradeLog(droppedby, playerLong, + item.getID(), item.getAmount(), + owner.getX(), owner.getY(), 3); + } + world.addEntryToSnapshots(new Activity(owner + .getUsername(), owner.getUsername() + + " picked up an item " + + item.getDef().getName() + " (" + item.getID() + + ") amount: " + item.getAmount() + " at: " + + owner.getX() + "/" + owner.getY() + "|" + + item.getX() + "/" + item.getY())); + if (item.getAmount() > 10000000 + || Formulae.isRareItem(item.getID())) + DBConnection.getReport().submitDupeData( + owner.getUsername(), + owner.getUsernameHash()); + + world.unregisterItem(item); + owner.getActionSender().sendSound("takeobject"); + owner.getInventory().add(invItem); + owner.getActionSender().sendInventory(); + } + }); } - player.setStatus(Action.TAKING_GITEM); - Instance.getDelayedEventHandler().add(new WalkToPointEvent(player, location, 0, true) { - public void arrived() { - if (owner.isBusy() || owner.isRanging() || !tile.hasItem(item) || !owner.nextTo(item) || owner.getStatus() != Action.TAKING_GITEM) { - return; - } - - if (item.getID() == 23) { - owner.getActionSender().sendMessage("I can't pick it up!"); - owner.getActionSender().sendMessage("I need a pot to hold it in."); - return; - } - - int[] Rares = { 576, 577, 578, 579, 580, 581, 828, 831, 832, 1278, 593, 594, 795 }; - boolean pickedUpRare = false; - if (item.getAmount() > 99999) - pickedUpRare = true; - - for (int i = 0; i < Rares.length; i++) { - if (item.getID() == Rares[i]) { - pickedUpRare = true; - break; - } - } + void fight(Player owner, Npc n) { + n.resetPath(); + owner.resetPath(); owner.resetAll(); - InvItem invItem = new InvItem(item.getID(), item.getAmount()); - if (!owner.getInventory().canHold(invItem)) { - owner.getActionSender().sendMessage("You cannot pickup this item, your inventory is full!"); - return; - } - try { - if (item.getID() == 59 && item.getX() == 106 && item.getY() == 1476) { - Npc n = world.getNpc(37, 103, 107, 1476, 1479); + owner.setStatus(Action.FIGHTING_MOB); + owner.getActionSender().sendSound("underattack"); + owner.getActionSender().sendMessage("You are under attack!"); - if (n != null && !n.inCombat()) { - owner.informOfNpcMessage(new ChatMessage(n, "Nobody steals from this gang!", owner)); - fight(owner, n); - } - } else if (item.getID() == 501 && item.getX() == 333 && item.getY() == 434) { - Npc zam = world.getNpc(140, 328, 333, 433, 438, true); - if (zam != null && !zam.inCombat()) { - owner.informOfNpcMessage(new ChatMessage(zam, "a curse be upon you", owner)); - for (int i = 0; i < 3; i++) { - int stat = owner.getCurStat(i); - if (stat < 3) - owner.setCurStat(i, 0); - else - owner.setCurStat(i, stat - 3); - } - owner.getActionSender().sendStats(); - fight(owner, zam); - return; - } - } - } catch (Exception e) { - e.printStackTrace(); + n.setLocation(owner.getLocation(), true); + for (Player p : n.getViewArea().getPlayersInView()) { + p.removeWatchedNpc(n); } - if (pickedUpRare) { - // Code goes here if they picked up some BS items. - MiscPacketBuilder loginServer = Instance.getServer().getLoginConnector().getActionSender(); - final long droppedby = item.droppedby(); - final long playerLong = org.moparscape.msc.gs.tools.DataConversions.usernameToHash(owner.getUsername()); - loginServer.tradeLog(droppedby, playerLong, item.getID(), item.getAmount(), owner.getX(), owner.getY(), 3); - } - world.addEntryToSnapshots(new Activity(owner.getUsername(),owner.getUsername() + " picked up an item "+item.getDef().getName()+" (" + item.getID() + ") amount: " + item.getAmount() + " at: " + owner.getX() + "/" + owner.getY() + "|" + item.getX() + "/" + item.getY())); - if(item.getAmount() > 10000000 || Formulae.isRareItem(item.getID())) - DBConnection.getReport().submitDupeData(owner.getUsername(),owner.getUsernameHash()); - - world.unregisterItem(item); - owner.getActionSender().sendSound("takeobject"); - owner.getInventory().add(invItem); - owner.getActionSender().sendInventory(); - } - }); - } + owner.setBusy(true); + owner.setSprite(9); + owner.setOpponent(n); + owner.setCombatTimer(); - void fight(Player owner, Npc n) { - n.resetPath(); - owner.resetPath(); - owner.resetAll(); - owner.setStatus(Action.FIGHTING_MOB); - owner.getActionSender().sendSound("underattack"); - owner.getActionSender().sendMessage("You are under attack!"); - - n.setLocation(owner.getLocation(), true); - for (Player p : n.getViewArea().getPlayersInView()) { - p.removeWatchedNpc(n); + n.setBusy(true); + n.setSprite(8); + n.setOpponent(owner); + n.setCombatTimer(); + FightEvent fighting = new FightEvent(owner, n, true); + fighting.setLastRun(0); + Instance.getDelayedEventHandler().add(fighting); } - owner.setBusy(true); - owner.setSprite(9); - owner.setOpponent(n); - owner.setCombatTimer(); - - n.setBusy(true); - n.setSprite(8); - n.setOpponent(owner); - n.setCombatTimer(); - FightEvent fighting = new FightEvent(owner, n, true); - fighting.setLastRun(0); - Instance.getDelayedEventHandler().add(fighting); - } - } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/Ping.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/Ping.java index 53484c9..dab7bd2 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/Ping.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/Ping.java @@ -6,18 +6,17 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class Ping implements PacketHandler { - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (p.getLength() > 0) { - byte b = p.readByte(); - if (b == 1) { // 1 is for SCAR. - if (player.sessionFlags < 1) { - Logger.println(player.getUsername() + " is using SCAR!"); - player.sessionFlags++; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (p.getLength() > 0) { + byte b = p.readByte(); + if (b == 1) { // 1 is for SCAR. + if (player.getSessionFlags() < 1) { + Logger.println(player.getUsername() + " is using SCAR!"); + player.setSessionFlags(player.getSessionFlags() + 1); + } + } } - } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceIDHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceIDHandler.java index 4f86145..7eca041 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceIDHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceIDHandler.java @@ -7,23 +7,22 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class PlayerAppearanceIDHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - int mobCount = p.readShort(); - int[] indicies = new int[mobCount]; - int[] appearanceIDs = new int[mobCount]; - for (int x = 0; x < mobCount; x++) { - indicies[x] = p.readShort(); - appearanceIDs[x] = p.readShort(); + public void handlePacket(Packet p, IoSession session) throws Exception { + int mobCount = p.readShort(); + int[] indicies = new int[mobCount]; + int[] appearanceIDs = new int[mobCount]; + for (int x = 0; x < mobCount; x++) { + indicies[x] = p.readShort(); + appearanceIDs[x] = p.readShort(); + } + Player player = (Player) session.getAttachment(); + player.addPlayersAppearanceIDs(indicies, appearanceIDs); } - Player player = (Player) session.getAttachment(); - player.addPlayersAppearanceIDs(indicies, appearanceIDs); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceUpdater.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceUpdater.java index fbbfc67..b15de07 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceUpdater.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerAppearanceUpdater.java @@ -10,65 +10,69 @@ import org.moparscape.msc.gs.model.PlayerAppearance; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class PlayerAppearanceUpdater implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (!player.isChangingAppearance()) { - player.setSuspiciousPlayer(true); - return; - } - player.setChangingAppearance(false); - - byte headGender = p.readByte(); - byte headType = p.readByte(); - byte bodyGender = p.readByte(); - - p.readByte(); // wtf is this? - - int hairColour = (int) p.readByte(); - int topColour = (int) p.readByte(); - int trouserColour = (int) p.readByte(); - int skinColour = (int) p.readByte(); - - int headSprite = headType + 1; - int bodySprite = bodyGender + 1; - - PlayerAppearance appearance = new PlayerAppearance(hairColour, topColour, trouserColour, skinColour, headSprite, bodySprite); - if (!appearance.isValid()) { - player.setSuspiciousPlayer(true); - return; - } - - player.setMale(headGender == 1); - - if (player.isMale()) { - Inventory inv = player.getInventory(); - for (int slot = 0; slot < inv.size(); slot++) { - InvItem i = inv.get(slot); - if (i.isWieldable() && i.getWieldableDef().getWieldPos() == 1 && i.isWielded() && i.getWieldableDef().femaleOnly()) { - i.setWield(false); - player.updateWornItems(i.getWieldableDef().getWieldPos(), player.getPlayerAppearance().getSprite(i.getWieldableDef().getWieldPos())); - player.getActionSender().sendUpdateItem(slot); - break; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (!player.isChangingAppearance()) { + player.setSuspiciousPlayer(true); + return; } - } - } + player.setChangingAppearance(false); - int[] oldWorn = player.getWornItems(); - int[] oldAppearance = player.getPlayerAppearance().getSprites(); - player.setAppearance(appearance); - int[] newAppearance = player.getPlayerAppearance().getSprites(); - for (int i = 0; i < 12; i++) { - if (oldWorn[i] == oldAppearance[i]) { - player.updateWornItems(i, newAppearance[i]); - } + byte headGender = p.readByte(); + byte headType = p.readByte(); + byte bodyGender = p.readByte(); + + p.readByte(); // wtf is this? + + int hairColour = (int) p.readByte(); + int topColour = (int) p.readByte(); + int trouserColour = (int) p.readByte(); + int skinColour = (int) p.readByte(); + + int headSprite = headType + 1; + int bodySprite = bodyGender + 1; + + PlayerAppearance appearance = new PlayerAppearance(hairColour, + topColour, trouserColour, skinColour, headSprite, bodySprite); + if (!appearance.isValid()) { + player.setSuspiciousPlayer(true); + return; + } + + player.setMale(headGender == 1); + + if (player.isMale()) { + Inventory inv = player.getInventory(); + for (int slot = 0; slot < inv.size(); slot++) { + InvItem i = inv.get(slot); + if (i.isWieldable() && i.getWieldableDef().getWieldPos() == 1 + && i.isWielded() && i.getWieldableDef().femaleOnly()) { + i.setWield(false); + player.updateWornItems( + i.getWieldableDef().getWieldPos(), + player.getPlayerAppearance().getSprite( + i.getWieldableDef().getWieldPos())); + player.getActionSender().sendUpdateItem(slot); + break; + } + } + } + + int[] oldWorn = player.getWornItems(); + int[] oldAppearance = player.getPlayerAppearance().getSprites(); + player.setAppearance(appearance); + int[] newAppearance = player.getPlayerAppearance().getSprites(); + for (int i = 0; i < 12; i++) { + if (oldWorn[i] == oldAppearance[i]) { + player.updateWornItems(i, newAppearance[i]); + } + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogin.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogin.java index d9d249a..00b0c1a 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogin.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogin.java @@ -13,7 +13,6 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; import org.moparscape.msc.gs.util.RSA; - public class PlayerLogin implements PacketHandler { /** @@ -22,45 +21,43 @@ public class PlayerLogin implements PacketHandler { public static final World world = Instance.getWorld(); public void handlePacket(Packet p1, IoSession session) throws Exception { - + Player player = (Player) session.getAttachment(); - final String ip = ((InetSocketAddress) session.getRemoteAddress()).getAddress().toString().replaceAll("/", ""); - + final String ip = ((InetSocketAddress) session.getRemoteAddress()) + .getAddress().toString().replaceAll("/", ""); + byte loginCode; try { - + byte[] data = RSA.decrypt(p1.getData()); Packet p = new Packet(session, data); - + boolean reconnecting = (p.readByte() == 1); int clientVersion = p.readInt(); - - - if(Config.SERVER_VERSION != clientVersion) { - Logger.println("ip: " + ip + " | clientversion: " + clientVersion + " : " + Config.SERVER_VERSION); + + if (Config.SERVER_VERSION != clientVersion) { + Logger.println("ip: " + ip + " | clientversion: " + + clientVersion + " : " + Config.SERVER_VERSION); } - + int[] sessionKeys = new int[4]; for (int key = 0; key < sessionKeys.length; key++) { sessionKeys[key] = p.readInt(); } String username = ""; String password = ""; - + username = p.readString(20).trim(); password = p.readString(20).trim(); - + if (world.countPlayers() >= Config.MAX_PLAYERS) { loginCode = 10; - } - else if (clientVersion < Config.SERVER_VERSION) { + } else if (clientVersion < Config.SERVER_VERSION) { loginCode = 4; - } - else if (!player.setSessionKeys(sessionKeys)) { + } else if (!player.setSessionKeys(sessionKeys)) { loginCode = 5; - } - else { + } else { player.load(username, password, 0, reconnecting); if (clientVersion < Config.SERVER_VERSION) { player.clientWarn(true); @@ -72,7 +69,7 @@ public class PlayerLogin implements PacketHandler { e.printStackTrace(); loginCode = 4; } - + RSCPacketBuilder pb = new RSCPacketBuilder(); pb.setBare(true); pb.addByte((byte) loginCode); diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogout.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogout.java index d7c9991..9222288 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogout.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogout.java @@ -6,13 +6,12 @@ import org.moparscape.msc.gs.connection.Packet; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class PlayerLogout implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - } + public void handlePacket(Packet p, IoSession session) throws Exception { + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogoutRequest.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogoutRequest.java index 40f4295..1ce0d1f 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogoutRequest.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PlayerLogoutRequest.java @@ -7,20 +7,18 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class PlayerLogoutRequest implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { + public void handlePacket(Packet p, IoSession session) throws Exception { Player player = (Player) session.getAttachment(); if (player.canLogout()) { player.destroy(true, true); - } - else { - player.getActionSender().sendCantLogout(); + } else { + player.getActionSender().sendCantLogout(); } - } + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PrayerHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PrayerHandler.java index a5a6ede..83ab2a5 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PrayerHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PrayerHandler.java @@ -10,93 +10,97 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class PrayerHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private boolean activatePrayer(Player player, int prayerID) { - if (!player.isPrayerActivated(prayerID)) { - if (prayerID == 11) { - deactivatePrayer(player, 5); - deactivatePrayer(player, 2); - } else if (prayerID == 5) { - deactivatePrayer(player, 2); - deactivatePrayer(player, 11); - } else if (prayerID == 2) { - deactivatePrayer(player, 5); - deactivatePrayer(player, 11); - } else if (prayerID == 10) { - deactivatePrayer(player, 4); - deactivatePrayer(player, 1); - } else if (prayerID == 4) { - deactivatePrayer(player, 10); - deactivatePrayer(player, 1); - } else if (prayerID == 1) { - deactivatePrayer(player, 10); - deactivatePrayer(player, 4); - } else if (prayerID == 9) { - deactivatePrayer(player, 3); - deactivatePrayer(player, 0); - } else if (prayerID == 3) { - deactivatePrayer(player, 9); - deactivatePrayer(player, 0); - } else if (prayerID == 0) { - deactivatePrayer(player, 9); - deactivatePrayer(player, 3); - } - player.setPrayer(prayerID, true); - player.addPrayerDrain(prayerID); - return true; + private boolean activatePrayer(Player player, int prayerID) { + if (!player.isPrayerActivated(prayerID)) { + if (prayerID == 11) { + deactivatePrayer(player, 5); + deactivatePrayer(player, 2); + } else if (prayerID == 5) { + deactivatePrayer(player, 2); + deactivatePrayer(player, 11); + } else if (prayerID == 2) { + deactivatePrayer(player, 5); + deactivatePrayer(player, 11); + } else if (prayerID == 10) { + deactivatePrayer(player, 4); + deactivatePrayer(player, 1); + } else if (prayerID == 4) { + deactivatePrayer(player, 10); + deactivatePrayer(player, 1); + } else if (prayerID == 1) { + deactivatePrayer(player, 10); + deactivatePrayer(player, 4); + } else if (prayerID == 9) { + deactivatePrayer(player, 3); + deactivatePrayer(player, 0); + } else if (prayerID == 3) { + deactivatePrayer(player, 9); + deactivatePrayer(player, 0); + } else if (prayerID == 0) { + deactivatePrayer(player, 9); + deactivatePrayer(player, 3); + } + player.setPrayer(prayerID, true); + player.addPrayerDrain(prayerID); + return true; + } + return false; } - return false; - } - private boolean deactivatePrayer(Player player, int prayerID) { - if (player.isPrayerActivated(prayerID)) { - player.setPrayer(prayerID, false); - player.removePrayerDrain(prayerID); - return true; + private boolean deactivatePrayer(Player player, int prayerID) { + if (player.isPrayerActivated(prayerID)) { + player.setPrayer(prayerID, false); + player.removePrayerDrain(prayerID); + return true; + } + return false; } - return false; - } - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - int prayerID = (int) p.readByte(); - if (prayerID < 0 || prayerID >= 14) { - player.setSuspiciousPlayer(true); - player.getActionSender().sendPrayers(); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + int prayerID = (int) p.readByte(); + if (prayerID < 0 || prayerID >= 14) { + player.setSuspiciousPlayer(true); + player.getActionSender().sendPrayers(); + return; + } + if (player.isDueling() && player.getDuelSetting(2)) { + player.getActionSender().sendMessage( + "Prayer is disabled in this duel"); + player.getActionSender().sendPrayers(); + return; + } + PrayerDef prayer = EntityHandler.getPrayerDef(prayerID); + switch (pID) { + case 56: + if (player.getMaxStat(5) < prayer.getReqLevel()) { + player.setSuspiciousPlayer(true); + player.getActionSender() + .sendMessage( + "Your prayer ability is not high enough to use this prayer"); + break; + } + if (player.getCurStat(5) <= 0) { + player.setPrayer(prayerID, false); + player.getActionSender() + .sendMessage( + "You have run out of prayer points. Return to a church to recharge"); + break; + } + activatePrayer(player, prayerID); + break; + case 248: + deactivatePrayer(player, prayerID); + break; + } + player.getActionSender().sendPrayers(); } - if (player.isDueling() && player.getDuelSetting(2)) { - player.getActionSender().sendMessage("Prayer is disabled in this duel"); - player.getActionSender().sendPrayers(); - return; - } - PrayerDef prayer = EntityHandler.getPrayerDef(prayerID); - switch (pID) { - case 56: - if (player.getMaxStat(5) < prayer.getReqLevel()) { - player.setSuspiciousPlayer(true); - player.getActionSender().sendMessage("Your prayer ability is not high enough to use this prayer"); - break; - } - if (player.getCurStat(5) <= 0) { - player.setPrayer(prayerID, false); - player.getActionSender().sendMessage("You have run out of prayer points. Return to a church to recharge"); - break; - } - activatePrayer(player, prayerID); - break; - case 248: - deactivatePrayer(player, prayerID); - break; - } - player.getActionSender().sendPrayers(); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/PrivacySettingHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/PrivacySettingHandler.java index cb866fb..ce23b30 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/PrivacySettingHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/PrivacySettingHandler.java @@ -9,41 +9,41 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class PrivacySettingHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private PrivacySettingUpdatePacketBuilder builder = new PrivacySettingUpdatePacketBuilder(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private PrivacySettingUpdatePacketBuilder builder = new PrivacySettingUpdatePacketBuilder(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); - boolean[] newSettings = new boolean[4]; - for (int i = 0; i < 4; i++) { - newSettings[i] = p.readByte() == 1; + boolean[] newSettings = new boolean[4]; + for (int i = 0; i < 4; i++) { + newSettings[i] = p.readByte() == 1; + } + + builder.setPlayer(player); + for (int i = 0; i < 4; i++) { + builder.setIndex(i); + if (newSettings[i] && !player.getPrivacySetting(i)) { + builder.setOn(true); + } else if (!newSettings[i] && player.getPrivacySetting(i)) { + builder.setOn(false); + } else { + continue; + } + LSPacket packet = builder.getPacket(); + if (packet != null) { + Instance.getServer().getLoginConnector().getSession() + .write(packet); + } + } + + for (int i = 0; i < 4; i++) { + player.setPrivacySetting(i, newSettings[i]); + } } - builder.setPlayer(player); - for (int i = 0; i < 4; i++) { - builder.setIndex(i); - if (newSettings[i] && !player.getPrivacySetting(i)) { - builder.setOn(true); - } else if (!newSettings[i] && player.getPrivacySetting(i)) { - builder.setOn(false); - } else { - continue; - } - LSPacket packet = builder.getPacket(); - if (packet != null) { - Instance.getServer().getLoginConnector().getSession().write(packet); - } - } - - for (int i = 0; i < 4; i++) { - player.setPrivacySetting(i, newSettings[i]); - } - } - } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/ReportHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/ReportHandler.java index 6442bda..af985b0 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/ReportHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/ReportHandler.java @@ -4,14 +4,12 @@ import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.alert.AlertHandler; import org.moparscape.msc.gs.connection.Packet; -import org.moparscape.msc.gs.db.ReportHandlerQueries; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.tools.DataConversions; - public class ReportHandler implements PacketHandler { /** @@ -22,7 +20,8 @@ public class ReportHandler implements PacketHandler { public void handlePacket(Packet p, IoSession session) throws Exception { Player player = (Player) session.getAttachment(); if (!player.canReport()) { - player.getActionSender().sendMessage("You may only send one abuse report per minute."); + player.getActionSender().sendMessage( + "You may only send one abuse report per minute."); return; } long temp = -121; @@ -33,16 +32,25 @@ public class ReportHandler implements PacketHandler { } catch (Exception e) { return; } finally { - if(temp == player.getUsernameHash()) { - player.getActionSender().sendMessage("You can't report yourself!"); + if (temp == player.getUsernameHash()) { + player.getActionSender().sendMessage( + "You can't report yourself!"); return; } - AlertHandler.sendAlert(player.getUsername() + " sent a repot about: " + DataConversions.hashToUsername(temp), 1); - //Instance.getServer().getLoginConnector().getActionSender().reportUser(player.getUsernameHash(), temp, b); - Instance.getReport().submitRepot(player.getUsernameHash(), temp, b, player); + AlertHandler.sendAlert( + player.getUsername() + " sent a repot about: " + + DataConversions.hashToUsername(temp), 1); + // Instance.getServer().getLoginConnector().getActionSender().reportUser(player.getUsernameHash(), + // temp, b); + Instance.getReport().submitRepot(player.getUsernameHash(), temp, b, + player); player.setLastReport(); - world.addEntryToSnapshots(new Activity(player.getUsername(),player.getUsername() + " sent a repot about: " + DataConversions.hashToUsername(temp))); - player.getActionSender().sendMessage("Your report has been received, thank you."); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " sent a repot about: " + + DataConversions.hashToUsername(temp))); + player.getActionSender().sendMessage( + "Your report has been received, thank you."); } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/SessionRequest.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/SessionRequest.java index a28e725..0ef8d58 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/SessionRequest.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/SessionRequest.java @@ -10,7 +10,6 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class SessionRequest implements PacketHandler { /** @@ -20,7 +19,7 @@ public class SessionRequest implements PacketHandler { public void handlePacket(Packet p, IoSession session) throws Exception { Player player = (Player) session.getAttachment(); - if(player.isInitialized()) { + if (player.isInitialized()) { Logger.println("[WARNING] SessionRequest for already Initialized player!"); return; } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/ShopHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/ShopHandler.java index 90f31c9..e25b67c 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/ShopHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/ShopHandler.java @@ -14,114 +14,148 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class ShopHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy()) { - player.resetShop(); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy()) { + player.resetShop(); + return; + } + final Shop shop = player.getShop(); + if (shop == null) { + player.setSuspiciousPlayer(true); + player.resetShop(); + return; + } + int value; + InvItem item; + switch (pID) { + case 253: // Close shop + player.resetShop(); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " closed shop window at: " + + player.getX() + + "/" + player.getY())); + + break; + case 128: // Buy item + + Short s = p.readShort(); + item = new InvItem(s, 1); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " tried to buy item (" + + s + + "): " + + player.getX() + "/" + player.getY())); + + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + value = p.readInt(); + if (value < item.getDef().basePrice) { + Logger.println("[SHOPDUPE] " + player.getUsername() + + " tried to buy " + item.getDef().name + " for " + + value); + return; + } + if (shop.countId(item.getID()) < 1) + return; + if (player.getInventory().countId(10) < value) { + player.getActionSender().sendMessage( + "You don't have enough money to buy that!"); + return; + } + if ((Inventory.MAX_SIZE - player.getInventory().size()) + + player.getInventory().getFreedSlots( + new InvItem(10, value)) < player.getInventory() + .getRequiredSlots(item)) { + player.getActionSender().sendMessage( + "You don't have room for that in your inventory"); + return; + } + int itemprice = Formulae.getPrice( + shop.getItems() + .get(Formulae.getItemPos(shop, item.getID())), + shop, true); + int sellprice = Formulae.getPrice( + shop.getItems() + .get(Formulae.getItemPos(shop, item.getID())), + shop, false); + if (itemprice == 0) + return; + + if (sellprice >= itemprice) + return; + if (player.getInventory().remove(10, itemprice) > -1) { + shop.remove(item); + player.getInventory().add(item); + player.getActionSender().sendSound("coins"); + player.getActionSender().sendInventory(); + shop.updatePlayers(); + } + break; + case 255: // Sell item + Short s1 = p.readShort(); + item = new InvItem(s1, 1); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " tried to sell item (" + + s1 + + "): " + + player.getX() + "/" + player.getY())); + + value = p.readInt(); + if (!item.getDef().canTrade()) { + player.getActionSender().sendMessage( + "You cannot sell this item."); + return; + } + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; + } + if (player.getInventory().countId(item.getID()) < 1) { + return; + } + if (!shop.shouldStock(item.getID())) { + return; + } + if (!shop.canHold(item)) { + player.getActionSender().sendMessage( + "The shop is currently full!"); + return; + } + int itempricez; + if (Formulae.getItemPos(shop, item.getID()) == -1) { + itempricez = Formulae.getPrice(new InvItem(item.getID(), 0), + shop, false); + } else { + itempricez = Formulae.getPrice( + shop.getItems().get( + Formulae.getItemPos(shop, item.getID())), shop, + false); + } + if (itempricez > 300000) + return; + if (player.getInventory().remove(item) > -1) { + player.getInventory().add(new InvItem(10, itempricez)); + shop.add(item); + player.getActionSender().sendSound("coins"); + player.getActionSender().sendInventory(); + shop.updatePlayers(); + } + break; + } } - final Shop shop = player.getShop(); - if (shop == null) { - player.setSuspiciousPlayer(true); - player.resetShop(); - return; - } - int value; - InvItem item; - switch (pID) { - case 253: // Close shop - player.resetShop(); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " closed shop window at: " + player.getX() + "/" + player.getY())); - - break; - case 128: // Buy item - - Short s = p.readShort(); - item = new InvItem(s, 1); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " tried to buy item ("+s+"): " + player.getX() + "/" + player.getY())); - - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - value = p.readInt(); - if(value < item.getDef().basePrice) { - Logger.println("[SHOPDUPE] " + player.getUsername() + " tried to buy " + item.getDef().name + " for " + value); - return; - } - if (shop.countId(item.getID()) < 1) - return; - if (player.getInventory().countId(10) < value) { - player.getActionSender().sendMessage("You don't have enough money to buy that!"); - return; - } - if ((Inventory.MAX_SIZE - player.getInventory().size()) + player.getInventory().getFreedSlots(new InvItem(10, value)) < player.getInventory().getRequiredSlots(item)) { - player.getActionSender().sendMessage("You don't have room for that in your inventory"); - return; - } - int itemprice = Formulae.getPrice(shop.getItems().get(Formulae.getItemPos(shop, item.getID())), shop, true); - int sellprice = Formulae.getPrice(shop.getItems().get(Formulae.getItemPos(shop, item.getID())), shop, false); - if (itemprice == 0) - return; - - if (sellprice >= itemprice) - return; - if (player.getInventory().remove(10, itemprice) > -1) { - shop.remove(item); - player.getInventory().add(item); - player.getActionSender().sendSound("coins"); - player.getActionSender().sendInventory(); - shop.updatePlayers(); - } - break; - case 255: // Sell item - Short s1 = p.readShort(); - item = new InvItem(s1, 1); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " tried to sell item ("+s1+"): " + player.getX() + "/" + player.getY())); - - value = p.readInt(); - if(!item.getDef().canTrade()) { - player.getActionSender().sendMessage("You cannot sell this item."); - return; - } - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - if (player.getInventory().countId(item.getID()) < 1) { - return; - } - if (!shop.shouldStock(item.getID())) { - return; - } - if (!shop.canHold(item)) { - player.getActionSender().sendMessage("The shop is currently full!"); - return; - } - int itempricez; - if (Formulae.getItemPos(shop, item.getID()) == -1) { - itempricez = Formulae.getPrice(new InvItem(item.getID(), 0), shop, false); - } else { - itempricez = Formulae.getPrice(shop.getItems().get(Formulae.getItemPos(shop, item.getID())), shop, false); - } - if (itempricez > 300000) - return; - if (player.getInventory().remove(item) > -1) { - player.getInventory().add(new InvItem(10, itempricez)); - shop.add(item); - player.getActionSender().sendSound("coins"); - player.getActionSender().sendInventory(); - shop.updatePlayers(); - } - break; - } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/Sleepword.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/Sleepword.java index 3f60633..b9dcf3e 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/Sleepword.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/Sleepword.java @@ -16,50 +16,57 @@ import org.moparscape.msc.gs.model.snapshot.Activity; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class Sleepword implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - long now = GameEngine.getTime(); + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + // int pID = ((RSCPacket) p).getID(); + long now = GameEngine.getTime(); - try { - String sleepword_result = ((RSCPacket) p).readString().trim(); - if (GameEngine.getTime() - player.getLastSleepTime() < 1000) - return; + try { + String sleepword_result = ((RSCPacket) p).readString().trim(); + if (GameEngine.getTime() - player.getLastSleepTime() < 1000) + return; - if (player.getWrongWords() >= 10) { - player.getActionSender().sendLogout(); - Logger.println(player.getWrongWords() + " incorrect sleep words from Player: " + player.getUsername()); - player.destroy(false); - return; - } + if (player.getWrongWords() >= 10) { + player.getActionSender().sendLogout(); + Logger.println(player.getWrongWords() + + " incorrect sleep words from Player: " + + player.getUsername()); + player.destroy(false); + return; + } - if (sleepword_result.equalsIgnoreCase("-null-")) { - player.getActionSender().sendEnterSleep(); - player.setLastSleepTime(now); - } else { - if (!player.isSleeping) { Logger.println(player.getUsername() + " tried waking up while not sleeping, probable bug abuse."); return; } - if (sleepword_result.equalsIgnoreCase(player.getSleepword())) - player.getActionSender().sendWakeUp(true); - else { - world.addEntryToSnapshots(new Activity(player.getUsername(),player.getUsername() + " failed a sleepword")); - player.getActionSender().sendIncorrectSleepword(); - player.getActionSender().sendEnterSleep(); - player.setLastSleepTime(now); - player.setWrongWords(); + if (sleepword_result.equalsIgnoreCase("-null-")) { + player.getActionSender().sendEnterSleep(); + player.setLastSleepTime(now); + } else { + if (!player.isSleeping()) { + Logger.println(player.getUsername() + + " tried waking up while not sleeping, probable bug abuse."); + return; + } + if (sleepword_result.equalsIgnoreCase(player.getSleepword())) + player.getActionSender().sendWakeUp(true); + else { + world.addEntryToSnapshots(new Activity( + player.getUsername(), player.getUsername() + + " failed a sleepword")); + player.getActionSender().sendIncorrectSleepword(); + player.getActionSender().sendEnterSleep(); + player.setLastSleepTime(now); + player.setWrongWords(); + } + } + } catch (Exception e) { + if (player.isSleeping()) { + player.getActionSender().sendIncorrectSleepword(); + player.getActionSender().sendEnterSleep(); + } } - } - } catch (Exception e) { - if (player.isSleeping) { - player.getActionSender().sendIncorrectSleepword(); - player.getActionSender().sendEnterSleep(); - } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/SpellHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/SpellHandler.java index e97ed1e..70bfd96 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/SpellHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/SpellHandler.java @@ -3,9 +3,9 @@ package org.moparscape.msc.gs.phandler.client; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; +import java.util.Map.Entry; import java.util.Random; import java.util.TreeMap; -import java.util.Map.Entry; import org.apache.mina.common.IoSession; import org.moparscape.msc.config.Config; @@ -133,7 +133,7 @@ public class SpellHandler implements PacketHandler { private Random r = new Random(); private void finalizeSpell(Player player, SpellDef spell) { - player.lastCast = GameEngine.getTime(); + player.setLastCast(GameEngine.getTime()); player.getActionSender().sendSound("spellok"); player.getActionSender().sendMessage("Cast spell successfully"); player.setCastTimer(); @@ -480,13 +480,13 @@ public class SpellHandler implements PacketHandler { if (affectedMob instanceof Player) { Player other = (Player) affectedMob; if (player.getLocation().inWilderness() - && GameEngine.getTime() - other.lastRun < 1000) { + && GameEngine.getTime() - other.getLastRun() < 1000) { player.resetPath(); return; } } if (player.getLocation().inWilderness() - && GameEngine.getTime() - player.lastRun < 3000) { + && GameEngine.getTime() - player.getLastRun() < 3000) { player.resetPath(); return; } @@ -683,7 +683,6 @@ public class SpellHandler implements PacketHandler { affectedMob.killedBy(owner, owner.isDueling()); if (owner instanceof Player && affectedMob instanceof Npc) { - Npc npc = (Npc) affectedMob; ((Npc) affectedMob).getSyndicate() .distributeExp((Npc) affectedMob); } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/StyleHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/StyleHandler.java index 702b7e6..b049bb1 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/StyleHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/StyleHandler.java @@ -7,21 +7,20 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class StyleHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int style = p.readByte(); - if (style < 0 || style > 3) { - player.setSuspiciousPlayer(true); - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int style = p.readByte(); + if (style < 0 || style > 3) { + player.setSuspiciousPlayer(true); + return; + } + player.setCombatStyle(style); } - player.setCombatStyle(style); - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/TalkToNpcHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/TalkToNpcHandler.java index ed5617e..bd08357 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/TalkToNpcHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/TalkToNpcHandler.java @@ -9,7 +9,6 @@ import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.connection.Packet; import org.moparscape.msc.gs.core.GameEngine; import org.moparscape.msc.gs.event.WalkToMobEvent; -import org.moparscape.msc.gs.model.ChatMessage; import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.Script; @@ -20,114 +19,152 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.util.Logger; - public class TalkToNpcHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - if (player.isBusy()) { - player.resetPath(); - return; - } - if (GameEngine.getTime() - player.lastNPCChat < 1500) - return; - player.setLastQuestMenuReply(-2); - player.lastNPCChat = GameEngine.getTime(); - player.resetAll(); - final Npc affectedNpc = world.getNpc(p.readShort()); - if (affectedNpc == null || !world.getQuestManager().isNpcVisible(affectedNpc, player)) { - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " talked to NPC ("+affectedNpc.getID()+") at: " + player.getX() + "/" + player.getY() + "|" + affectedNpc.getX() + "/" + affectedNpc.getY())); - - - player.setFollowing(affectedNpc); - player.setStatus(Action.TALKING_MOB); - Instance.getDelayedEventHandler().add(new WalkToMobEvent(player, affectedNpc, 1) { - public void arrived() { - owner.resetFollowing(); - owner.resetPath(); - if (owner.isBusy() || owner.isRanging() || !owner.nextTo(affectedNpc) || owner.getStatus() != Action.TALKING_MOB) { - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + if (player.isBusy()) { + player.resetPath(); + return; } - owner.resetAll(); - if (affectedNpc.isBusy()) { - owner.getActionSender().sendMessage(affectedNpc.getDef().getName() + " is currently busy."); - return; + if (GameEngine.getTime() - player.getLastNPCChat() < 1500) + return; + player.setLastQuestMenuReply(-2); + player.setLastNPCChat(GameEngine.getTime()); + player.resetAll(); + final Npc affectedNpc = world.getNpc(p.readShort()); + if (affectedNpc == null + || !World.getQuestManager().isNpcVisible(affectedNpc, player)) { + return; } - affectedNpc.resetPath(); - NpcHandler handler = world.getNpcHandler(affectedNpc.getID()); + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " talked to NPC (" + + affectedNpc.getID() + + ") at: " + + player.getX() + + "/" + + player.getY() + + "|" + + affectedNpc.getX() + "/" + affectedNpc.getY())); - if (Formulae.getDirection(owner, affectedNpc) != -1) { - affectedNpc.setSprite(Formulae.getDirection(owner, affectedNpc)); - owner.setSprite(Formulae.getDirection(affectedNpc, owner)); - } - if (handler != null) { - try { - handler.handleNpc(affectedNpc, owner); - } catch (Exception e) { - Logger.error("Exception with npc[" + affectedNpc.getIndex() + "] from " + owner.getUsername() + " [" + owner.getCurrentIP() + "]: " + e.getMessage()); - owner.getActionSender().sendLogout(); - owner.destroy(false); - } - } else { + player.setFollowing(affectedNpc); + player.setStatus(Action.TALKING_MOB); + Instance.getDelayedEventHandler().add( + new WalkToMobEvent(player, affectedNpc, 1) { + @SuppressWarnings("deprecation") + public void arrived() { + owner.resetFollowing(); + owner.resetPath(); + if (owner.isBusy() || owner.isRanging() + || !owner.nextTo(affectedNpc) + || owner.getStatus() != Action.TALKING_MOB) { + return; + } + owner.resetAll(); + if (affectedNpc.isBusy()) { + owner.getActionSender().sendMessage( + affectedNpc.getDef().getName() + + " is currently busy."); + return; + } + affectedNpc.resetPath(); + NpcHandler handler = world.getNpcHandler(affectedNpc + .getID()); - if (!world.getQuestManager().handleNpcTalk(affectedNpc, owner)) { - if (affectedNpc.getDef().isAttackable()) - owner.getActionSender().sendMessage("The " + affectedNpc.getDef().getName() + " doesn't appear interested in talking."); - else if (world.npcScripts.containsKey(affectedNpc.getID())) { - owner.setBusy(true); - affectedNpc.blockedBy(owner); - if (owner.interpreterThread != null) { - try { - owner.interpreterThread.stop(); - } catch (Exception e) { + if (Formulae.getDirection(owner, affectedNpc) != -1) { + affectedNpc.setSprite(Formulae.getDirection(owner, + affectedNpc)); + owner.setSprite(Formulae.getDirection(affectedNpc, + owner)); + } + if (handler != null) { + try { + handler.handleNpc(affectedNpc, owner); + } catch (Exception e) { + Logger.error("Exception with npc[" + + affectedNpc.getIndex() + "] from " + + owner.getUsername() + " [" + + owner.getCurrentIP() + "]: " + + e.getMessage()); + owner.getActionSender().sendLogout(); + owner.destroy(false); + } + } else { - } - } + if (!World.getQuestManager().handleNpcTalk( + affectedNpc, owner)) { + if (affectedNpc.getDef().isAttackable()) + owner.getActionSender() + .sendMessage( + "The " + + affectedNpc + .getDef() + .getName() + + " doesn't appear interested in talking."); + else if (world.npcScripts + .containsKey(affectedNpc.getID())) { + owner.setBusy(true); + affectedNpc.blockedBy(owner); + if (owner.getInterpreterThread() != null) { + try { + owner.getInterpreterThread().stop(); + } catch (Exception e) { - owner.interpreterThread = new Thread(new Runnable() { - public void run() { - try { - try { - new Script(owner, affectedNpc); - } catch (ConcurrentModificationException cme) { - Logger.println("CME (Ignore This): " + owner.getUsername()); - } catch(Exception e) { - + } + } + + owner.setInterpreterThread(new Thread( + new Runnable() { + public void run() { + try { + try { + new Script(owner, + affectedNpc); + } catch (ConcurrentModificationException cme) { + Logger.println("CME (Ignore This): " + + owner.getUsername()); + } catch (Exception e) { + + } + owner.setBusy(false); + + affectedNpc.unblock(); + } catch (Exception e) { + if (!(e instanceof InvocationTargetException)) { + e.printStackTrace(); + } + Logger.println(affectedNpc + .getID()); + affectedNpc.unblock(); + owner.setBusy(false); + } + } + })); + owner.getInterpreterThread().start(); + } else { + try { + NpcHandler hand = new org.moparscape.msc.gs.npchandler.OtherNPC(); + hand.handleNpc(affectedNpc, owner); + } catch (Exception e) { + Logger.error("Exception with npc[" + + affectedNpc.getIndex() + + "] from " + + owner.getUsername() + " [" + + owner.getCurrentIP() + "]: " + + e.getMessage()); + owner.getActionSender().sendLogout(); + owner.destroy(false); + } + } + } + + } } - owner.setBusy(false); - - affectedNpc.unblock(); - } catch (Exception e) { - if (!(e instanceof InvocationTargetException)) { - e.printStackTrace(); - } - Logger.println(affectedNpc.getID()); - affectedNpc.unblock(); - owner.setBusy(false); - } - } - }); - owner.interpreterThread.start(); - } else { - try { - NpcHandler hand = new org.moparscape.msc.gs.npchandler.OtherNPC(); - hand.handleNpc(affectedNpc, owner); - } catch (Exception e) { - Logger.error("Exception with npc[" + affectedNpc.getIndex() + "] from " + owner.getUsername() + " [" + owner.getCurrentIP() + "]: " + e.getMessage()); - owner.getActionSender().sendLogout(); - owner.destroy(false); - } - } - } - - } - } - }); - } + }); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/TradeHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/TradeHandler.java index 5ed258d..4067ef1 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/TradeHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/TradeHandler.java @@ -21,297 +21,389 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.tools.DataConversions; import org.moparscape.msc.gs.util.Logger; - public class TradeHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - private boolean busy(Player player) { - return player.isBusy() || player.isRanging() || player.accessingBank() || player.isDueling(); - } - - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - Player affectedPlayer; - - if (busy(player)) { - affectedPlayer = player.getWishToTrade(); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; + private boolean busy(Player player) { + return player.isBusy() || player.isRanging() || player.accessingBank() + || player.isDueling(); } - switch (pID) { - case 166: // Sending trade request - affectedPlayer = world.getPlayer(p.readShort()); - if (affectedPlayer == null) - return; - if (affectedPlayer.isTrading()) { - player.getActionSender().sendMessage("That person is already trading"); - return; - } - if (affectedPlayer == null || affectedPlayer.isDueling() || !player.withinRange(affectedPlayer, 8) || player.isTrading() || player.tradeDuelThrottling()) { - unsetOptions(player); - return; - } - if (player == null) { - Logger.println("Player is null affectedplayer is: " + affectedPlayer.getUsername()); - } - if (affectedPlayer == player) { - player.setSuspiciousPlayer(true); - Logger.println("Warning: " + player.getUsername() + " tried to trade to himself."); - unsetOptions(player); - return; - } - if (!new PathGenerator(player.getX(), player.getY(), affectedPlayer.getX(), affectedPlayer.getY()).isValid()) { - player.getActionSender().sendMessage("you can't reach this person"); - unsetOptions(player); - return; - } - if ((affectedPlayer.getPrivacySetting(2) && !affectedPlayer.isFriendsWith(player.getUsernameHash())) || affectedPlayer.isIgnoring(player.getUsernameHash())) { - player.getActionSender().sendMessage("This player has trade requests blocked."); - return; - } + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + Player affectedPlayer; - player.setWishToTrade(affectedPlayer); - player.getActionSender().sendMessage(affectedPlayer.isTrading() ? affectedPlayer.getUsername() + " is already in a trade" : "Sending trade request"); - affectedPlayer.getActionSender().sendMessage(player.getUsername() + " wishes to trade with you"); - - if (!player.isTrading() && affectedPlayer.getWishToTrade() != null && affectedPlayer.getWishToTrade().equals(player) && !affectedPlayer.isTrading()) { - player.setTrading(true); - player.resetPath(); - player.resetAllExceptTrading(); - affectedPlayer.setTrading(true); - affectedPlayer.resetPath(); - affectedPlayer.resetAllExceptTrading(); - - player.getActionSender().sendTradeWindowOpen(); - affectedPlayer.getActionSender().sendTradeWindowOpen(); - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " sent trade request " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); - - } - break; - case 211: // Trade accepted - affectedPlayer = player.getWishToTrade(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isTrading() || !affectedPlayer.isTrading()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - - player.setTradeOfferAccepted(true); - - player.getActionSender().sendTradeAcceptUpdate(); - affectedPlayer.getActionSender().sendTradeAcceptUpdate(); - - if (affectedPlayer.isTradeOfferAccepted()) { - player.getActionSender().sendTradeAccept(); - affectedPlayer.getActionSender().sendTradeAccept(); - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " accepted trade " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); - - break; - case 53: // Confirm accepted - affectedPlayer = player.getWishToTrade(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isTrading() || !affectedPlayer.isTrading() || !player.isTradeOfferAccepted() || !affectedPlayer.isTradeOfferAccepted()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - player.setTradeConfirmAccepted(true); - - if (affectedPlayer.isTradeConfirmAccepted()) { - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " finished trade " + affectedPlayer.getUsername() + " at: " + player.getX() + "/" + player.getY() + " | " + affectedPlayer.getX() + "/" + affectedPlayer.getY())); - - ArrayList myOffer = player.getTradeOffer(); - ArrayList theirOffer = affectedPlayer.getTradeOffer(); - - int myRequiredSlots = player.getInventory().getRequiredSlots(theirOffer); - int myAvailableSlots = (30 - player.getInventory().size()) + player.getInventory().getFreedSlots(myOffer); - - int theirRequiredSlots = affectedPlayer.getInventory().getRequiredSlots(myOffer); - int theirAvailableSlots = (30 - affectedPlayer.getInventory().size()) + affectedPlayer.getInventory().getFreedSlots(theirOffer); - - if (theirRequiredSlots > theirAvailableSlots) { - player.getActionSender().sendMessage("The other player does not have room to accept your items."); - affectedPlayer.getActionSender().sendMessage("You do not have room in your inventory to hold those items."); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - if (myRequiredSlots > myAvailableSlots) { - player.getActionSender().sendMessage("You do not have room in your inventory to hold those items."); - affectedPlayer.getActionSender().sendMessage("The other player does not have room to accept your items."); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - - for (InvItem item : myOffer) { - InvItem affectedItem = player.getInventory().get(item); - if (affectedItem == null) { - player.setSuspiciousPlayer(true); + if (busy(player)) { + affectedPlayer = player.getWishToTrade(); unsetOptions(player); unsetOptions(affectedPlayer); return; - } - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); + } + switch (pID) { + case 166: // Sending trade request + affectedPlayer = world.getPlayer(p.readShort()); + if (affectedPlayer == null) + return; + if (affectedPlayer.isTrading()) { + player.getActionSender().sendMessage( + "That person is already trading"); + return; + } + if (affectedPlayer == null || affectedPlayer.isDueling() + || !player.withinRange(affectedPlayer, 8) + || player.isTrading() || player.tradeDuelThrottling()) { + unsetOptions(player); + return; + } + if (affectedPlayer == player) { + player.setSuspiciousPlayer(true); + Logger.println("Warning: " + player.getUsername() + + " tried to trade to himself."); + unsetOptions(player); + return; + } + if (!new PathGenerator(player.getX(), player.getY(), + affectedPlayer.getX(), affectedPlayer.getY()).isValid()) { + player.getActionSender().sendMessage( + "you can't reach this person"); + unsetOptions(player); + return; + } + + if ((affectedPlayer.getPrivacySetting(2) && !affectedPlayer + .isFriendsWith(player.getUsernameHash())) + || affectedPlayer.isIgnoring(player.getUsernameHash())) { + player.getActionSender().sendMessage( + "This player has trade requests blocked."); + return; + } + + player.setWishToTrade(affectedPlayer); + player.getActionSender().sendMessage( + affectedPlayer.isTrading() ? affectedPlayer.getUsername() + + " is already in a trade" + : "Sending trade request"); + affectedPlayer.getActionSender().sendMessage( + player.getUsername() + " wishes to trade with you"); + + if (!player.isTrading() && affectedPlayer.getWishToTrade() != null + && affectedPlayer.getWishToTrade().equals(player) + && !affectedPlayer.isTrading()) { + player.setTrading(true); + player.resetPath(); + player.resetAllExceptTrading(); + affectedPlayer.setTrading(true); + affectedPlayer.resetPath(); + affectedPlayer.resetAllExceptTrading(); + + player.getActionSender().sendTradeWindowOpen(); + affectedPlayer.getActionSender().sendTradeWindowOpen(); + world.addEntryToSnapshots(new Activity(player.getUsername(), + player.getUsername() + " sent trade request " + + affectedPlayer.getUsername() + " at: " + + player.getX() + "/" + player.getY() + " | " + + affectedPlayer.getX() + "/" + + affectedPlayer.getY())); + + } + break; + case 211: // Trade accepted + affectedPlayer = player.getWishToTrade(); + if (affectedPlayer == null || busy(affectedPlayer) + || !player.isTrading() || !affectedPlayer.isTrading()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + + player.setTradeOfferAccepted(true); + + player.getActionSender().sendTradeAcceptUpdate(); + affectedPlayer.getActionSender().sendTradeAcceptUpdate(); + + if (affectedPlayer.isTradeOfferAccepted()) { + player.getActionSender().sendTradeAccept(); + affectedPlayer.getActionSender().sendTradeAccept(); + } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " accepted trade " + + affectedPlayer.getUsername() + + " at: " + + player.getX() + + "/" + + player.getY() + + " | " + + affectedPlayer.getX() + + "/" + + affectedPlayer.getY())); + + break; + case 53: // Confirm accepted + affectedPlayer = player.getWishToTrade(); + if (affectedPlayer == null || busy(affectedPlayer) + || !player.isTrading() || !affectedPlayer.isTrading() + || !player.isTradeOfferAccepted() + || !affectedPlayer.isTradeOfferAccepted()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + player.setTradeConfirmAccepted(true); + + if (affectedPlayer.isTradeConfirmAccepted()) { + world.addEntryToSnapshots(new Activity(player.getUsername(), + player.getUsername() + " finished trade " + + affectedPlayer.getUsername() + " at: " + + player.getX() + "/" + player.getY() + " | " + + affectedPlayer.getX() + "/" + + affectedPlayer.getY())); + + ArrayList myOffer = player.getTradeOffer(); + ArrayList theirOffer = affectedPlayer.getTradeOffer(); + + int myRequiredSlots = player.getInventory().getRequiredSlots( + theirOffer); + int myAvailableSlots = (30 - player.getInventory().size()) + + player.getInventory().getFreedSlots(myOffer); + + int theirRequiredSlots = affectedPlayer.getInventory() + .getRequiredSlots(myOffer); + int theirAvailableSlots = (30 - affectedPlayer.getInventory() + .size()) + + affectedPlayer.getInventory().getFreedSlots( + theirOffer); + + if (theirRequiredSlots > theirAvailableSlots) { + player.getActionSender() + .sendMessage( + "The other player does not have room to accept your items."); + affectedPlayer + .getActionSender() + .sendMessage( + "You do not have room in your inventory to hold those items."); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + if (myRequiredSlots > myAvailableSlots) { + player.getActionSender() + .sendMessage( + "You do not have room in your inventory to hold those items."); + affectedPlayer + .getActionSender() + .sendMessage( + "The other player does not have room to accept your items."); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + + for (InvItem item : myOffer) { + InvItem affectedItem = player.getInventory().get(item); + if (affectedItem == null) { + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + + } + if (affectedItem.isWielded()) { + affectedItem.setWield(false); + player.updateWornItems( + affectedItem.getWieldableDef().getWieldPos(), + player.getPlayerAppearance().getSprite( + affectedItem.getWieldableDef() + .getWieldPos())); + } + player.getInventory().remove(item); + } + for (InvItem item : theirOffer) { + InvItem affectedItem = affectedPlayer.getInventory().get( + item); + if (affectedItem == null) { + affectedPlayer.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + if (item.getDef().isMembers() && !World.isMembers()) { + player.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + if (affectedItem.isWielded()) { + affectedItem.setWield(false); + affectedPlayer.updateWornItems( + affectedItem.getWieldableDef().getWieldPos(), + affectedPlayer.getPlayerAppearance().getSprite( + affectedItem.getWieldableDef() + .getWieldPos())); + } + affectedPlayer.getInventory().remove(item); + } + MiscPacketBuilder loginServer = Instance.getServer() + .getLoginConnector().getActionSender(); + long playerhash = DataConversions.usernameToHash(player + .getUsername()); + long affectedPlayerhash = DataConversions + .usernameToHash(affectedPlayer.getUsername()); + for (InvItem item : myOffer) { + affectedPlayer.getInventory().add(item); + } + for (InvItem item : theirOffer) { + player.getInventory().add(item); + + } + boolean senddata = false; + for (InvItem item : myOffer) { + loginServer.tradeLog(playerhash, affectedPlayerhash, + item.getID(), item.getAmount(), player.getX(), + player.getY(), 1); + if (item.getAmount() > 10000000 + || Formulae.isRareItem(item.getID())) + senddata = true; + } + if (senddata) + DBConnection.getReport().submitDupeData( + DataConversions.hashToUsername(playerhash), + playerhash); + senddata = false; + for (InvItem item : theirOffer) { + loginServer.tradeLog(affectedPlayerhash, playerhash, + item.getID(), item.getAmount(), player.getX(), + player.getY(), 1); + if (item.getAmount() > 10000000 + || Formulae.isRareItem(item.getID())) + senddata = true; + } + if (senddata) + DBConnection.getReport().submitDupeData( + DataConversions.hashToUsername(affectedPlayerhash), + affectedPlayerhash); + + player.getActionSender().sendInventory(); + player.getActionSender().sendEquipmentStats(); + long now = GameEngine.getTime(); + player.save(); + player.setLastSaveTime(now); + affectedPlayer.save(); + affectedPlayer.setLastSaveTime(now); + player.getActionSender().sendMessage("Trade completed."); + + affectedPlayer.getActionSender().sendInventory(); + affectedPlayer.getActionSender().sendEquipmentStats(); + affectedPlayer.getActionSender() + .sendMessage("Trade completed."); + + unsetOptions(player); + unsetOptions(affectedPlayer); + } + break; + case 216: // Trade declined + affectedPlayer = player.getWishToTrade(); + if (affectedPlayer == null || busy(affectedPlayer) + || !player.isTrading() || !affectedPlayer.isTrading()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + affectedPlayer.getActionSender().sendMessage( + player.getUsername() + " has declined the trade."); + unsetOptions(player); unsetOptions(affectedPlayer); - return; + break; + case 70: // Receive offered item data + affectedPlayer = player.getWishToTrade(); + if (affectedPlayer == null + || busy(affectedPlayer) + || !player.isTrading() + || !affectedPlayer.isTrading() + || (player.isTradeOfferAccepted() && affectedPlayer + .isTradeOfferAccepted()) + || player.isTradeConfirmAccepted() + || affectedPlayer.isTradeConfirmAccepted()) { // This + // shouldn't + // happen + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } - } - if (affectedItem.isWielded()) { - affectedItem.setWield(false); - player.updateWornItems(affectedItem.getWieldableDef().getWieldPos(), player.getPlayerAppearance().getSprite(affectedItem.getWieldableDef().getWieldPos())); - } - player.getInventory().remove(item); - } - for (InvItem item : theirOffer) { - InvItem affectedItem = affectedPlayer.getInventory().get(item); - if (affectedItem == null) { - affectedPlayer.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - if (item.getDef().isMembers() && !World.isMembers()) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - if (affectedItem.isWielded()) { - affectedItem.setWield(false); - affectedPlayer.updateWornItems(affectedItem.getWieldableDef().getWieldPos(), affectedPlayer.getPlayerAppearance().getSprite(affectedItem.getWieldableDef().getWieldPos())); - } - affectedPlayer.getInventory().remove(item); - } - MiscPacketBuilder loginServer = Instance.getServer().getLoginConnector().getActionSender(); - long playerhash = DataConversions.usernameToHash(player.getUsername()); - long affectedPlayerhash = DataConversions.usernameToHash(affectedPlayer.getUsername()); - for (InvItem item : myOffer) { - affectedPlayer.getInventory().add(item); - } - for (InvItem item : theirOffer) { - player.getInventory().add(item); + player.setTradeOfferAccepted(false); + player.setTradeConfirmAccepted(false); + affectedPlayer.setTradeOfferAccepted(false); + affectedPlayer.setTradeConfirmAccepted(false); - } - boolean senddata = false; - for (InvItem item : myOffer) { - loginServer.tradeLog(playerhash, affectedPlayerhash, item.getID(), item.getAmount(), player.getX(), player.getY(), 1); - if(item.getAmount() > 10000000 || Formulae.isRareItem(item.getID())) - senddata = true; - } - if(senddata) - DBConnection.getReport().submitDupeData(DataConversions.hashToUsername(playerhash),playerhash); - senddata = false; - for (InvItem item : theirOffer) { - loginServer.tradeLog(affectedPlayerhash, playerhash, item.getID(), item.getAmount(), player.getX(), player.getY(), 1); - if(item.getAmount() > 10000000 || Formulae.isRareItem(item.getID())) - senddata = true; - } - if(senddata) - DBConnection.getReport().submitDupeData(DataConversions.hashToUsername(affectedPlayerhash),affectedPlayerhash); - - player.getActionSender().sendInventory(); - player.getActionSender().sendEquipmentStats(); - long now = GameEngine.getTime(); - player.save(); - player.setLastSaveTime(now); - affectedPlayer.save(); - affectedPlayer.setLastSaveTime(now); - player.getActionSender().sendMessage("Trade completed."); + // player.getActionSender().sendTradeAcceptUpdate(); + // affectedPlayer.getActionSender().sendTradeAcceptUpdate(); - affectedPlayer.getActionSender().sendInventory(); - affectedPlayer.getActionSender().sendEquipmentStats(); - affectedPlayer.getActionSender().sendMessage("Trade completed."); - - unsetOptions(player); - unsetOptions(affectedPlayer); - } - break; - case 216: // Trade declined - affectedPlayer = player.getWishToTrade(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isTrading() || !affectedPlayer.isTrading()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - affectedPlayer.getActionSender().sendMessage(player.getUsername() + " has declined the trade."); - - unsetOptions(player); - unsetOptions(affectedPlayer); - break; - case 70: // Receive offered item data - affectedPlayer = player.getWishToTrade(); - if (affectedPlayer == null || busy(affectedPlayer) || !player.isTrading() || !affectedPlayer.isTrading() || (player.isTradeOfferAccepted() && affectedPlayer.isTradeOfferAccepted()) || player.isTradeConfirmAccepted() || affectedPlayer.isTradeConfirmAccepted()) { // This - // shouldn't - // happen - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - - player.setTradeOfferAccepted(false); - player.setTradeConfirmAccepted(false); - affectedPlayer.setTradeOfferAccepted(false); - affectedPlayer.setTradeConfirmAccepted(false); - - // player.getActionSender().sendTradeAcceptUpdate(); - // affectedPlayer.getActionSender().sendTradeAcceptUpdate(); - - Inventory tradeOffer = new Inventory(); - player.resetTradeOffer(); - int count = (int) p.readByte(); - for (int slot = 0; slot < count; slot++) { - InvItem tItem = new InvItem(p.readShort(), p.readInt()); - if (tItem.getAmount() < 1) { - player.setSuspiciousPlayer(true); - player.setRequiresOfferUpdate(true); - continue; + Inventory tradeOffer = new Inventory(); + player.resetTradeOffer(); + int count = (int) p.readByte(); + for (int slot = 0; slot < count; slot++) { + InvItem tItem = new InvItem(p.readShort(), p.readInt()); + if (tItem.getAmount() < 1) { + player.setSuspiciousPlayer(true); + player.setRequiresOfferUpdate(true); + continue; + } + ItemDef def = tItem.getDef(); + if (!def.canTrade() && !player.isMod()) { + player.getActionSender().sendMessage( + def.getName() + + " cannot be traded with other players"); + player.setRequiresOfferUpdate(true); + continue; + } + tradeOffer.add(tItem); + } + for (InvItem item : tradeOffer.getItems()) { + if (tradeOffer.countId(item.getID()) > player.getInventory() + .countId(item.getID())) { + player.setSuspiciousPlayer(true); + unsetOptions(player); + unsetOptions(affectedPlayer); + return; + } + player.addToTradeOffer(item); + } + player.setRequiresOfferUpdate(true); + break; } - ItemDef def = tItem.getDef(); - if (!def.canTrade() && !player.isMod()) { - player.getActionSender().sendMessage(def.getName() + " cannot be traded with other players"); - player.setRequiresOfferUpdate(true); - continue; - } - tradeOffer.add(tItem); - } - for (InvItem item : tradeOffer.getItems()) { - if (tradeOffer.countId(item.getID()) > player.getInventory().countId(item.getID())) { - player.setSuspiciousPlayer(true); - unsetOptions(player); - unsetOptions(affectedPlayer); - return; - } - player.addToTradeOffer(item); - } - player.setRequiresOfferUpdate(true); - break; } - } - private void unsetOptions(Player p) { - if (p == null) { - return; + private void unsetOptions(Player p) { + if (p == null) { + return; + } + p.resetTrading(); } - p.resetTrading(); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/Trap.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/Trap.java index afe5d41..b8d047b 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/Trap.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/Trap.java @@ -8,15 +8,15 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class Trap implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - Logger.event(player.getUsername() + " [" + player.getUsernameHash() + "] was caught by a trap!"); - } + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + Logger.event(player.getUsername() + " [" + player.getUsernameHash() + + "] was caught by a trap!"); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/TrapHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/TrapHandler.java index 58b94ef..c4f0b87 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/TrapHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/TrapHandler.java @@ -8,15 +8,15 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class TrapHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - Logger.event("[BOT] " + player.getUsername() + " [" + player.getUsernameHash() + "] was caught using Methoxy!"); - } + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + Logger.event("[BOT] " + player.getUsername() + " [" + + player.getUsernameHash() + "] was caught using Methoxy!"); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/WalkRequest.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/WalkRequest.java index 00f975e..a8ba2cf 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/WalkRequest.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/WalkRequest.java @@ -17,143 +17,171 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.states.CombatState; - public class WalkRequest implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.inCombat()) { - if (pID == 132) { - Mob opponent = player.getOpponent(); - if (opponent == null) { // This shouldn't happen - player.setSuspiciousPlayer(true); - return; - } - if (opponent.getHitsMade() >= 3) { - if (player.isDueling() && player.getDuelSetting(0)) { - player.getActionSender().sendMessage("Running has been disabled in this duel."); - return; - } - player.lastRun = GameEngine.getTime(); - player.resetCombat(CombatState.RUNNING); - - if(player.isInfected() && GameEngine.getTime() - player.getLastMoved() < 1900) { - final Packet newpacket = p; - final IoSession newsession = session; - Instance.getDelayedEventHandler().add(new MiniEvent(player, 2000) { - public void action() { - try { - handlePacket(newpacket, newsession); - } catch(Exception e) { - return; - } - } - }); - } - player.isMining(false); - if (opponent instanceof Npc) { - Npc n = (Npc) opponent; - n.unblock(); - opponent.resetCombat(CombatState.WAITING); - if (n.getDef().aggressive) { - player.lastNpcChasingYou = n; - Instance.getDelayedEventHandler().add(new MiniEvent(player, 2000) { - public void action() { - - final Npc npc = owner.lastNpcChasingYou; - owner.lastNpcChasingYou = null; - if (npc.isBusy() || npc.getChasing() != null) + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.inCombat()) { + if (pID == 132) { + Mob opponent = player.getOpponent(); + if (opponent == null) { // This shouldn't happen + player.setSuspiciousPlayer(true); return; - - npc.resetPath(); - npc.setChasing(owner); - - Instance.getDelayedEventHandler().add(new WalkMobToMobEvent(npc, owner, 0) { - public void arrived() { - if (affectedMob.isBusy() || owner.isBusy()) { - npc.setChasing(null); - return; - } - if (affectedMob.inCombat() || owner.inCombat()) { - npc.setChasing(null); - return; - } - Player player = (Player) affectedMob; - player.resetPath(); - player.setBusy(true); - npc.resetPath(); - player.resetAll(); - player.setStatus(Action.FIGHTING_MOB); - player.getActionSender().sendSound("underattack"); - player.getActionSender().sendMessage("You are under attack!"); - - npc.setLocation(player.getLocation(), true); - for (Player p : npc.getViewArea().getPlayersInView()) - p.removeWatchedNpc(npc); - player.setBusy(true); - player.setSprite(9); - player.setOpponent(npc); - player.setCombatTimer(); - - npc.setBusy(true); - npc.setSprite(8); - npc.setOpponent(player); - npc.setCombatTimer(); - npc.setChasing(null); - FightEvent fighting = new FightEvent(player, npc, true); - fighting.setLastRun(0); - world.getDelayedEventHandler().add(fighting); - } - - public void failed() { - npc.setChasing(null); - } - }); } - }); + if (opponent.getHitsMade() >= 3) { + if (player.isDueling() && player.getDuelSetting(0)) { + player.getActionSender().sendMessage( + "Running has been disabled in this duel."); + return; + } + player.setLastRun(GameEngine.getTime()); + player.resetCombat(CombatState.RUNNING); + + if (player.isInfected() + && GameEngine.getTime() - player.getLastMoved() < 1900) { + final Packet newpacket = p; + final IoSession newsession = session; + Instance.getDelayedEventHandler().add( + new MiniEvent(player, 2000) { + public void action() { + try { + handlePacket(newpacket, newsession); + } catch (Exception e) { + return; + } + } + }); + } + player.isMining(false); + if (opponent instanceof Npc) { + Npc n = (Npc) opponent; + n.unblock(); + opponent.resetCombat(CombatState.WAITING); + if (n.getDef().aggressive) { + player.setLastNpcChasingYou(n); + Instance.getDelayedEventHandler().add( + new MiniEvent(player, 2000) { + public void action() { + + final Npc npc = owner + .getLastNpcChasingYou(); + owner.setLastNpcChasingYou(null); + if (npc.isBusy() + || npc.getChasing() != null) + return; + + npc.resetPath(); + npc.setChasing(owner); + + Instance.getDelayedEventHandler() + .add(new WalkMobToMobEvent( + npc, owner, 0) { + public void arrived() { + if (affectedMob + .isBusy() + || owner.isBusy()) { + npc.setChasing(null); + return; + } + if (affectedMob + .inCombat() + || owner.inCombat()) { + npc.setChasing(null); + return; + } + Player player = (Player) affectedMob; + player.resetPath(); + player.setBusy(true); + npc.resetPath(); + player.resetAll(); + player.setStatus(Action.FIGHTING_MOB); + player.getActionSender() + .sendSound( + "underattack"); + player.getActionSender() + .sendMessage( + "You are under attack!"); + + npc.setLocation( + player.getLocation(), + true); + for (Player p : npc + .getViewArea() + .getPlayersInView()) + p.removeWatchedNpc(npc); + player.setBusy(true); + player.setSprite(9); + player.setOpponent(npc); + player.setCombatTimer(); + + npc.setBusy(true); + npc.setSprite(8); + npc.setOpponent(player); + npc.setCombatTimer(); + npc.setChasing(null); + FightEvent fighting = new FightEvent( + player, + npc, true); + fighting.setLastRun(0); + world.getDelayedEventHandler() + .add(fighting); + } + + public void failed() { + npc.setChasing(null); + } + }); + } + }); + } + + } else { + opponent.resetCombat(CombatState.WAITING); + } + } else { + player.getActionSender() + .sendMessage( + "You cannot retreat in the first 3 rounds of battle."); + return; + } + } else { + return; } - - } else { - opponent.resetCombat(CombatState.WAITING); - } - } else { - player.getActionSender().sendMessage("You cannot retreat in the first 3 rounds of battle."); - return; + } else if (player.isBusy() + && GameEngine.getTime() - player.getLastMineTimer() > 2000) { + return; } - } else { - return; - } - } else if (player.isBusy() && GameEngine.getTime() - player.lastMineTimer > 2000) { - return; + + if (GameEngine.getTime() - player.getLastCast() < 600) + return; + + player.isMining(false); + player.resetAll(); + + int startX = p.readShort(); + int startY = p.readShort(); + int numWaypoints = p.remaining() / 2; + byte[] waypointXoffsets = new byte[numWaypoints]; + byte[] waypointYoffsets = new byte[numWaypoints]; + for (int x = 0; x < numWaypoints; x++) { + waypointXoffsets[x] = p.readByte(); + waypointYoffsets[x] = p.readByte(); + } + Path path = new Path(startX, startY, waypointXoffsets, waypointYoffsets); + if (player.blink() && waypointXoffsets.length >= 1) { + player.teleport((int) waypointXoffsets[waypointXoffsets.length - 1] + + startX, + (int) waypointYoffsets[waypointYoffsets.length - 1] + + startY, false); + return; + } + player.setStatus(Action.IDLE); + player.setPath(path); } - if (GameEngine.getTime() - player.lastCast < 600) - return; - - player.isMining(false); - player.resetAll(); - - int startX = p.readShort(); - int startY = p.readShort(); - int numWaypoints = p.remaining() / 2; - byte[] waypointXoffsets = new byte[numWaypoints]; - byte[] waypointYoffsets = new byte[numWaypoints]; - for (int x = 0; x < numWaypoints; x++) { - waypointXoffsets[x] = p.readByte(); - waypointYoffsets[x] = p.readByte(); - } - Path path = new Path(startX, startY, waypointXoffsets, waypointYoffsets); - if(player.blink() && waypointXoffsets.length >= 1) { - player.teleport((int)waypointXoffsets[waypointXoffsets.length-1] + startX, (int)waypointYoffsets[waypointYoffsets.length-1] + startY, false); - return; - } - player.setStatus(Action.IDLE); - player.setPath(path); - } - } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/WallObjectAction.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/WallObjectAction.java index a5ef2aa..41b9c6d 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/WallObjectAction.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/WallObjectAction.java @@ -22,407 +22,532 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.plugins.extras.Thieving; import org.moparscape.msc.gs.states.Action; - public class WallObjectAction implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - try { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy()) { - player.resetPath(); - return; - } - player.resetAll(); - ActiveTile t = world.getTile(p.readShort(), p.readShort()); - final GameObject object = t.getGameObject(); - final int click = pID == 126 ? 0 : 1; - if (object == null) { - t.cleanItself(); - player.setSuspiciousPlayer(true); - return; - } - world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used a door ("+object.getID()+") at: " + player.getX() + "/" + player.getY())); - - if (world.getQuestManager().handleObject(object, player, click == 1)) - return; - player.setStatus(Action.USING_DOOR); - Instance.getDelayedEventHandler().add(new WalkToPointEvent(player, object.getLocation(), 1, false) { - public void arrived() { - owner.resetPath(); - DoorDef def = object.getDoorDef(); - if (owner.isBusy() || owner.isRanging() || !owner.nextTo(object) || def == null || owner.getStatus() != Action.USING_DOOR) { - return; - }// /126 - if (object.getX() == 282 && object.getY() == 185) - return; - if (object.getX() == 285 && object.getY() == 185) - return; - if (object.getX() == 59 && object.getY() == 573) - return; - if (object.getX() == 196 && object.getY() == 3266) - return; - if (!Server.isMembers()) { - if (object.getX() == 126 && object.getY() == 686) - return; - } - if (object.getID() == 77) { - owner.getActionSender().sendMessage("You search the " + def.name + "..."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.getActionSender().sendMessage("You see a key but can't quite reach it"); + public void handlePacket(Packet p, IoSession session) throws Exception { + try { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy()) { + player.resetPath(); return; - } - }); - } - // if(object.getID() == 58) { - // owner.getActionSender().sendMessage("It seems this wall can not be opened right now"); - // return; - // } - owner.resetAll(); - String command = (click == 0 ? def.getCommand1() : def.getCommand2()).toLowerCase(); - Point telePoint = EntityHandler.getObjectTelePoint(object.getLocation(), command); - - if (telePoint != null) { - owner.teleport(telePoint.getX(), telePoint.getY(), false); - } - - else { - - if (command.equals("pick lock")) { - if (!World.isMembers()) { - owner.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - if (owner.getSpam()) { - return; - } - Thieving thiev = new Thieving(owner, object); - owner.setSpam(true); - thiev.lockpick(); - return; } - - switch (object.getID()) { - case 487: - if (object.getX() != 282 || object.getY() != 3020) { - break; - } - if(GameEngine.getTime() - owner.getLastMoved() < 10000) { - owner.getActionSender().sendMessage("You must stand still for 10 seconds before using this"); - return; - } - owner.teleport(567, 3330, false); + player.resetAll(); + ActiveTile t = world.getTile(p.readShort(), p.readShort()); + final GameObject object = t.getGameObject(); + final int click = pID == 126 ? 0 : 1; + if (object == null) { + t.cleanItself(); + player.setSuspiciousPlayer(true); return; - - case 20: - case 44: - replaceGameObject(1, true); - break; - case 1: - replaceGameObject(2, false); - break; - case 2: - replaceGameObject(1, true); - break; - case 9: - replaceGameObject(8, false); - break; - case 8: - replaceGameObject(9, true); - break; - - case 94: - case 23: - owner.getActionSender().sendMessage("The door is locked"); - break; - case 112: // Fishing Guild Door - if (object.getX() != 586 || object.getY() != 524) { - break; - } - if (owner.getY() > 523) { - if (owner.getCurStat(10) < 68) { - owner.setBusy(true); - Npc masterFisher = world.getNpc(368, 582, 588, 524, 527); - if (masterFisher != null) { - owner.informOfNpcMessage(new ChatMessage(masterFisher, "Hello only the top fishers are allowed in here", owner)); - } - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a fishing level of 68 to enter"); - } - }); - } else { - doDoor(); - owner.teleport(586, 523, false); - } - } else { - doDoor(); - owner.teleport(586, 524, false); - } - break; - case 55: // Mining Guild Door - //Hi jacking for champs etc guild doors. - if (object.getX() == 150 && object.getY() == 554) { // Champs - if(owner.getY() >= 554) { doDoor(); owner.teleport(150, 553, false); return; } - if(owner.getSkillTotal() < 600) { owner.getActionSender().sendMessage("You need a skill total of 600 or more to enter"); return; } - doDoor(); - owner.teleport(150,554, false); - return; - } - if (object.getX() == 372 && object.getY() == 441) { // Heroes - if(owner.getY() <= 440) { doDoor(); owner.teleport(372, 441, false); return; } - if(owner.getSkillTotal() < 850) { owner.getActionSender().sendMessage("You need a skill total of 850 or more to enter"); return; } - doDoor(); - owner.teleport(372,440, false); - return; - } - //Legends guild gate is done in ObjectAction - - if (object.getX() != 268 || object.getY() != 3381) { - break; - } - if (owner.getY() <= 3380) { - if (owner.getCurStat(14) < 60) { - owner.setBusy(true); - Npc dwarf = world.getNpc(191, 265, 270, 3379, 3380); - if (dwarf != null) { - owner.informOfNpcMessage(new ChatMessage(dwarf, "Hello only the top miners are allowed in here", owner)); - } - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a mining level of 60 to enter"); - } - }); - } else { - doDoor(); - owner.teleport(268, 3381, false); - } - } else { - doDoor(); - owner.teleport(268, 3380, false); - } - break; - case 68: // Crafting Guild Door - if (object.getX() != 347 || object.getY() != 601) { - return; - } - if (owner.getY() <= 600) { - if (owner.getCurStat(12) < 40) { - owner.setBusy(true); - Npc master = world.getNpc(231, 341, 349, 599, 612); - if (master != null) { - owner.informOfNpcMessage(new ChatMessage(master, "Hello only the top crafters are allowed in here", owner)); - } - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a crafting level of 40 to enter"); - } - }); - } else if (!owner.getInventory().wielding(191)) { - Npc master = world.getNpc(231, 341, 349, 599, 612); - if (master != null) { - owner.informOfNpcMessage(new ChatMessage(master, "Where is your apron?", owner)); - } - } else { - doDoor(); - owner.teleport(347, 601, false); - } - } else { - doDoor(); - owner.teleport(347, 600, false); - } - break; - case 43: // Cooking Guild Door - if (object.getX() != 179 || object.getY() != 488) { - break; - } - if (owner.getY() >= 488) { - if (owner.getCurStat(7) < 32) { - owner.setBusy(true); - Npc chef = world.getNpc(133, 176, 181, 480, 487); - if (chef != null) { - owner.informOfNpcMessage(new ChatMessage(chef, "Hello only the top cooks are allowed in here", owner)); - } - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a cooking level of 32 to enter"); - } - }); - } else if (!owner.getInventory().wielding(192)) { - Npc chef = world.getNpc(133, 176, 181, 480, 487); - if (chef != null) { - owner.informOfNpcMessage(new ChatMessage(chef, "Where is your chef's hat?", owner)); - } - } else { - doDoor(); - owner.teleport(179, 487, false); - } - } else { - doDoor(); - owner.teleport(179, 488, false); - } - break; - - case 146: // Magic Guild Door - if (object.getX() != 599 || object.getY() != 757) { - break; - } - if (owner.getX() <= 598) { - if (owner.getCurStat(6) < 66) { - owner.setBusy(true); - Npc wizard = world.getNpc(513, 596, 597, 755, 758); - if (wizard != null) { - owner.informOfNpcMessage(new ChatMessage(wizard, "Hello only the top wizards are allowed in here", owner)); - } - world.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - owner.getActionSender().sendMessage("You need a magic level of 66 to enter"); - } - }); - } else { - doDoor(); - owner.teleport(599, 757, false); - } - } else { - doDoor(); - owner.teleport(598, 757, false); - } - break; - case 74: // Heroes guild door - if (object.getX() != 372 || object.getY() != 441) { - return; - } - doDoor(); - if (owner.getY() >= 441) { - owner.teleport(372, 440, false); - } else { - owner.teleport(372, 441, false); - } - break; - case 22: // edge dungeon wall - if (object.getX() == 219 && object.getY() == 3282) { - owner.getActionSender().sendSound("secretdoor"); - world.unregisterGameObject(object); - world.delayedSpawnObject(object.getLoc(), 1000); - owner.getActionSender().sendMessage("You just went through a secret door"); - if (owner.getX() <= 218) { - owner.teleport(219, 3282, false); - } else { - owner.teleport(218, 3282, false); - } - } else { - owner.getActionSender().sendMessage("Nothing interesting happens"); - } - break; - case 58: // Karamja -> cranador wall - if (object.getX() != 406 || object.getY() != 3518) { - return; - } - doDoor(); - if (owner.getY() <= 3517) { - owner.teleport(406, 3518, false); - } else { - owner.teleport(406, 3517, false); - } - break; - case 101: // Woodcutting guild secret - // exit - if (object.getX() != 540 || object.getY() != 445) { - return; - } - if (owner.getX() >= 540) { - owner.getActionSender().sendMessage("You push your way through"); - owner.teleport(539, 445, false); - } else { - owner.getActionSender().sendMessage("You can't seem to get through"); - } - break; - case 38: // Black Knight Guard Door - if (object.getX() != 271 || object.getY() != 441) { - return; - } - if (owner.getX() <= 270) { - if (!owner.getInventory().wielding(7) || !owner.getInventory().wielding(104)) { - owner.getActionSender().sendMessage("Only guards are allowed in there!"); - return; - } - doDoor(); - owner.teleport(271, 441, false); - } else { - doDoor(); - owner.teleport(270, 441, false); - } - break; - case 36: // Draynor mansion front door - if (object.getX() != 210 || object.getY() != 553) { - return; - } - if (owner.getY() >= 553) { - doDoor(); - owner.teleport(210, 552, false); - } else { - owner.getActionSender().sendMessage("The door is locked shut"); - } - break; - case 37: // Draynor mansion back door - if (object.getX() != 199 || object.getY() != 551) { - return; - } - if (owner.getY() >= 551) { - doDoor(); - owner.teleport(199, 550, false); - } else { - owner.getActionSender().sendMessage("The door is locked shut"); - } - break; - case 60: // Melzars made (coming out - // only) - if (owner.getX() > 337) { - doDoor(); - owner.teleport(337, owner.getY(), false); - } else { - owner.getActionSender().sendMessage("The door is locked shut"); - } - break; - case 30: // Locked Doors - owner.getActionSender().sendMessage("The door is locked shut"); - break; - default: - owner.getActionSender().sendMessage("Nothing interesting happens."); - break; } - } - } + world.addEntryToSnapshots(new Activity(player.getUsername(), player + .getUsername() + + " used a door (" + + object.getID() + + ") at: " + player.getX() + "/" + player.getY())); - private void doDoor() { - owner.getActionSender().sendSound("opendoor"); - world.registerGameObject(new GameObject(object.getLocation(), 11, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), 1000); - } + if (World.getQuestManager() + .handleObject(object, player, click == 1)) + return; + player.setStatus(Action.USING_DOOR); + Instance.getDelayedEventHandler() + .add(new WalkToPointEvent(player, object.getLocation(), 1, + false) { + public void arrived() { + owner.resetPath(); + DoorDef def = object.getDoorDef(); + if (owner.isBusy() || owner.isRanging() + || !owner.nextTo(object) || def == null + || owner.getStatus() != Action.USING_DOOR) { + return; + }// /126 + if (object.getX() == 282 && object.getY() == 185) + return; + if (object.getX() == 285 && object.getY() == 185) + return; + if (object.getX() == 59 && object.getY() == 573) + return; + if (object.getX() == 196 && object.getY() == 3266) + return; + if (!Server.isMembers()) { + if (object.getX() == 126 + && object.getY() == 686) + return; + } + if (object.getID() == 77) { + owner.getActionSender().sendMessage( + "You search the " + def.name + "..."); + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.getActionSender() + .sendMessage( + "You see a key but can't quite reach it"); + return; + } + }); + } + // if(object.getID() == 58) { + // owner.getActionSender().sendMessage("It seems this wall can not be opened right now"); + // return; + // } + owner.resetAll(); + String command = (click == 0 ? def.getCommand1() + : def.getCommand2()).toLowerCase(); + Point telePoint = EntityHandler.getObjectTelePoint( + object.getLocation(), command); - private void replaceGameObject(int newID, boolean open) { - if (open) { - owner.getActionSender().sendMessage("The door swings open"); - } else { - owner.getActionSender().sendMessage("The door creaks shut"); - } - world.registerGameObject(new GameObject(object.getLocation(), newID, object.getDirection(), object.getType())); - owner.getActionSender().sendSound(open ? "opendoor" : "closedoor"); + if (telePoint != null) { + owner.teleport(telePoint.getX(), + telePoint.getY(), false); + } + + else { + + if (command.equals("pick lock")) { + if (!World.isMembers()) { + owner.getActionSender() + .sendMessage( + "This feature is only avaliable on a members server"); + return; + } + if (owner.getSpam()) { + return; + } + Thieving thiev = new Thieving(owner, object); + owner.setSpam(true); + thiev.lockpick(); + return; + } + + switch (object.getID()) { + case 487: + if (object.getX() != 282 + || object.getY() != 3020) { + break; + } + if (GameEngine.getTime() + - owner.getLastMoved() < 10000) { + owner.getActionSender() + .sendMessage( + "You must stand still for 10 seconds before using this"); + return; + } + owner.teleport(567, 3330, false); + return; + + case 20: + case 44: + replaceGameObject(1, true); + break; + case 1: + replaceGameObject(2, false); + break; + case 2: + replaceGameObject(1, true); + break; + case 9: + replaceGameObject(8, false); + break; + case 8: + replaceGameObject(9, true); + break; + + case 94: + case 23: + owner.getActionSender().sendMessage( + "The door is locked"); + break; + case 112: // Fishing Guild Door + if (object.getX() != 586 + || object.getY() != 524) { + break; + } + if (owner.getY() > 523) { + if (owner.getCurStat(10) < 68) { + owner.setBusy(true); + Npc masterFisher = world.getNpc( + 368, 582, 588, 524, 527); + if (masterFisher != null) { + owner.informOfNpcMessage(new ChatMessage( + masterFisher, + "Hello only the top fishers are allowed in here", + owner)); + } + world.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a fishing level of 68 to enter"); + } + }); + } else { + doDoor(); + owner.teleport(586, 523, false); + } + } else { + doDoor(); + owner.teleport(586, 524, false); + } + break; + case 55: // Mining Guild Door + // Hi jacking for champs etc guild doors. + if (object.getX() == 150 + && object.getY() == 554) { // Champs + if (owner.getY() >= 554) { + doDoor(); + owner.teleport(150, 553, false); + return; + } + if (owner.getSkillTotal() < 600) { + owner.getActionSender() + .sendMessage( + "You need a skill total of 600 or more to enter"); + return; + } + doDoor(); + owner.teleport(150, 554, false); + return; + } + if (object.getX() == 372 + && object.getY() == 441) { // Heroes + if (owner.getY() <= 440) { + doDoor(); + owner.teleport(372, 441, false); + return; + } + if (owner.getSkillTotal() < 850) { + owner.getActionSender() + .sendMessage( + "You need a skill total of 850 or more to enter"); + return; + } + doDoor(); + owner.teleport(372, 440, false); + return; + } + // Legends guild gate is done in + // ObjectAction + + if (object.getX() != 268 + || object.getY() != 3381) { + break; + } + if (owner.getY() <= 3380) { + if (owner.getCurStat(14) < 60) { + owner.setBusy(true); + Npc dwarf = world.getNpc(191, 265, + 270, 3379, 3380); + if (dwarf != null) { + owner.informOfNpcMessage(new ChatMessage( + dwarf, + "Hello only the top miners are allowed in here", + owner)); + } + world.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a mining level of 60 to enter"); + } + }); + } else { + doDoor(); + owner.teleport(268, 3381, false); + } + } else { + doDoor(); + owner.teleport(268, 3380, false); + } + break; + case 68: // Crafting Guild Door + if (object.getX() != 347 + || object.getY() != 601) { + return; + } + if (owner.getY() <= 600) { + if (owner.getCurStat(12) < 40) { + owner.setBusy(true); + Npc master = world.getNpc(231, 341, + 349, 599, 612); + if (master != null) { + owner.informOfNpcMessage(new ChatMessage( + master, + "Hello only the top crafters are allowed in here", + owner)); + } + world.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a crafting level of 40 to enter"); + } + }); + } else if (!owner.getInventory() + .wielding(191)) { + Npc master = world.getNpc(231, 341, + 349, 599, 612); + if (master != null) { + owner.informOfNpcMessage(new ChatMessage( + master, + "Where is your apron?", + owner)); + } + } else { + doDoor(); + owner.teleport(347, 601, false); + } + } else { + doDoor(); + owner.teleport(347, 600, false); + } + break; + case 43: // Cooking Guild Door + if (object.getX() != 179 + || object.getY() != 488) { + break; + } + if (owner.getY() >= 488) { + if (owner.getCurStat(7) < 32) { + owner.setBusy(true); + Npc chef = world.getNpc(133, 176, + 181, 480, 487); + if (chef != null) { + owner.informOfNpcMessage(new ChatMessage( + chef, + "Hello only the top cooks are allowed in here", + owner)); + } + world.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a cooking level of 32 to enter"); + } + }); + } else if (!owner.getInventory() + .wielding(192)) { + Npc chef = world.getNpc(133, 176, + 181, 480, 487); + if (chef != null) { + owner.informOfNpcMessage(new ChatMessage( + chef, + "Where is your chef's hat?", + owner)); + } + } else { + doDoor(); + owner.teleport(179, 487, false); + } + } else { + doDoor(); + owner.teleport(179, 488, false); + } + break; + + case 146: // Magic Guild Door + if (object.getX() != 599 + || object.getY() != 757) { + break; + } + if (owner.getX() <= 598) { + if (owner.getCurStat(6) < 66) { + owner.setBusy(true); + Npc wizard = world.getNpc(513, 596, + 597, 755, 758); + if (wizard != null) { + owner.informOfNpcMessage(new ChatMessage( + wizard, + "Hello only the top wizards are allowed in here", + owner)); + } + world.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + owner.getActionSender() + .sendMessage( + "You need a magic level of 66 to enter"); + } + }); + } else { + doDoor(); + owner.teleport(599, 757, false); + } + } else { + doDoor(); + owner.teleport(598, 757, false); + } + break; + case 74: // Heroes guild door + if (object.getX() != 372 + || object.getY() != 441) { + return; + } + doDoor(); + if (owner.getY() >= 441) { + owner.teleport(372, 440, false); + } else { + owner.teleport(372, 441, false); + } + break; + case 22: // edge dungeon wall + if (object.getX() == 219 + && object.getY() == 3282) { + owner.getActionSender().sendSound( + "secretdoor"); + world.unregisterGameObject(object); + world.delayedSpawnObject( + object.getLoc(), 1000); + owner.getActionSender() + .sendMessage( + "You just went through a secret door"); + if (owner.getX() <= 218) { + owner.teleport(219, 3282, false); + } else { + owner.teleport(218, 3282, false); + } + } else { + owner.getActionSender().sendMessage( + "Nothing interesting happens"); + } + break; + case 58: // Karamja -> cranador wall + if (object.getX() != 406 + || object.getY() != 3518) { + return; + } + doDoor(); + if (owner.getY() <= 3517) { + owner.teleport(406, 3518, false); + } else { + owner.teleport(406, 3517, false); + } + break; + case 101: // Woodcutting guild secret + // exit + if (object.getX() != 540 + || object.getY() != 445) { + return; + } + if (owner.getX() >= 540) { + owner.getActionSender().sendMessage( + "You push your way through"); + owner.teleport(539, 445, false); + } else { + owner.getActionSender() + .sendMessage( + "You can't seem to get through"); + } + break; + case 38: // Black Knight Guard Door + if (object.getX() != 271 + || object.getY() != 441) { + return; + } + if (owner.getX() <= 270) { + if (!owner.getInventory().wielding(7) + || !owner.getInventory() + .wielding(104)) { + owner.getActionSender() + .sendMessage( + "Only guards are allowed in there!"); + return; + } + doDoor(); + owner.teleport(271, 441, false); + } else { + doDoor(); + owner.teleport(270, 441, false); + } + break; + case 36: // Draynor mansion front door + if (object.getX() != 210 + || object.getY() != 553) { + return; + } + if (owner.getY() >= 553) { + doDoor(); + owner.teleport(210, 552, false); + } else { + owner.getActionSender().sendMessage( + "The door is locked shut"); + } + break; + case 37: // Draynor mansion back door + if (object.getX() != 199 + || object.getY() != 551) { + return; + } + if (owner.getY() >= 551) { + doDoor(); + owner.teleport(199, 550, false); + } else { + owner.getActionSender().sendMessage( + "The door is locked shut"); + } + break; + case 60: // Melzars made (coming out + // only) + if (owner.getX() > 337) { + doDoor(); + owner.teleport(337, owner.getY(), false); + } else { + owner.getActionSender().sendMessage( + "The door is locked shut"); + } + break; + case 30: // Locked Doors + owner.getActionSender().sendMessage( + "The door is locked shut"); + break; + default: + owner.getActionSender().sendMessage( + "Nothing interesting happens."); + break; + } + } + } + + private void doDoor() { + owner.getActionSender().sendSound("opendoor"); + world.registerGameObject(new GameObject(object + .getLocation(), 11, object.getDirection(), + object.getType())); + world.delayedSpawnObject(object.getLoc(), 1000); + } + + private void replaceGameObject(int newID, boolean open) { + if (open) { + owner.getActionSender().sendMessage( + "The door swings open"); + } else { + owner.getActionSender().sendMessage( + "The door creaks shut"); + } + world.registerGameObject(new GameObject(object + .getLocation(), newID, object + .getDirection(), object.getType())); + owner.getActionSender().sendSound( + open ? "opendoor" : "closedoor"); + } + }); + } catch (Exception e) { + e.printStackTrace(); } - }); - } catch (Exception e) { - e.printStackTrace(); } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/client/WieldHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/client/WieldHandler.java index 365fd8d..78a3f3c 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/client/WieldHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/client/WieldHandler.java @@ -18,148 +18,184 @@ import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.quest.Quest; import org.moparscape.msc.gs.util.Logger; - public class WieldHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - Player player = (Player) session.getAttachment(); - int pID = ((RSCPacket) p).getID(); - if (player.isBusy() && !player.inCombat()) { - return; - }// F2P - if (player.isDueling() && player.getDuelSetting(3)) { - player.getActionSender().sendMessage("Armour is disabled in this duel"); - return; - } - player.resetAllExceptDueling(); - int idx = (int) p.readShort(); - if (idx < 0 || idx >= 30) { - player.setSuspiciousPlayer(true); - return; - }// if(true) - InvItem item = player.getInventory().get(idx); - if (item == null || !item.isWieldable()) { - player.setSuspiciousPlayer(true); - return; - } - if(player.getLocation().inWilderness() && item.getDef().isMembers() && Config.f2pWildy) { - player.getActionSender().sendMessage("Can't wield a P2P item in wilderness"); - return; - } - - if ((item.getDef().isMembers() && !World.isMembers())) { - player.getActionSender().sendMessage("This feature is only avaliable on a members server"); - return; - } - - switch (pID) { - case 181: - if (!item.isWielded()) { - wieldItem(player, item); - } - break; - case 92: - if (item.isWielded()) { - unWieldItem(player, item, true); - } - break; - } - player.getActionSender().sendInventory(); - player.getActionSender().sendEquipmentStats(); - } - - public static void unWieldItem(Player player, InvItem item, boolean sound) { - item.setWield(false); - if (sound) { - player.getActionSender().sendSound("click"); - } - player.updateWornItems(item.getWieldableDef().getWieldPos(), player.getPlayerAppearance().getSprite(item.getWieldableDef().getWieldPos())); - } - - private void wieldItem(Player player, InvItem item) { - String youNeed = ""; - for (Entry e : item.getWieldableDef().getStatsRequired()) { - if (player.getMaxStat(e.getKey()) < e.getValue()) { - youNeed += ((Integer) e.getValue()).intValue() + " " + Formulae.statArray[((Integer) e.getKey()).intValue()] + ", "; - } - } - if (!youNeed.equals("")) { - player.getActionSender().sendMessage("You must have at least " + youNeed.substring(0, youNeed.length() - 2) + " to use this item."); - return; - } - if (Config.members) { - if (item.getID() == 594) { - int count = 0; - for (Quest q : World.getQuestManager().getQuests()) { - if (player.getQuestStage(q.getUniqueID()) == Quest.COMPLETE) { - count++; - } - else if(q.getUniqueID() == 12) { - count++; - } + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = (Player) session.getAttachment(); + int pID = ((RSCPacket) p).getID(); + if (player.isBusy() && !player.inCombat()) { + return; + }// F2P + if (player.isDueling() && player.getDuelSetting(3)) { + player.getActionSender().sendMessage( + "Armour is disabled in this duel"); + return; } - Logger.println(count +" - " + World.getQuestManager().getQuests().size() ); - if (count < World.getQuestManager().getQuests().size() || player.getCurStat(Script.MINING) < 50 || player.getCurStat(Script.HERBLAW) < 25 || player.getCurStat(Script.FISHING) < 53 || player.getCurStat(Script.COOKING) < 53 || player.getCurStat(Script.CRAFTING) < 31 || player.getCurStat(Script.WOODCUT) < 36 || player.getCurStat(Script.MAGIC) < 33) { - player.getActionSender().sendMessage("You must have completed at least " + (World.getQuestManager().getQuests().size()) + " quests and have these stat reqs:"); - player.getActionSender().sendMessage("50 Mining, 25 Herblaw, 53 Fishing, 53 Cooking, 31 Crafting, 36 Woodcutting and 33 Magic"); - return; + player.resetAllExceptDueling(); + int idx = (int) p.readShort(); + if (idx < 0 || idx >= 30) { + player.setSuspiciousPlayer(true); + return; + }// if(true) + InvItem item = player.getInventory().get(idx); + if (item == null || !item.isWieldable()) { + player.setSuspiciousPlayer(true); + return; + } + if (player.getLocation().inWilderness() && item.getDef().isMembers() + && Config.f2pWildy) { + player.getActionSender().sendMessage( + "Can't wield a P2P item in wilderness"); + return; } - } else if (item.getID() == 593) { - if (player.getCurStat(Script.CRAFTING) < 31 || player.getCurStat(Script.WOODCUT) < 36) { - player.getActionSender().sendMessage("You must have 31 Crafting and 36 Woodcutting"); - return; + if ((item.getDef().isMembers() && !World.isMembers())) { + player.getActionSender().sendMessage( + "This feature is only avaliable on a members server"); + return; } - } else if(item.getID() == 1288) { - boolean found = false; - for(int i=0; i < 18; i++) { - if(player.getMaxStat(i) == 99) { - found = true; - break; - } - } - if(!found) { - player.getActionSender().sendMessage("Sorry, you need any skill of level 99 to wield this cape of legends"); - return; - } else { - player.getActionSender().sendMessage("You wield the legendary cape like a true legend"); - } - } - } - if (item.getID() == 407 || item.getID() == 401) { - int count = 0; - for (Quest q : World.getQuestManager().getQuests()) { - if (player.getQuestStage(q.getUniqueID()) == Quest.COMPLETE) { - count++; + switch (pID) { + case 181: + if (!item.isWielded()) { + wieldItem(player, item); } - else if(q.getUniqueID() == 12) { - count++; - } - } - - if (player.getCurStat(6) < 31 || count < World.getQuestManager().getQuests().size()) { - player.getActionSender().sendMessage("You must have at least 31 magic & completed " + (World.getQuestManager().getQuests().size()) + " quests"); - return; - } + break; + case 92: + if (item.isWielded()) { + unWieldItem(player, item, true); + } + break; + } + player.getActionSender().sendInventory(); + player.getActionSender().sendEquipmentStats(); } - if (EntityHandler.getItemWieldableDef(item.getID()).femaleOnly() && player.isMale()) { - player.getActionSender().sendMessage("This piece of armor is for a female only."); - return; + + public static void unWieldItem(Player player, InvItem item, boolean sound) { + item.setWield(false); + if (sound) { + player.getActionSender().sendSound("click"); + } + player.updateWornItems( + item.getWieldableDef().getWieldPos(), + player.getPlayerAppearance().getSprite( + item.getWieldableDef().getWieldPos())); } - ArrayList items = player.getInventory().getItems(); - for (InvItem i : items) { - if (item.wieldingAffectsItem(i) && i.isWielded()) { - unWieldItem(player, i, false); - } + + private void wieldItem(Player player, InvItem item) { + String youNeed = ""; + for (Entry e : item.getWieldableDef() + .getStatsRequired()) { + if (player.getMaxStat(e.getKey()) < e.getValue()) { + youNeed += ((Integer) e.getValue()).intValue() + " " + + Formulae.statArray[((Integer) e.getKey()).intValue()] + + ", "; + } + } + if (!youNeed.equals("")) { + player.getActionSender().sendMessage( + "You must have at least " + + youNeed.substring(0, youNeed.length() - 2) + + " to use this item."); + return; + } + if (Config.members) { + if (item.getID() == 594) { + int count = 0; + for (Quest q : World.getQuestManager().getQuests()) { + if (player.getQuestStage(q.getUniqueID()) == Quest.COMPLETE) { + count++; + } else if (q.getUniqueID() == 12) { + count++; + } + } + Logger.println(count + " - " + + World.getQuestManager().getQuests().size()); + if (count < World.getQuestManager().getQuests().size() + || player.getCurStat(Script.MINING) < 50 + || player.getCurStat(Script.HERBLAW) < 25 + || player.getCurStat(Script.FISHING) < 53 + || player.getCurStat(Script.COOKING) < 53 + || player.getCurStat(Script.CRAFTING) < 31 + || player.getCurStat(Script.WOODCUT) < 36 + || player.getCurStat(Script.MAGIC) < 33) { + player.getActionSender().sendMessage( + "You must have completed at least " + + (World.getQuestManager().getQuests() + .size()) + + " quests and have these stat reqs:"); + player.getActionSender() + .sendMessage( + "50 Mining, 25 Herblaw, 53 Fishing, 53 Cooking, 31 Crafting, 36 Woodcutting and 33 Magic"); + return; + } + } else if (item.getID() == 593) { + + if (player.getCurStat(Script.CRAFTING) < 31 + || player.getCurStat(Script.WOODCUT) < 36) { + player.getActionSender().sendMessage( + "You must have 31 Crafting and 36 Woodcutting"); + return; + } + } else if (item.getID() == 1288) { + boolean found = false; + for (int i = 0; i < 18; i++) { + if (player.getMaxStat(i) == 99) { + found = true; + break; + } + } + if (!found) { + player.getActionSender() + .sendMessage( + "Sorry, you need any skill of level 99 to wield this cape of legends"); + return; + } else { + player.getActionSender().sendMessage( + "You wield the legendary cape like a true legend"); + } + } + } + + if (item.getID() == 407 || item.getID() == 401) { + int count = 0; + for (Quest q : World.getQuestManager().getQuests()) { + if (player.getQuestStage(q.getUniqueID()) == Quest.COMPLETE) { + count++; + } else if (q.getUniqueID() == 12) { + count++; + } + } + + if (player.getCurStat(6) < 31 + || count < World.getQuestManager().getQuests().size()) { + player.getActionSender().sendMessage( + "You must have at least 31 magic & completed " + + (World.getQuestManager().getQuests().size()) + + " quests"); + return; + } + } + if (EntityHandler.getItemWieldableDef(item.getID()).femaleOnly() + && player.isMale()) { + player.getActionSender().sendMessage( + "This piece of armor is for a female only."); + return; + } + ArrayList items = player.getInventory().getItems(); + for (InvItem i : items) { + if (item.wieldingAffectsItem(i) && i.isWielded()) { + unWieldItem(player, i, false); + } + } + item.setWield(true); + player.getActionSender().sendSound("click"); + player.updateWornItems(item.getWieldableDef().getWieldPos(), item + .getWieldableDef().getSprite()); } - item.setWield(true); - player.getActionSender().sendSound("click"); - player.updateWornItems(item.getWieldableDef().getWieldPos(), item.getWieldableDef().getSprite()); - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/AlertHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/AlertHandler.java index e1f27c5..6b7d951 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/AlertHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/AlertHandler.java @@ -9,21 +9,20 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class AlertHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER sent alert (uID: " + uID + ")"); - Player player = world.getPlayer(p.readLong()); - if (player != null) { - String message = p.readString(); - player.getActionSender().sendAlert(message, false); + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER sent alert (uID: " + uID + ")"); + Player player = world.getPlayer(p.readLong()); + if (player != null) { + String message = p.readString(); + player.getActionSender().sendAlert(message, false); + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ForceLogout.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ForceLogout.java index a18c7e8..6d487ad 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ForceLogout.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ForceLogout.java @@ -9,21 +9,20 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class ForceLogout implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER requested player logout (uID: " + uID + ")"); - Player player = world.getPlayer(p.readLong()); - if (player != null) { - player.getActionSender().sendLogout(); - player.destroy(true); + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER requested player logout (uID: " + uID + ")"); + Player player = world.getPlayer(p.readLong()); + if (player != null) { + player.getActionSender().sendLogout(); + player.destroy(true); + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogin.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogin.java index 37e2112..031f965 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogin.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogin.java @@ -2,29 +2,26 @@ package org.moparscape.msc.gs.phandler.ls; import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.Instance; -import org.moparscape.msc.gs.connection.LSPacket; import org.moparscape.msc.gs.connection.Packet; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class FriendLogin implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Player player = world.getPlayer(p.readLong()); - if (player == null) { - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + Player player = world.getPlayer(p.readLong()); + if (player == null) { + return; + } + long friend = p.readLong(); + if (player.isFriendsWith(friend)) { + player.getActionSender().sendFriendUpdate(friend, p.readShort()); + } } - long friend = p.readLong(); - if (player.isFriendsWith(friend)) { - player.getActionSender().sendFriendUpdate(friend, p.readShort()); - } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogout.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogout.java index bc4293c..60a041d 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogout.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/FriendLogout.java @@ -8,32 +8,30 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class FriendLogout implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - long friend = p.readLong(); + public void handlePacket(Packet p, IoSession session) throws Exception { + long friend = p.readLong(); - switch (((LSPacket) p).getID()) { - case 12: - for (Player player : world.getPlayers()) { - if (player.isFriendsWith(friend)) { - player.getActionSender().sendFriendUpdate(friend, 0); + switch (((LSPacket) p).getID()) { + case 12: + for (Player player : world.getPlayers()) { + if (player.isFriendsWith(friend)) { + player.getActionSender().sendFriendUpdate(friend, 0); + } + } + break; + case 13: + Player player = world.getPlayer(p.readLong()); + if (player != null) { + player.getActionSender().sendFriendUpdate(friend, 0); + } + break; } - } - break; - case 13: - Player player = world.getPlayer(p.readLong()); - if (player != null) { - player.getActionSender().sendFriendUpdate(friend, 0); - } - break; } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/GlobalHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/GlobalHandler.java index 57d15ba..a5aa8df 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/GlobalHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/GlobalHandler.java @@ -9,20 +9,19 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class GlobalHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER sent alert (uID: " + uID + ")"); - String message = p.readString(); - for (Player player : world.getPlayers()) { - player.getActionSender().sendAlert(message, false); + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER sent alert (uID: " + uID + ")"); + String message = p.readString(); + for (Player player : world.getPlayers()) { + player.getActionSender().sendAlert(message, false); + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerInfoRequestHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerInfoRequestHandler.java index 8a92074..67f2a07 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerInfoRequestHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerInfoRequestHandler.java @@ -9,23 +9,23 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class PlayerInfoRequestHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private PlayerInfoRequestPacketBuilder builder = new PlayerInfoRequestPacketBuilder(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private PlayerInfoRequestPacketBuilder builder = new PlayerInfoRequestPacketBuilder(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER requested player information (uID: " + uID + ")"); - builder.setUID(uID); - builder.setPlayer(world.getPlayer(p.readLong())); - LSPacket temp = builder.getPacket(); - if (temp != null) { - session.write(temp); + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER requested player information (uID: " + uID + + ")"); + builder.setUID(uID); + builder.setPlayer(world.getPlayer(p.readLong())); + LSPacket temp = builder.getPacket(); + if (temp != null) { + session.write(temp); + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerListRequestHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerListRequestHandler.java index 0435847..e1d907f 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerListRequestHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/PlayerListRequestHandler.java @@ -9,22 +9,21 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class PlayerListRequestHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private PlayerListRequestPacketBuilder builder = new PlayerListRequestPacketBuilder(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private PlayerListRequestPacketBuilder builder = new PlayerListRequestPacketBuilder(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER requested player list (uID: " + uID + ")"); - builder.setUID(uID); - LSPacket temp = builder.getPacket(); - if (temp != null) { - session.write(temp); + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER requested player list (uID: " + uID + ")"); + builder.setUID(uID); + LSPacket temp = builder.getPacket(); + if (temp != null) { + session.write(temp); + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReceivePM.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReceivePM.java index 3011b5b..a0ee9dd 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReceivePM.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReceivePM.java @@ -2,34 +2,33 @@ package org.moparscape.msc.gs.phandler.ls; import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.Instance; -import org.moparscape.msc.gs.connection.LSPacket; import org.moparscape.msc.gs.connection.Packet; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; - public class ReceivePM implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - long sender = p.readLong(); - Player recipient = world.getPlayer(p.readLong()); - boolean avoidBlock = p.readByte() == 1; - if (recipient == null || !recipient.loggedIn()) { - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + long sender = p.readLong(); + Player recipient = world.getPlayer(p.readLong()); + boolean avoidBlock = p.readByte() == 1; + if (recipient == null || !recipient.loggedIn()) { + return; + } + if (recipient.getPrivacySetting(1) && !recipient.isFriendsWith(sender) + && !avoidBlock) { + return; + } + if (recipient.isIgnoring(sender) && !avoidBlock) { + return; + } + recipient.getActionSender().sendPrivateMessage(sender, + p.getRemainingData()); } - if (recipient.getPrivacySetting(1) && !recipient.isFriendsWith(sender) && !avoidBlock) { - return; - } - if (recipient.isIgnoring(sender) && !avoidBlock) { - return; - } - recipient.getActionSender().sendPrivateMessage(sender, p.getRemainingData()); - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReportInfoRequestHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReportInfoRequestHandler.java index 2c9f543..3424672 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReportInfoRequestHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ReportInfoRequestHandler.java @@ -10,27 +10,27 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class ReportInfoRequestHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private ReportInfoRequestPacketBuilder builder = new ReportInfoRequestPacketBuilder(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private ReportInfoRequestPacketBuilder builder = new ReportInfoRequestPacketBuilder(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER requested report information (uID: " + uID + ")"); - Player player = world.getPlayer(p.readLong()); - if (player == null) { - return; + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER requested report information (uID: " + uID + + ")"); + Player player = world.getPlayer(p.readLong()); + if (player == null) { + return; + } + builder.setUID(uID); + builder.setPlayer(player); + LSPacket temp = builder.getPacket(); + if (temp != null) { + session.write(temp); + } } - builder.setUID(uID); - builder.setPlayer(player); - LSPacket temp = builder.getPacket(); - if (temp != null) { - session.write(temp); - } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ShutdownHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ShutdownHandler.java index f43689b..1c4fd74 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/ShutdownHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/ShutdownHandler.java @@ -2,23 +2,20 @@ package org.moparscape.msc.gs.phandler.ls; import org.apache.mina.common.IoSession; import org.moparscape.msc.gs.Instance; -import org.moparscape.msc.gs.connection.LSPacket; import org.moparscape.msc.gs.connection.Packet; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class ShutdownHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER requested shutdown"); - Instance.getServer().kill(); - } + public void handlePacket(Packet p, IoSession session) throws Exception { + Logger.event("LOGIN_SERVER requested shutdown"); + Instance.getServer().kill(); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/StatRequestHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/StatRequestHandler.java index 15e9ebb..38bd819 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/StatRequestHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/StatRequestHandler.java @@ -9,22 +9,21 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class StatRequestHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); - private StatRequestPacketBuilder builder = new StatRequestPacketBuilder(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); + private StatRequestPacketBuilder builder = new StatRequestPacketBuilder(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER requested stats (uID: " + uID + ")"); - builder.setUID(uID); - LSPacket temp = builder.getPacket(); - if (temp != null) { - session.write(temp); + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER requested stats (uID: " + uID + ")"); + builder.setUID(uID); + LSPacket temp = builder.getPacket(); + if (temp != null) { + session.write(temp); + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/phandler/ls/UpdateHandler.java b/GameServer/src/org/moparscape/msc/gs/phandler/ls/UpdateHandler.java index 2ffc9e7..93d9ec6 100644 --- a/GameServer/src/org/moparscape/msc/gs/phandler/ls/UpdateHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/phandler/ls/UpdateHandler.java @@ -9,23 +9,24 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.phandler.PacketHandler; import org.moparscape.msc.gs.util.Logger; - public class UpdateHandler implements PacketHandler { - /** - * World instance - */ - public static final World world = Instance.getWorld(); + /** + * World instance + */ + public static final World world = Instance.getWorld(); - public void handlePacket(Packet p, IoSession session) throws Exception { - long uID = ((LSPacket) p).getUID(); - Logger.event("LOGIN_SERVER sent update (uID: " + uID + ")"); - String reason = p.readString(); - if (Instance.getServer().shutdownForUpdate()) { - for (Player player : world.getPlayers()) { - player.getActionSender().sendAlert("The server will be shutting down in 60 seconds: " + reason, false); - player.getActionSender().startShutdown(60); - } + public void handlePacket(Packet p, IoSession session) throws Exception { + long uID = ((LSPacket) p).getUID(); + Logger.event("LOGIN_SERVER sent update (uID: " + uID + ")"); + String reason = p.readString(); + if (Instance.getServer().shutdownForUpdate()) { + for (Player player : world.getPlayers()) { + player.getActionSender().sendAlert( + "The server will be shutting down in 60 seconds: " + + reason, false); + player.getActionSender().startShutdown(60); + } + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/ai/KingBlackDragon.java b/GameServer/src/org/moparscape/msc/gs/plugins/ai/KingBlackDragon.java index fc83746..58a4827 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/ai/KingBlackDragon.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/ai/KingBlackDragon.java @@ -119,7 +119,7 @@ public class KingBlackDragon extends NpcScript implements NpcAI { new Object[] { npc }) { public void action() { Npc n = (Npc) super.args[0]; - if (n != null || n.getHits() > 0) { + if (n != null && n.getHits() > 0) { NpcScript script = new NpcScript(); final Map dmgs = n .getSyndicate().getDamages(); diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/ai/RedDragon.java b/GameServer/src/org/moparscape/msc/gs/plugins/ai/RedDragon.java index 17c5d95..5b98962 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/ai/RedDragon.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/ai/RedDragon.java @@ -15,7 +15,6 @@ import org.moparscape.msc.gs.plugins.dependencies.NpcAI; import org.moparscape.msc.gs.plugins.dependencies.NpcScript; import org.moparscape.msc.gs.tools.DataConversions; - /** * KingBlackDragon intelligence class. * @@ -24,90 +23,101 @@ import org.moparscape.msc.gs.tools.DataConversions; */ public class RedDragon extends NpcScript implements NpcAI { - @Override - public int getID() { - return 201; - } + @Override + public int getID() { + return 201; + } - @Override - public void onHealthPercentage(Npc npc, int percent) { - } + @Override + public void onHealthPercentage(Npc npc, int percent) { + } - @Override - public void onMageAttack(Player attacker, Npc npc) { - - } + @Override + public void onMageAttack(Player attacker, Npc npc) { - @Override - public void onMeleeAttack(Player attacker, final Npc npc) { + } - } + @Override + public void onMeleeAttack(Player attacker, final Npc npc) { - @Override - public void onNpcAttack(Npc npc, Player attacker) { - - } + } - @Override - public void onNpcDeath(Npc npc, Player player) { - if(npc.getLocation().atAltar()) { - if(Config.f2pWildy) { - switch(DataConversions.random(0, 3)) { - case 0: { - if(DataConversions.random(0, 2000) < 4) { // Drop d med - World.getWorld().registerItem(new Item(795, player.getX(), player.getY(), 1, player)); - } - } - case 1: { - if(DataConversions.random(0, 1000) < 4) { // Drop d sq - World.getWorld().registerItem(new Item(1278, player.getX(), player.getY(), 1, player)); - } - } - case 2: { - if(DataConversions.random(0, 500) < 4) { // Drop d axe - World.getWorld().registerItem(new Item(594, player.getX(), player.getY(), 1, player)); - } - } - case 3: { - if(DataConversions.random(0, 500) < 4) { // Drop d long - World.getWorld().registerItem(new Item(593, player.getX(), player.getY(), 1, player)); - } - } - } - } - } - } + @Override + public void onNpcAttack(Npc npc, Player attacker) { - @Override - public void onRangedAttack(Player attacker, Npc npc) { - if(npc.getLocation().nearAltar() && !attacker.getLocation().nearAltar()) { - GameObject zara = new GameObject(attacker.getLocation(), 1036, 0, 0); - World.getWorld().registerGameObject(zara); - Instance.getDelayedEventHandler().add(new ObjectRemover(zara, 500)); - Player affectedPlayer = attacker; + } - int damag = 10; + @Override + public void onNpcDeath(Npc npc, Player player) { + if (npc.getLocation().atAltar()) { + if (Config.f2pWildy) { + switch (DataConversions.random(0, 3)) { + case 0: { + if (DataConversions.random(0, 2000) < 4) { // Drop d med + World.getWorld().registerItem( + new Item(795, player.getX(), player.getY(), 1, + player)); + } + } + case 1: { + if (DataConversions.random(0, 1000) < 4) { // Drop d sq + World.getWorld().registerItem( + new Item(1278, player.getX(), player.getY(), 1, + player)); + } + } + case 2: { + if (DataConversions.random(0, 500) < 4) { // Drop d axe + World.getWorld().registerItem( + new Item(594, player.getX(), player.getY(), 1, + player)); + } + } + case 3: { + if (DataConversions.random(0, 500) < 4) { // Drop d long + World.getWorld().registerItem( + new Item(593, player.getX(), player.getY(), 1, + player)); + } + } + } + } + } + } + + @Override + public void onRangedAttack(Player attacker, Npc npc) { + if (npc.getLocation().nearAltar() + && !attacker.getLocation().nearAltar()) { + GameObject zara = new GameObject(attacker.getLocation(), 1036, 0, 0); + World.getWorld().registerGameObject(zara); + Instance.getDelayedEventHandler().add(new ObjectRemover(zara, 500)); + Player affectedPlayer = attacker; + + int damag = 10; Projectile projectil = new Projectile(npc, attacker, 1); - + attacker.setLastDamage(damag); int newhp = attacker.getHits() - damag; attacker.setHits(newhp); ArrayList playersToInfor = new ArrayList(); playersToInfor.addAll(npc.getViewArea().getPlayersInView()); playersToInfor.addAll(attacker.getViewArea().getPlayersInView()); - for(Player p : playersToInfor) { - p.informOfProjectile(projectil); - p.informOfModifiedHits(attacker); + for (Player p : playersToInfor) { + p.informOfProjectile(projectil); + p.informOfModifiedHits(attacker); } attacker.getActionSender().sendStat(3); - if(newhp <= 0) { + if (newhp <= 0) { attacker.killedBy(npc, false); } - affectedPlayer.getActionSender().sendMessage("@red@The dragon startles you by breathing fire on you!"); - affectedPlayer.getActionSender().sendMessage("Maybe I should go closer and show him I'm not afraid!"); + affectedPlayer.getActionSender().sendMessage( + "@red@The dragon startles you by breathing fire on you!"); + affectedPlayer.getActionSender().sendMessage( + "Maybe I should go closer and show him I'm not afraid!"); affectedPlayer.resetRange(); - } - } + } + } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcAI.java b/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcAI.java index 42a472d..7188a12 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcAI.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcAI.java @@ -11,61 +11,61 @@ import org.moparscape.msc.gs.model.Player; */ public interface NpcAI { - /** - * fired off each time the health of an implemented NPC script changes - * - * @param npc - * - the NPC object - * @param percent - * - the percentage out of 100, that the health of the NPC is on. - */ - public void onHealthPercentage(Npc npc, int percent); + /** + * fired off each time the health of an implemented NPC script changes + * + * @param npc + * - the NPC object + * @param percent + * - the percentage out of 100, that the health of the NPC is on. + */ + public void onHealthPercentage(Npc npc, int percent); - /** - * fired off when a player attacks the implemented NPC - * - * @param attacker - * @param npc - */ - public void onMeleeAttack(Player attacker, Npc npc); + /** + * fired off when a player attacks the implemented NPC + * + * @param attacker + * @param npc + */ + public void onMeleeAttack(Player attacker, Npc npc); - /** - * fired off when the NPC dies - * - * @param npc - * @param player - */ - public void onNpcDeath(Npc npc, Player player); + /** + * fired off when the NPC dies + * + * @param npc + * @param player + */ + public void onNpcDeath(Npc npc, Player player); - /** - * fired off when someone shoots magic at the NPC - * - * @param attacker - * @param npc - */ - public void onMageAttack(Player attacker, Npc npc); + /** + * fired off when someone shoots magic at the NPC + * + * @param attacker + * @param npc + */ + public void onMageAttack(Player attacker, Npc npc); - /** - * fired off when someone ranges the NPC - * - * @param p - * @param npc - */ - public void onRangedAttack(Player p, Npc npc); + /** + * fired off when someone ranges the NPC + * + * @param p + * @param npc + */ + public void onRangedAttack(Player p, Npc npc); - /** - * fired off when the NPC goes to attack the player - * - * @param npc - * @param player - */ - public void onNpcAttack(Npc npc, Player player); + /** + * fired off when the NPC goes to attack the player + * + * @param npc + * @param player + */ + public void onNpcAttack(Npc npc, Player player); - /** - * gets the ID of the NPC script in use - * - * @return - */ - public int getID(); + /** + * gets the ID of the NPC script in use + * + * @return + */ + public int getID(); } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcScript.java b/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcScript.java index 19d13b3..b5142a5 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcScript.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/NpcScript.java @@ -6,38 +6,37 @@ import org.moparscape.msc.gs.model.ChatMessage; import org.moparscape.msc.gs.model.Mob; import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; -import org.moparscape.msc.gs.model.Projectile; - public class NpcScript { - public void shootPlayer(Npc n, Player player, int damage, int sprite) { + public void shootPlayer(Npc n, Player player, int damage, int sprite) { - Mob affectedMob = player; - affectedMob.setLastDamage(damage); - int newHp = affectedMob.getHits() - damage; - affectedMob.setHits(newHp); - ArrayList playersToInform = new ArrayList(); - playersToInform.addAll(n.getViewArea().getPlayersInView()); - playersToInform.addAll(affectedMob.getViewArea().getPlayersInView()); - for (Player p : playersToInform) { - p.informOfModifiedHits(affectedMob); + Mob affectedMob = player; + affectedMob.setLastDamage(damage); + int newHp = affectedMob.getHits() - damage; + affectedMob.setHits(newHp); + ArrayList playersToInform = new ArrayList(); + playersToInform.addAll(n.getViewArea().getPlayersInView()); + playersToInform.addAll(affectedMob.getViewArea().getPlayersInView()); + for (Player p : playersToInform) { + p.informOfModifiedHits(affectedMob); + } + if (affectedMob instanceof Player) { + Player affectedPlayer = (Player) affectedMob; + affectedPlayer.getActionSender().sendStat(3); + } } - if (affectedMob instanceof Player) { - Player affectedPlayer = (Player) affectedMob; - affectedPlayer.getActionSender().sendStat(3); - } - } - public void sendNpcChat(Npc n, Player p, String msg, boolean area) { - p.informOfNpcMessage(new ChatMessage(n, msg, p)); - if (area) { - for (Player pl : p.getViewArea().getPlayersInView()) { - if (pl.equals(p)) - continue; - pl.getActionSender().sendMessage("@yel@" + n.getDef().name + ": " + msg); - } + public void sendNpcChat(Npc n, Player p, String msg, boolean area) { + p.informOfNpcMessage(new ChatMessage(n, msg, p)); + if (area) { + for (Player pl : p.getViewArea().getPlayersInView()) { + if (pl.equals(p)) + continue; + pl.getActionSender().sendMessage( + "@yel@" + n.getDef().name + ": " + msg); + } + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/PluginHandler.java b/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/PluginHandler.java index cd78000..0dc63d3 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/PluginHandler.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/dependencies/PluginHandler.java @@ -12,7 +12,6 @@ import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.plugins.listeners.ObjectListener; import org.moparscape.msc.gs.util.Logger; - /** * Initiates plugins that implements some listeners * @@ -21,164 +20,175 @@ import org.moparscape.msc.gs.util.Logger; */ public class PluginHandler { - /** - * Our PluginHandler - */ - public static PluginHandler handler = null; - /** - * every plugin is stored in here as a 'Class' - */ - public static ArrayList allClasses = new ArrayList(); - /** - * All plugins using an object listener is stored here - */ - private ArrayList objListeners = new ArrayList(); - /** - * All npc plugins using some AI go here. - */ - private ArrayList npcAI = new ArrayList(); + /** + * Our PluginHandler + */ + public static PluginHandler handler = null; + /** + * every plugin is stored in here as a 'Class' + */ + public static ArrayList> allClasses = new ArrayList>(); + /** + * All plugins using an object listener is stored here + */ + private ArrayList objListeners = new ArrayList(); + /** + * All npc plugins using some AI go here. + */ + private ArrayList npcAI = new ArrayList(); - public static ArrayList getAllClasses() { - return allClasses; - } - - public static void setAllClasses(ArrayList allClasses) { - PluginHandler.allClasses = allClasses; - } - - public NpcAI getNpcAIHandler(int id) { - for (NpcAI ai : getNpcAI()) { - if (ai.getID() == id) - return ai; + public static ArrayList> getAllClasses() { + return allClasses; } - return null; - } - public ArrayList getNpcAI() { - return npcAI; - } + public static void setAllClasses(ArrayList> allClasses) { + PluginHandler.allClasses = allClasses; + } - public void setNpcAI(ArrayList npcAI) { - this.npcAI = npcAI; - } + public NpcAI getNpcAIHandler(int id) { + for (NpcAI ai : getNpcAI()) { + if (ai.getID() == id) + return ai; + } + return null; + } - public ArrayList getObjListeners() { - return objListeners; - } + public ArrayList getNpcAI() { + return npcAI; + } - public void setObjListeners(ArrayList objListeners) { - this.objListeners = objListeners; - } + public void setNpcAI(ArrayList npcAI) { + this.npcAI = npcAI; + } - /** - * Singleton, initiates and returns. - * - * @return - the PluginHandler - */ - public static PluginHandler getPluginHandler() { - if (handler == null) - handler = new PluginHandler(); - return handler; - } + public ArrayList getObjListeners() { + return objListeners; + } - /** - * Initiates the plugins. - */ - public void initPlugins() { - try { - try { - getClassesFromFileJarFile("org.moparscape.msc.gs.plugins.plugs", System.getProperty("user.dir")); - getClassesFromFileJarFile("org.moparscape.msc.gs.plugins.plugs.skills", System.getProperty("user.dir")); - getClassesFromFileJarFile("org.moparscape.msc.gs.plugins.ai", System.getProperty("user.dir")); - for (Class c : allClasses) { - Object cl; - cl = c.newInstance(); - if (cl instanceof ObjectListener) { - ObjectListener obj = (ObjectListener) cl; - objListeners.add(obj); - } else if (cl instanceof NpcAI) { - NpcAI ai = (NpcAI) cl; - npcAI.add(ai); - } + public void setObjListeners(ArrayList objListeners) { + this.objListeners = objListeners; + } + + /** + * Singleton, initiates and returns. + * + * @return - the PluginHandler + */ + public static PluginHandler getPluginHandler() { + if (handler == null) + handler = new PluginHandler(); + return handler; + } + + /** + * Initiates the plugins. + */ + public void initPlugins() { + try { + try { + getClassesFromFileJarFile( + "org.moparscape.msc.gs.plugins.plugs", + System.getProperty("user.dir")); + getClassesFromFileJarFile( + "org.moparscape.msc.gs.plugins.plugs.skills", + System.getProperty("user.dir")); + getClassesFromFileJarFile("org.moparscape.msc.gs.plugins.ai", + System.getProperty("user.dir")); + for (Class c : allClasses) { + Object cl; + cl = c.newInstance(); + if (cl instanceof ObjectListener) { + ObjectListener obj = (ObjectListener) cl; + objListeners.add(obj); + } else if (cl instanceof NpcAI) { + NpcAI ai = (NpcAI) cl; + npcAI.add(ai); + } + } + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); } - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); + Logger.println(allClasses.size() + " Plugins Loaded"); } - Logger.println(allClasses.size() + " Plugins Loaded"); - } + /** + * Fires off the action to the plugins + * + * @param obj + * - the object model + * @param cmd + * - the command String + * @param player + * - the player model + */ + public boolean handleObjectAction(GameObject obj, String cmd, Player player) { + for (ObjectListener ol : objListeners) { + for (int i : ol.getAssociatedIDS()) { + if (i == obj.getID()) { + if (ol.onObjectAction(obj, cmd, player)) // if true, it's + // handled. + return true; + } - /** - * Fires off the action to the plugins - * - * @param obj - * - the object model - * @param cmd - * - the command String - * @param player - * - the player model - */ - public boolean handleObjectAction(GameObject obj, String cmd, Player player) { - for (ObjectListener ol : objListeners) { - for (int i : ol.getAssociatedIDS()) { - if (i == obj.getID()) { - if (ol.onObjectAction(obj, cmd, player)) // if true, it's - // handled. - return true; + } + } + return false; + } + + /** + * Just gets all the classes inside the Plugins/plug folder, leeched from + * Java forums. + * + * @param pckgname + * @param baseDirPath + * @return + * @throws ClassNotFoundException + */ + public static void getClassesFromFileJarFile(String pckgname, + String baseDirPath) throws ClassNotFoundException { + ArrayList> classes = new ArrayList>(); + String path = pckgname.replace('.', '/') + "/"; + File mF = new File(baseDirPath); + String[] files = mF.list(); + ArrayList jars = new ArrayList(); + for (int i = 0; i < files.length; i++) + if (files[i].endsWith(".jar")) + jars.add(files[i]); + + for (int i = 0; i < jars.size(); i++) { + try { + JarFile currentFile = new JarFile(jars.get(i).toString()); + for (Enumeration e = currentFile.entries(); e + .hasMoreElements();) { + JarEntry current = (JarEntry) e.nextElement(); + if (current.getName().contains("$")) + continue; + if (current.getName().length() > path.length() + && current.getName().substring(0, path.length()) + .equals(path) + && current.getName().endsWith(".class")) + classes.add(Class.forName(current.getName() + .replaceAll("/", ".").replace(".class", ""))); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + Class[] classesA = new Class[classes.size()]; + classes.toArray(classesA); + for (Class c : classesA) { + allClasses.add(c); } - } } - return false; - } - - /** - * Just gets all the classes inside the Plugins/plug folder, leeched from - * Java forums. - * - * @param pckgname - * @param baseDirPath - * @return - * @throws ClassNotFoundException - */ - public static void getClassesFromFileJarFile(String pckgname, String baseDirPath) throws ClassNotFoundException { - ArrayList classes = new ArrayList(); - String path = pckgname.replace('.', '/') + "/"; - File mF = new File(baseDirPath); - String[] files = mF.list(); - ArrayList jars = new ArrayList(); - for (int i = 0; i < files.length; i++) - if (files[i].endsWith(".jar")) - jars.add(files[i]); - - for (int i = 0; i < jars.size(); i++) { - try { - JarFile currentFile = new JarFile(jars.get(i).toString()); - for (Enumeration e = currentFile.entries(); e.hasMoreElements();) { - JarEntry current = (JarEntry) e.nextElement(); - if (current.getName().contains("$")) - continue; - if (current.getName().length() > path.length() && current.getName().substring(0, path.length()).equals(path) && current.getName().endsWith(".class")) - classes.add(Class.forName(current.getName().replaceAll("/", ".").replace(".class", ""))); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - Class[] classesA = new Class[classes.size()]; - classes.toArray(classesA); - for (Class c : classesA) { - allClasses.add(c); - } - - } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/extras/Thieving.java b/GameServer/src/org/moparscape/msc/gs/plugins/extras/Thieving.java index 216b37b..aa466bc 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/extras/Thieving.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/extras/Thieving.java @@ -21,7 +21,6 @@ import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.states.Action; import org.moparscape.msc.gs.util.Logger; - /** * * @author xEnt Thieving Class, All types of thieving stored here. @@ -29,866 +28,1041 @@ import org.moparscape.msc.gs.util.Logger; public class Thieving { - public static String[] StealChats = { "You think i'm going to buy my own items off you? Get out of here.", "You've just stolen from me, I'm not selling you anything.", "How dare you try and buy from me after you have stolen.", "Thief, go away now before i call security", "You have guts, trying to sell my own goods back to me", "Real thiefs don't sell back to their victims", "i know better than to buy my own items from thiefs" }; + public static String[] StealChats = { + "You think i'm going to buy my own items off you? Get out of here.", + "You've just stolen from me, I'm not selling you anything.", + "How dare you try and buy from me after you have stolen.", + "Thief, go away now before i call security", + "You have guts, trying to sell my own goods back to me", + "Real thiefs don't sell back to their victims", + "i know better than to buy my own items from thiefs" }; - private static final World world = Instance.getWorld(); + private static final World world = Instance.getWorld(); - public static int Rands(int max) { - Random r = new Random(); - return r.nextInt(max); - } - - public static int Rands(int min, int max) { - Random r = new Random(); - return r.nextInt(max) + min; - } - - public static boolean stallSuccess(int lvl, int reqLevel) { - Random r = new Random(); - double dif = lvl - reqLevel; - double rand = ((r.nextDouble() * 100) + 1) / 100; - double success = ((3.27 * Math.pow(10, -6)) * Math.pow(dif, 4) + (-5.516 * Math.pow(10, -4)) * Math.pow(dif, 3) + 0.014307 * Math.pow(dif, 2) + 1.65560813 * dif + 18.2095966) / 100.0; - if (success < 0.35) - success = 0.35; - if (reqLevel < 15) - if (lvl - reqLevel < 10) - if (Rands(1, 10) == 5) - success = 1.0; - success = success * 2; - return rand < success; - } - - public static boolean thievingSuccess(int lvl, int reqLevel) { - Random r = new Random(); - double dif = lvl - reqLevel; - double rand = ((r.nextDouble() * 100) + 1) / 100; - double success = ((3.27 * Math.pow(10, -6)) * Math.pow(dif, 4) + (-5.516 * Math.pow(10, -4)) * Math.pow(dif, 3) + 0.014307 * Math.pow(dif, 2) + 1.65560813 * dif + 18.2095966) / 100.0; - if (success < 0.35) - success = 0.35; - if (reqLevel < 15) { - if (lvl - reqLevel < 10) { - if (Rands(1, 10) == 5) - success = 1.0; - } + public static int Rands(int max) { + Random r = new Random(); + return r.nextInt(max); } - if (rand < success) - return false; - return true; - } - private Mob affectedMob; - private Npc affectedNpc; - private int Amount[] = { -1, -1 }; - private String[] caughtChats = { "Guards! Guards! Im being Robbed!", "Help Guards i am being Robbed please help!", "Someone help! My items are getting stolen!", "You'll wish you never did that, Thief!", "You are going to pay for that", "-name- how could you steal from me? Guards!", "-name- get your hands out of my stall!", "Hey -name- thats not yours!", "Dont steal from me -name- Im going to go tell a mod", "Oi! -name- you deserve a spanking!" }; - private String[] Chats = { "Oi! Get your hands out of there -name-!", "Hey thief! get here!", "Trying to steal from me hmm?", "No one steals from me!", "Take those hands off me Thief", "Are you trying to steal from me -name-?", "Dont you dare touch me", "Thief get back here now!", "Stealing won't get you anywhere", "Bad person! you shall die", "Die evil thief!", "You are going to pay for that", "Ill make you wish you were never born", "-name- i am going to hurt you", "-name- dont steal from me again", "Remove your filthy hands off me", "A real man doesn't need to steal" }; - // ID, LvlReq, Exp, RespawnTime, Loot then(amount) - public int[][] Chests = { { 340, 59, 250, 45000, 619, 2 }, // Blood rune - // chest. - { 334, 18, 8, 10000, 10, 50 }, // Next 2 nature chest. - { 336, 72, 500, 180000, 546, 1, 154, 1, 160, 1, 10, 1000 }, // Good - // chest, - // ardy.. - { 339 } // Dont add anything to this, its a dummy chest. - }; - private int curDoor = -1; - // given. - private int curStall = -1; - private GameObjectDef def; - // Cur X, Cur Y, New X, New Y, Lvl, Exp - private int[][] Doors = { { 586, 581, 585, 581, 10, 13 }, // Nat rune West - // house (In) - { 585, 581, 586, 581, 10, 13 }, // Nat rune West house (Out) - { 539, 598, 539, 599, 10, 13 }, // Nat Rune East House (Out) - { 539, 599, 539, 598, 10, 13 }, // Nat Rune East House (Out) - { 609, 1547, 609, 1548, 61, 43 }, // Paladin Door (In) - { 609, 1548, 609, 1547, 61, 43 }, // Paladin Door (Out) - { 537, 3425, 536, 3425, 31, 25 }, // Ardy Door - { 536, 3425, 537, 3425, 31, 25 }, // Ardy Door - { 617, 556, 617, 555, 46, 37 }, // Blood rune door - { 617, 555, 617, 556, 46, 37 }, // Blood rune door - { 593, 3590, 593, 3589, 61, 41 }, // yanile door - { 593, 3589, 593, 3590, 61, 41 }, // yanile door - { 266, 100, 266, 99, 39, 35 }, // pirate doors wildy - { 266, 99, 266, 100, 39, 35 }, // pirate doors wildy - { 160, 103, 160, 102, 30, 28 }, // Axe hut wildy - { 160, 102, 160, 103, 30, 28 }, // Axe hut wildy - { 581, 580, 580, 580, 10, 30 }, { 580, 580, 581, 580, 10, 30 }, { 538, 592, 538, 591, 8, 10 }, // Some - // ardy - // door - { 538, 591, 538, 592, 8, 10 } // some ardy door - }; - private int exp = 0; - private int Exp = -1; + public static int Rands(int min, int max) { + Random r = new Random(); + return r.nextInt(max) + min; + } - public int ExpMultiplier = 1; // Modify this number to multiply the XP + public static boolean stallSuccess(int lvl, int reqLevel) { + Random r = new Random(); + double dif = lvl - reqLevel; + double rand = ((r.nextDouble() * 100) + 1) / 100; + double success = ((3.27 * Math.pow(10, -6)) * Math.pow(dif, 4) + + (-5.516 * Math.pow(10, -4)) * Math.pow(dif, 3) + 0.014307 + * Math.pow(dif, 2) + 1.65560813 * dif + 18.2095966) / 100.0; + if (success < 0.35) + success = 0.35; + if (reqLevel < 15) + if (lvl - reqLevel < 10) + if (Rands(1, 10) == 5) + success = 1.0; + success = success * 2; + return rand < success; + } - private int Loot[] = { -1, -1 }; + public static boolean thievingSuccess(int lvl, int reqLevel) { + Random r = new Random(); + double dif = lvl - reqLevel; + double rand = ((r.nextDouble() * 100) + 1) / 100; + double success = ((3.27 * Math.pow(10, -6)) * Math.pow(dif, 4) + + (-5.516 * Math.pow(10, -4)) * Math.pow(dif, 3) + 0.014307 + * Math.pow(dif, 2) + 1.65560813 * dif + 18.2095966) / 100.0; + if (success < 0.35) + success = 0.35; + if (reqLevel < 15) { + if (lvl - reqLevel < 10) { + if (Rands(1, 10) == 5) + success = 1.0; + } + } + if (rand < success) + return false; + return true; + } - private int lvl = 1; + private Mob affectedMob; + private Npc affectedNpc; + private int Amount[] = { -1, -1 }; + private String[] caughtChats = { "Guards! Guards! Im being Robbed!", + "Help Guards i am being Robbed please help!", + "Someone help! My items are getting stolen!", + "You'll wish you never did that, Thief!", + "You are going to pay for that", + "-name- how could you steal from me? Guards!", + "-name- get your hands out of my stall!", + "Hey -name- thats not yours!", + "Dont steal from me -name- Im going to go tell a mod", + "Oi! -name- you deserve a spanking!" }; + private String[] Chats = { "Oi! Get your hands out of there -name-!", + "Hey thief! get here!", "Trying to steal from me hmm?", + "No one steals from me!", "Take those hands off me Thief", + "Are you trying to steal from me -name-?", + "Dont you dare touch me", "Thief get back here now!", + "Stealing won't get you anywhere", "Bad person! you shall die", + "Die evil thief!", "You are going to pay for that", + "Ill make you wish you were never born", + "-name- i am going to hurt you", "-name- dont steal from me again", + "Remove your filthy hands off me", + "A real man doesn't need to steal" }; + // ID, LvlReq, Exp, RespawnTime, Loot then(amount) + public int[][] Chests = { { 340, 59, 250, 45000, 619, 2 }, // Blood rune + // chest. + { 334, 18, 8, 10000, 10, 50 }, // Next 2 nature chest. + { 336, 72, 500, 180000, 546, 1, 154, 1, 160, 1, 10, 1000 }, // Good + // chest, + // ardy.. + { 339 } // Dont add anything to this, its a dummy chest. + }; + private int curDoor = -1; + // given. + private int curStall = -1; + private GameObjectDef def; + // Cur X, Cur Y, New X, New Y, Lvl, Exp + private int[][] Doors = { + { 586, 581, 585, 581, 10, 13 }, // Nat rune West + // house (In) + { 585, 581, 586, 581, 10, 13 }, // Nat rune West house (Out) + { 539, 598, 539, 599, 10, 13 }, // Nat Rune East House (Out) + { 539, 599, 539, 598, 10, 13 }, // Nat Rune East House (Out) + { 609, 1547, 609, 1548, 61, 43 }, // Paladin Door (In) + { 609, 1548, 609, 1547, 61, 43 }, // Paladin Door (Out) + { 537, 3425, 536, 3425, 31, 25 }, // Ardy Door + { 536, 3425, 537, 3425, 31, 25 }, // Ardy Door + { 617, 556, 617, 555, 46, 37 }, // Blood rune door + { 617, 555, 617, 556, 46, 37 }, // Blood rune door + { 593, 3590, 593, 3589, 61, 41 }, // yanile door + { 593, 3589, 593, 3590, 61, 41 }, // yanile door + { 266, 100, 266, 99, 39, 35 }, // pirate doors wildy + { 266, 99, 266, 100, 39, 35 }, // pirate doors wildy + { 160, 103, 160, 102, 30, 28 }, // Axe hut wildy + { 160, 102, 160, 103, 30, 28 }, // Axe hut wildy + { 581, 580, 580, 580, 10, 30 }, { 580, 580, 581, 580, 10, 30 }, + { 538, 592, 538, 591, 8, 10 }, // Some + // ardy + // door + { 538, 591, 538, 592, 8, 10 } // some ardy door + }; + private int exp = 0; - private int npcID; + public int ExpMultiplier = 1; // Modify this number to multiply the XP - private GameObject object; + private int Loot[] = { -1, -1 }; - private int ourChest = -1; + private int lvl = 1; - private Player player; + private int npcID; - private int[][] StallNpcs = { { 325, 543, 546, 597, 602 }, // Baker - { -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1 }, { 328, 553, 558, 592, 595 }, // Silver - // merchant - { 329, 542, 547, 588, 593 }, // Spice merchant - { 330, 549, 553, 597, 602 } // Gem merchant - }; + private GameObject object; - private int[][] StallProtectorLvls = { { 28 }, // Guards - { 28 }, // Guards - { 28, 56 }, // Guards + Knights - { 56 }, // Knights - { 56, 71 }, // Knights + Paladins - { 71, 83 } // Paladins + Heroes - }; + private int ourChest = -1; - // LvReq, Obj ID, Exp, RespawnTime, LootID(s) - private int[][] Stalls = { { 5, 322, 16, 5, 330 }, // Bakers - { 20, 323, 24, 11, 200 }, // Silk - { 35, 324, 36, 18, 541 }, // Fur - { 50, 325, 54, 31, 383 }, // Silver - { 65, 326, 81, 45, 707 }, // Spice - { 75, 327, 16, 80, 160, 159, 158, 157 } // Gem - }; + private Player player; - public Thieving(Player p, GameObject obj) { - this.player = p; - this.object = obj; - this.def = object.getGameObjectDef(); - } + private int[][] StallNpcs = { + { 325, 543, 546, 597, 602 }, // Baker + { -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1 }, + { 328, 553, 558, 592, 595 }, // Silver + // merchant + { 329, 542, 547, 588, 593 }, // Spice merchant + { 330, 549, 553, 597, 602 } // Gem merchant + }; - public Thieving(Player p, Npc np, Mob mb) { - this.player = p; - this.affectedNpc = np; - this.affectedMob = mb; - npcID = affectedNpc.getID(); - } + /* + * private int[][] StallProtectorLvls = { { 28 }, // Guards { 28 }, // + * Guards { 28, 56 }, // Guards + Knights { 56 }, // Knights { 56, 71 }, // + * Knights + Paladins { 71, 83 } // Paladins + Heroes }; + */ - public void beginPickpocket() { - try { - boolean ret = false; + // LvReq, Obj ID, Exp, RespawnTime, LootID(s) + private int[][] Stalls = { { 5, 322, 16, 5, 330 }, // Bakers + { 20, 323, 24, 11, 200 }, // Silk + { 35, 324, 36, 18, 541 }, // Fur + { 50, 325, 54, 31, 383 }, // Silver + { 65, 326, 81, 45, 707 }, // Spice + { 75, 327, 16, 80, 160, 159, 158, 157 } // Gem + }; - switch (npcID) { + public Thieving(Player p, GameObject obj) { + this.player = p; + this.object = obj; + this.setDef(object.getGameObjectDef()); + } - case 318: - case 11: - exp = 8; - lvl = 0; - Loot[0] = 10; - Amount[0] = 3; - break; + public Thieving(Player p, Npc np, Mob mb) { + this.player = p; + this.affectedNpc = np; + this.affectedMob = mb; + npcID = affectedNpc.getID(); + } - case 63: - exp = 12; - lvl = 10; - Loot[0] = 10; - Amount[0] = 9; - break; + public void beginPickpocket() { + try { + boolean ret = false; - case 159: - case 320: - exp = 26; - lvl = 25; - Loot[0] = 10; - Amount[0] = 18; - break; + switch (npcID) { - case 342: - exp = 36; - lvl = 32; - setLootArrays(0); - break; + case 318: + case 11: + exp = 8; + lvl = 0; + Loot[0] = 10; + Amount[0] = 3; + break; - case 65: - case 100: - case 321: - exp = 46; - lvl = 40; - Loot[0] = 10; - Amount[0] = 30; - break; + case 63: + exp = 12; + lvl = 10; + Loot[0] = 10; + Amount[0] = 9; + break; - case 322: - exp = 85; - lvl = 55; - Loot[0] = 10; - Amount[0] = 50; - break; + case 159: + case 320: + exp = 26; + lvl = 25; + Loot[0] = 10; + Amount[0] = 18; + break; - case 574: - case 685: - exp = 138; - lvl = 65; - Loot[0] = 10; - Loot[1] = 138; - Amount[0] = 60; - Amount[1] = 1; - break; + case 342: + exp = 36; + lvl = 32; + setLootArrays(0); + break; - case 323: - exp = 152; - lvl = 70; - Loot[0] = 10; - Loot[1] = 41; - Amount[0] = 80; - Amount[1] = 1; - break; + case 65: + case 100: + case 321: + exp = 46; + lvl = 40; + Loot[0] = 10; + Amount[0] = 30; + break; - case 581: - case 582: - case 583: - case 580: - exp = 198; - lvl = 75; - setLootArrays(1); - break; + case 322: + exp = 85; + lvl = 55; + Loot[0] = 10; + Amount[0] = 50; + break; - case 324: - exp = 274; - lvl = 80; - setLootArrays(2); - break; + case 574: + case 685: + exp = 138; + lvl = 65; + Loot[0] = 10; + Loot[1] = 138; + Amount[0] = 60; + Amount[1] = 1; + break; - default: - player.getActionSender().sendMessage("Sorry, this NPC has not been added to the Pickpocketing list yet."); - Logger.println("Player " + player.getUsername() + " found a NPC (pickpocket) not added, ID: " + npcID); - ret = true; - } + case 323: + exp = 152; + lvl = 70; + Loot[0] = 10; + Loot[1] = 41; + Amount[0] = 80; + Amount[1] = 1; + break; - if (ret) { - player.setBusy(false); - player.setSpam(false); - return; - } + case 581: + case 582: + case 583: + case 580: + exp = 198; + lvl = 75; + setLootArrays(1); + break; - player.setFollowing(affectedMob); - Instance.getDelayedEventHandler().add(new WalkToMobEvent(player, affectedMob, 1) { - public void arrived() { - if (owner.getSpam()) { - return; - } else { + case 324: + exp = 274; + lvl = 80; + setLootArrays(2); + break; - if (affectedMob.inCombat() || owner.isBusy()) { - owner.setSpam(false); - owner.setBusy(false); - return; + default: + player.getActionSender() + .sendMessage( + "Sorry, this NPC has not been added to the Pickpocketing list yet."); + Logger.println("Player " + player.getUsername() + + " found a NPC (pickpocket) not added, ID: " + npcID); + ret = true; } - if (affectedNpc == null || affectedNpc.inCombat()) { - owner.resetPath(); - owner.setBusy(false); - owner.setSpam(false); - return; - } else if (owner == null) { - affectedNpc.unblock(); - return; + if (ret) { + player.setBusy(false); + player.setSpam(false); + return; } - if (!owner.nextTo(affectedMob)) { - owner.setSpam(false); - affectedMob.setBusy(false); - owner.setBusy(false); - return; - } + player.setFollowing(affectedMob); + Instance.getDelayedEventHandler().add( + new WalkToMobEvent(player, affectedMob, 1) { + public void arrived() { + if (owner.getSpam()) { + return; + } else { - owner.setSpam(true); - // affectedNpc.blockedBy(player); - owner.setBusy(true); - if (owner.getCurStat(17) < lvl) { - owner.getActionSender().sendMessage("You must be at least " + lvl + " thieving to pick the " + affectedNpc.getDef().name + "'s pocket."); - owner.setBusy(false); - // affectedNpc.unblock(); - owner.setBusy(false); - owner.setSpam(false); - return; - } - - affectedNpc.resetPath(); - Bubble bubble = new Bubble(player, 16); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - owner.getActionSender().sendMessage("You attempt to pick the " + affectedNpc.getDef().name + "'s pocket..."); - - owner.setBusy(true); + if (affectedMob.inCombat() || owner.isBusy()) { + owner.setSpam(false); + owner.setBusy(false); + return; + } - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - owner.setBusy(false); - affectedNpc.setBusy(false); - if (chanceFormulae(lvl)) { - owner.setSpam(false); - owner.getActionSender().sendMessage("You sucessfully stole from the " + affectedNpc.getDef().name); - for (int i = 0; i < Loot.length; i++) { - owner.getInventory().add(new InvItem(Loot[i], Amount[i])); - } - owner.getActionSender().sendInventory(); - owner.incExp(17, exp * ExpMultiplier, true); - owner.getActionSender().sendStat(17); - owner.setBusy(false); - affectedNpc.unblock(); - } else { + if (affectedNpc == null + || affectedNpc.inCombat()) { + owner.resetPath(); + owner.setBusy(false); + owner.setSpam(false); + return; + } else if (owner == null) { + affectedNpc.unblock(); + return; + } - owner.setSpam(false); - owner.getActionSender().sendMessage("You fail to pick the " + affectedNpc.getDef().name + "'s pocket."); - int temp = Rand(10); - if (temp >= 3) { - owner.setBusy(false); - affectedNpc.unblock(); - return; - } + if (!owner.nextTo(affectedMob)) { + owner.setSpam(false); + affectedMob.setBusy(false); + owner.setBusy(false); + return; + } - affectedNpc.resetPath(); - owner.setBusy(true); - if (affectedNpc == null || affectedNpc.inCombat()) { - owner.resetPath(); - owner.setBusy(false); - owner.setSpam(false); - return; - } else if (owner == null) { - affectedNpc.unblock(); - return; - } - String msg = Chats[Rand(Chats.length)]; - msg = msg.replace("-name-", owner.getUsername()); - owner.informOfNpcMessage(new ChatMessage(affectedNpc, msg, owner)); - world.getDelayedEventHandler().add(new MiniEvent(owner, 1000) { - public void action() { - if (affectedNpc == null || affectedNpc.inCombat()) { - owner.resetPath(); - owner.setBusy(false); - owner.setSpam(false); - return; - } else if (owner == null) { - affectedNpc.unblock(); - return; - } - owner.setBusy(false); - // affectedNpc.unblock(); - affectedNpc.resetPath(); + owner.setSpam(true); + // affectedNpc.blockedBy(player); + owner.setBusy(true); + if (owner.getCurStat(17) < lvl) { + owner.getActionSender().sendMessage( + "You must be at least " + lvl + + " thieving to pick the " + + affectedNpc.getDef().name + + "'s pocket."); + owner.setBusy(false); + // affectedNpc.unblock(); + owner.setBusy(false); + owner.setSpam(false); + return; + } - owner.resetPath(); - owner.resetAll(); - owner.getActionSender().sendSound("underattack"); - owner.setStatus(Action.FIGHTING_MOB); - owner.getActionSender().sendMessage("You are under attack!"); + affectedNpc.resetPath(); + Bubble bubble = new Bubble(player, 16); + for (Player p : owner.getViewArea() + .getPlayersInView()) { + p.informOfBubble(bubble); + } + owner.getActionSender().sendMessage( + "You attempt to pick the " + + affectedNpc.getDef().name + + "'s pocket..."); - affectedNpc.resetPath(); - affectedNpc.setLocation(owner.getLocation(), true); - affectedNpc.resetPath(); - affectedNpc.setBusy(true); + owner.setBusy(true); - for (Player p : affectedNpc.getViewArea().getPlayersInView()) { - p.removeWatchedNpc(affectedNpc); - } - if (affectedNpc.inCombat()) { - owner.setBusy(false); - owner.resetPath(); - affectedNpc.setBusy(false); // untick - // this - return; - } + Instance.getDelayedEventHandler().add( + new ShortEvent(owner) { + public void action() { + owner.setBusy(false); + affectedNpc.setBusy(false); + if (chanceFormulae(lvl)) { + owner.setSpam(false); + owner.getActionSender() + .sendMessage( + "You sucessfully stole from the " + + affectedNpc + .getDef().name); + for (int i = 0; i < Loot.length; i++) { + owner.getInventory() + .add(new InvItem( + Loot[i], + Amount[i])); + } + owner.getActionSender() + .sendInventory(); + owner.incExp(17, exp + * ExpMultiplier, + true); + owner.getActionSender() + .sendStat(17); + owner.setBusy(false); + affectedNpc.unblock(); + } else { - owner.setBusy(true); - owner.setSprite(9); - owner.setOpponent(affectedNpc); - owner.setCombatTimer(); + owner.setSpam(false); + owner.getActionSender() + .sendMessage( + "You fail to pick the " + + affectedNpc + .getDef().name + + "'s pocket."); + int temp = Rand(10); + if (temp >= 3) { + owner.setBusy(false); + affectedNpc.unblock(); + return; + } - affectedNpc.setBusy(true); - affectedNpc.setSprite(8); - affectedNpc.setOpponent(owner); - affectedNpc.setCombatTimer(); + affectedNpc.resetPath(); + owner.setBusy(true); + if (affectedNpc == null + || affectedNpc + .inCombat()) { + owner.resetPath(); + owner.setBusy(false); + owner.setSpam(false); + return; + } else if (owner == null) { + affectedNpc.unblock(); + return; + } + String msg = Chats[Rand(Chats.length)]; + msg = msg + .replace( + "-name-", + owner.getUsername()); + owner.informOfNpcMessage(new ChatMessage( + affectedNpc, msg, + owner)); + world.getDelayedEventHandler() + .add(new MiniEvent( + owner, 1000) { + public void action() { + if (affectedNpc == null + || affectedNpc + .inCombat()) { + owner.resetPath(); + owner.setBusy(false); + owner.setSpam(false); + return; + } else if (owner == null) { + affectedNpc + .unblock(); + return; + } + owner.setBusy(false); + // affectedNpc.unblock(); + affectedNpc + .resetPath(); - FightEvent fighting = new FightEvent(owner, affectedNpc, true); - fighting.setLastRun(0); - world.getDelayedEventHandler().add(fighting); - } - }); - } - } - }); - } - } - }); - } catch (Exception e) { - player.setBusy(false); - affectedNpc.setBusy(false); - affectedNpc.unblock(); - Logger.error(e.getMessage() + "\nStack: " + e.getStackTrace()); - player.setSpam(false); - } + owner.resetPath(); + owner.resetAll(); + owner.getActionSender() + .sendSound( + "underattack"); + owner.setStatus(Action.FIGHTING_MOB); + owner.getActionSender() + .sendMessage( + "You are under attack!"); - } + affectedNpc + .resetPath(); + affectedNpc + .setLocation( + owner.getLocation(), + true); + affectedNpc + .resetPath(); + affectedNpc + .setBusy(true); - /** - * - * I don't have the best Maths, but this is a tweak-able formula for every 5 - * levels -xEnt - */ + for (Player p : affectedNpc + .getViewArea() + .getPlayersInView()) { + p.removeWatchedNpc(affectedNpc); + } + if (affectedNpc + .inCombat()) { + owner.setBusy(false); + owner.resetPath(); + affectedNpc + .setBusy(false); // untick + // this + return; + } - public boolean chanceFormulae(int targetLv) { - try { - int chance[] = { 27, 33, 35, 37, 40, 43, 47, 51, 54, 58, 62, 66, 71, 74, 78, 81, 84, 88, 93, 95 }; - int maxLvl[] = { 1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 }; - int diff = player.getMaxStat(17) - targetLv; - int index = 0; - for (int i = 0; i < maxLvl.length; i++) - if (diff >= maxLvl[i] && diff < maxLvl[i] + 5) - index = i; - int Chance = (chance[index] < 27 ? 27 : chance[index]); - return Rand(100) < Chance; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } + owner.setBusy(true); + owner.setSprite(9); + owner.setOpponent(affectedNpc); + owner.setCombatTimer(); - public boolean checkToGetAttacked() { - ActiveTile[][] tiles = player.getViewArea().getViewedArea(5, 5, 5, 5); - for (int x = 0; x < tiles.length; x++) { - for (int y = 0; y < tiles[x].length; y++) { - ActiveTile t = tiles[x][y]; - if (t != null) { - return false; - } - for (Npc n : t.getNpcs()) { - Logger.error(t.getNpcs().get(0)); - } - } - } - return false; - } + affectedNpc + .setBusy(true); + affectedNpc + .setSprite(8); + affectedNpc + .setOpponent(owner); + affectedNpc + .setCombatTimer(); - private void doChest() { - try { - - world.registerGameObject(new GameObject(object.getLocation(), 339, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), 900); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void doDoor() { - try { - player.getActionSender().sendSound("opendoor"); - world.registerGameObject(new GameObject(object.getLocation(), 11, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), 1000); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void lockpick() { - try { - - if (player.isBusy() || player.inCombat() || player == null || object == null) { - player.setSpam(false); - player.setBusy(false); - return; - } - player.setBusy(true); - - boolean cont = true; - for (int i = 0; i < Doors.length; i++) { - if (player.getX() == Doors[i][0] && player.getY() == Doors[i][1]) { - curDoor = i; - cont = false; - } - } - if (cont) { - player.getActionSender().sendMessage("This door has not been added"); - Logger.println("Player " + player.getUsername() + " found a door(lockpick) not added, ID: " + object.getID() + ", Coords: " + object.getLocation()); - player.setSpam(false); - player.setBusy(false); - return; - } - if (player.getMaxStat(17) < Doors[curDoor][4]) { - - player.getActionSender().sendMessage("Sorry, you don't have a high enough thieving level to unlock this"); - player.setSpam(false); - player.setBusy(false); - return; - } - Bubble bubble = new Bubble(player, 714); - for (Player p : player.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - player.getActionSender().sendMessage("You attempt to pick the lock on the " + object.getDoorDef().name); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { - if (!chanceFormulae(Doors[curDoor][4])) { - owner.getActionSender().sendMessage("You failed to unlock the door"); - owner.setSpam(false); - owner.setBusy(false); - return; - } else { - owner.getActionSender().sendMessage("You sucessfully unlocked the " + object.getDoorDef().name); - doDoor(); - owner.incExp(17, Doors[curDoor][5] * ExpMultiplier, true); - owner.getActionSender().sendStat(17); - owner.setSpam(false); - owner.setBusy(false); - owner.teleport(Doors[curDoor][2], Doors[curDoor][3], false); - - } - } - }); - } catch (Exception e) { - Logger.error(e.getMessage()); - } - } - - public void openThievedChest() { - - if (player.getCurStat(3) <= 2) { - player.getActionSender().sendMessage("Go away Emo kid."); - player.setSpam(false); - player.setBusy(false); - return; - } - int damage = player.getCurStat(3) / 9; - player.getActionSender().sendMessage("You have activated a trap on the chest"); - player.setLastDamage(damage); - player.setCurStat(3, player.getCurStat(3) - damage); - ArrayList playersToInform = new ArrayList(); - playersToInform.addAll(player.getViewArea().getPlayersInView()); - player.getActionSender().sendStat(3); - - for (Player p : playersToInform) { - p.informOfModifiedHits(player); - } - - Instance.getDelayedEventHandler().add(new MiniEvent(player, 1200) { - public void action() { - owner.setSpam(false); - owner.setBusy(false); - } - }); - } - - public int Rand(int max) { - Random r = new Random(); - return r.nextInt(max); - } - - public int Rand(int min, int max) { - Random r = new Random(); - return r.nextInt(max) + min; - } - - private void replaceChest(int delay) { - try { - world.registerGameObject(new GameObject(object.getLocation(), 338, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), delay); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void setLootArrays(int type) { - try { - int rand = Rand(100); - int[] tempArray = {}; - if (type == 0) { // Rogue - if (rand < 20) { - Loot[0] = 10; - Amount[0] = Rand(20, 40); - return; - } - if (rand < 40) { - Loot[0] = 33; - Amount[0] = 8; - return; - } - if (rand < 60) { - Loot[0] = 714; - Amount[0] = 1; - return; - } - if (rand < 80) { - Loot[0] = 559; - Amount[0] = 1; - return; - } - if (rand <= 100) { - Loot[0] = 142; - Amount[0] = 1; - return; - } - - } else if (type == 1) { // Gnome - if (rand < 20) { - Loot[0] = 10; - Amount[0] = Rand(200, 300); - return; - } - if (rand < 40) { - Loot[0] = 34; - Amount[0] = Rand(1, 5); - return; - } - if (rand < 50) { - Loot[0] = 612; - Amount[0] = 1; - return; - } - if (rand < 60) { - Loot[0] = 152; - Amount[0] = 1; - return; - } - if (rand < 80) { - Loot[0] = 895; - Amount[0] = 1; - return; - } - if (rand <= 100) { - Loot[0] = 897; - Amount[0] = 1; - return; - } - } else { // Hero - if (rand <= 5) { - Loot[0] = 161; - Amount[0] = 1; - return; - } - if (rand < 15) { - Loot[0] = 619; - Amount[0] = 1; - return; - } - if (rand < 30) { - Loot[0] = 38; - Amount[0] = 2; - return; - } - if (rand < 40) { - Loot[0] = 152; - Amount[0] = 1; - return; - } - if (rand < 50) { - Loot[0] = 612; - Amount[0] = 1; - return; - } - if (rand < 60) { - Loot[0] = 142; - Amount[0] = 1; - return; - } - if (rand <= 100) { - Loot[0] = 10; - Amount[0] = Rand(200, 300); - return; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void thieveChest() { - - if (object == null) { - player.setSpam(false); - player.setBusy(false); - return; - } - - if (object.getID() == 338) { - player.getActionSender().sendMessage("It looks like that chest has already been looted."); - player.setSpam(false); - player.setBusy(false); - return; - } - - for (int i = 0; i < Chests.length; i++) - if (object.getID() == Chests[i][0]) - ourChest = i; - - if (ourChest == -1) { - player.setSpam(false); - player.setBusy(false); - player.getActionSender().sendMessage("This chest has not yet been added to the chest Thieving list."); - Logger.println("Player " + player.getUsername() + " found a chest not added, ID: " + object.getID() + ", Coords: " + object.getLocation()); - return; - } - - if (player.getMaxStat(17) < Chests[ourChest][1]) { - player.setSpam(false); - player.setBusy(false); - player.getActionSender().sendMessage("You are not high enough level to Steal from this chest."); - return; - } - - player.getActionSender().sendMessage("You search for traps on the chest"); - player.setBusy(true); - - Instance.getDelayedEventHandler().add(new MiniEvent(player, 300) { - public void action() { - - owner.getActionSender().sendMessage("You find a trap on the chest.."); - Bubble bubble = new Bubble(player, 549); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - - Instance.getDelayedEventHandler().add(new MiniEvent(player, 1000) { - public void action() { - - owner.getActionSender().sendMessage("You disarm the trap"); - - Instance.getDelayedEventHandler().add(new MiniEvent(player, 1000) { - public void action() { - owner.getActionSender().sendMessage("You open the chest"); - doChest(); - - Instance.getDelayedEventHandler().add(new MiniEvent(player, 1200) { - public void action() { - replaceChest(Chests[ourChest][3]); - owner.getActionSender().sendMessage("You find treasure inside!"); - for (int i = 4; i < Chests[ourChest].length - 1; i++) { - InvItem loot = new InvItem(Chests[ourChest][i], Chests[ourChest][i + 1]); - owner.getInventory().add(loot); - i = i + 1; - } - if (Chests[ourChest][0] == 340) { - owner.getActionSender().sendMessage("You triggered the trap!"); - owner.teleport(612, 568, true); - } - owner.getActionSender().sendInventory(); - owner.incExp(17, Chests[ourChest][2], true); - owner.getActionSender().sendStat(17); - owner.setBusy(false); - owner.setSpam(false); - } - }); - } - }); - } - }); - } - }); - } - - public int thieveGem() { - try { - int temp = Rand(100); - if (temp <= 40) { - return 160; - } else if (temp <= 70) { - return 159; - } else if (temp <= 90) { - return 158; - } else if (temp <= 100) { - return 157; - } - return -1; - } catch (Exception e) { - e.printStackTrace(); - return -1; - } - } - - public void thieveStall() { - - try { - - if (object == null) { - player.setSpam(false); - // owner.packetSpam - return; - } - boolean exist = false; - - for (int i = 0; i < Stalls.length; i++) { - if (object.getID() == Stalls[i][1]) { - curStall = i; - exist = true; - if (player.getMaxStat(17) < Stalls[i][0]) { - player.getActionSender().sendMessage("Sorry, you need a thieving level of " + Stalls[i][0] + " to steal from that"); + FightEvent fighting = new FightEvent( + owner, + affectedNpc, + true); + fighting.setLastRun(0); + world.getDelayedEventHandler() + .add(fighting); + } + }); + } + } + }); + } + } + }); + } catch (Exception e) { + player.setBusy(false); + affectedNpc.setBusy(false); + affectedNpc.unblock(); + Logger.error(e.getMessage() + "\nStack: " + e.getStackTrace()); player.setSpam(false); - return; - } } - } - if (!exist) { - player.getActionSender().sendMessage("Sorry, this stall does not exist.. contact an admin?"); - Logger.println("Player " + player.getUsername() + " found a stall not added, ID: " + object.getID() + ", Coords: " + object.getLocation()); - player.setSpam(false); - return; - } - Bubble bubble = new Bubble(player, 609); - for (Player p : player.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - player.getActionSender().sendMessage("You attempt to steal from the " + object.getGameObjectDef().name); - player.setBusy(true); - Instance.getDelayedEventHandler().add(new ShortEvent(player) { - public void action() { + } - owner.setSpam(false); - if (object == null) { - owner.getActionSender().sendMessage("There are nothing to steal as this current time"); - owner.setSpam(false); - owner.setBusy(false); + /** + * + * I don't have the best Maths, but this is a tweak-able formula for every 5 + * levels -xEnt + */ + + public boolean chanceFormulae(int targetLv) { + try { + int chance[] = { 27, 33, 35, 37, 40, 43, 47, 51, 54, 58, 62, 66, + 71, 74, 78, 81, 84, 88, 93, 95 }; + int maxLvl[] = { 1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, + 65, 70, 75, 80, 85, 90, 95, 100 }; + int diff = player.getMaxStat(17) - targetLv; + int index = 0; + for (int i = 0; i < maxLvl.length; i++) + if (diff >= maxLvl[i] && diff < maxLvl[i] + 5) + index = i; + int Chance = (chance[index] < 27 ? 27 : chance[index]); + return Rand(100) < Chance; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public boolean checkToGetAttacked() { + ActiveTile[][] tiles = player.getViewArea().getViewedArea(5, 5, 5, 5); + for (int x = 0; x < tiles.length; x++) { + for (int y = 0; y < tiles[x].length; y++) { + ActiveTile t = tiles[x][y]; + if (t != null) { + return false; + } + } + } + return false; + } + + private void doChest() { + try { + + world.registerGameObject(new GameObject(object.getLocation(), 339, + object.getDirection(), object.getType())); + world.delayedSpawnObject(object.getLoc(), 900); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void doDoor() { + try { + player.getActionSender().sendSound("opendoor"); + world.registerGameObject(new GameObject(object.getLocation(), 11, + object.getDirection(), object.getType())); + world.delayedSpawnObject(object.getLoc(), 1000); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void lockpick() { + try { + + if (player.isBusy() || player.inCombat() || player == null + || object == null) { + player.setSpam(false); + player.setBusy(false); + return; + } + player.setBusy(true); + + boolean cont = true; + for (int i = 0; i < Doors.length; i++) { + if (player.getX() == Doors[i][0] + && player.getY() == Doors[i][1]) { + curDoor = i; + cont = false; + } + } + if (cont) { + player.getActionSender().sendMessage( + "This door has not been added"); + Logger.println("Player " + player.getUsername() + + " found a door(lockpick) not added, ID: " + + object.getID() + ", Coords: " + object.getLocation()); + player.setSpam(false); + player.setBusy(false); + return; + } + if (player.getMaxStat(17) < Doors[curDoor][4]) { + + player.getActionSender() + .sendMessage( + "Sorry, you don't have a high enough thieving level to unlock this"); + player.setSpam(false); + player.setBusy(false); + return; + } + Bubble bubble = new Bubble(player, 714); + for (Player p : player.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + player.getActionSender().sendMessage( + "You attempt to pick the lock on the " + + object.getDoorDef().name); + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + if (!chanceFormulae(Doors[curDoor][4])) { + owner.getActionSender().sendMessage( + "You failed to unlock the door"); + owner.setSpam(false); + owner.setBusy(false); + return; + } else { + owner.getActionSender().sendMessage( + "You sucessfully unlocked the " + + object.getDoorDef().name); + doDoor(); + owner.incExp(17, Doors[curDoor][5] * ExpMultiplier, + true); + owner.getActionSender().sendStat(17); + owner.setSpam(false); + owner.setBusy(false); + owner.teleport(Doors[curDoor][2], Doors[curDoor][3], + false); + + } + } + }); + } catch (Exception e) { + Logger.error(e.getMessage()); + } + } + + public void openThievedChest() { + + if (player.getCurStat(3) <= 2) { + player.getActionSender().sendMessage("Go away Emo kid."); + player.setSpam(false); + player.setBusy(false); return; - } - if (!chanceFormulae(Stalls[curStall][0])) { + } + int damage = player.getCurStat(3) / 9; + player.getActionSender().sendMessage( + "You have activated a trap on the chest"); + player.setLastDamage(damage); + player.setCurStat(3, player.getCurStat(3) - damage); + ArrayList playersToInform = new ArrayList(); + playersToInform.addAll(player.getViewArea().getPlayersInView()); + player.getActionSender().sendStat(3); - owner.getActionSender().sendMessage("You failed to steal from the " + object.getGameObjectDef().name); - owner.setSpam(false); - owner.setBusy(false); - if (Rand(20) <= 3) { - if (StallNpcs[curStall][0] == -1) { - } else { - Npc person = world.getNpc(StallNpcs[curStall][0], StallNpcs[curStall][1], StallNpcs[curStall][2], StallNpcs[curStall][3], StallNpcs[curStall][4]); - if (person != null) { - owner.npcThief[curStall] = true; - String str = caughtChats[Rand(caughtChats.length)]; - str = str.replace("-name-", owner.getUsername()); - owner.informOfNpcMessage(new ChatMessage(person, str, owner)); - person.resetPath(); + for (Player p : playersToInform) { + p.informOfModifiedHits(player); + } + + Instance.getDelayedEventHandler().add(new MiniEvent(player, 1200) { + public void action() { + owner.setSpam(false); + owner.setBusy(false); + } + }); + } + + public int Rand(int max) { + Random r = new Random(); + return r.nextInt(max); + } + + public int Rand(int min, int max) { + Random r = new Random(); + return r.nextInt(max) + min; + } + + private void replaceChest(int delay) { + try { + world.registerGameObject(new GameObject(object.getLocation(), 338, + object.getDirection(), object.getType())); + world.delayedSpawnObject(object.getLoc(), delay); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void setLootArrays(int type) { + try { + int rand = Rand(100); + if (type == 0) { // Rogue + if (rand < 20) { + Loot[0] = 10; + Amount[0] = Rand(20, 40); + return; + } + if (rand < 40) { + Loot[0] = 33; + Amount[0] = 8; + return; + } + if (rand < 60) { + Loot[0] = 714; + Amount[0] = 1; + return; + } + if (rand < 80) { + Loot[0] = 559; + Amount[0] = 1; + return; + } + if (rand <= 100) { + Loot[0] = 142; + Amount[0] = 1; + return; } - } + } else if (type == 1) { // Gnome + if (rand < 20) { + Loot[0] = 10; + Amount[0] = Rand(200, 300); + return; + } + if (rand < 40) { + Loot[0] = 34; + Amount[0] = Rand(1, 5); + return; + } + if (rand < 50) { + Loot[0] = 612; + Amount[0] = 1; + return; + } + if (rand < 60) { + Loot[0] = 152; + Amount[0] = 1; + return; + } + if (rand < 80) { + Loot[0] = 895; + Amount[0] = 1; + return; + } + if (rand <= 100) { + Loot[0] = 897; + Amount[0] = 1; + return; + } + } else { // Hero + if (rand <= 5) { + Loot[0] = 161; + Amount[0] = 1; + return; + } + if (rand < 15) { + Loot[0] = 619; + Amount[0] = 1; + return; + } + if (rand < 30) { + Loot[0] = 38; + Amount[0] = 2; + return; + } + if (rand < 40) { + Loot[0] = 152; + Amount[0] = 1; + return; + } + if (rand < 50) { + Loot[0] = 612; + Amount[0] = 1; + return; + } + if (rand < 60) { + Loot[0] = 142; + Amount[0] = 1; + return; + } + if (rand <= 100) { + Loot[0] = 10; + Amount[0] = Rand(200, 300); + return; + } } - return; - - } else { - world.registerGameObject(new GameObject(object.getLocation(), 341, object.getDirection(), object.getType())); - world.delayedSpawnObject(object.getLoc(), Stalls[curStall][3] * 1000); - owner.getActionSender().sendMessage("You successfully thieved from the " + object.getGameObjectDef().name); - owner.setSpam(false); - owner.setBusy(false); - - if (curStall == 5) { - InvItem loot = new InvItem(thieveGem(), 1); - owner.getInventory().add(loot); - } else { - InvItem loot = new InvItem(Stalls[curStall][4], 1); - owner.getInventory().add(loot); - } - owner.getActionSender().sendInventory(); - owner.incExp(17, Stalls[curStall][2] * ExpMultiplier, true); - owner.getActionSender().sendStat(17); - } + } catch (Exception e) { + e.printStackTrace(); } - }); - } catch (Exception e) { - Logger.error(e.getMessage()); } - } + + public void thieveChest() { + + if (object == null) { + player.setSpam(false); + player.setBusy(false); + return; + } + + if (object.getID() == 338) { + player.getActionSender().sendMessage( + "It looks like that chest has already been looted."); + player.setSpam(false); + player.setBusy(false); + return; + } + + for (int i = 0; i < Chests.length; i++) + if (object.getID() == Chests[i][0]) + ourChest = i; + + if (ourChest == -1) { + player.setSpam(false); + player.setBusy(false); + player.getActionSender() + .sendMessage( + "This chest has not yet been added to the chest Thieving list."); + Logger.println("Player " + player.getUsername() + + " found a chest not added, ID: " + object.getID() + + ", Coords: " + object.getLocation()); + return; + } + + if (player.getMaxStat(17) < Chests[ourChest][1]) { + player.setSpam(false); + player.setBusy(false); + player.getActionSender().sendMessage( + "You are not high enough level to Steal from this chest."); + return; + } + + player.getActionSender().sendMessage( + "You search for traps on the chest"); + player.setBusy(true); + + Instance.getDelayedEventHandler().add(new MiniEvent(player, 300) { + public void action() { + + owner.getActionSender().sendMessage( + "You find a trap on the chest.."); + Bubble bubble = new Bubble(player, 549); + for (Player p : owner.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + + Instance.getDelayedEventHandler().add( + new MiniEvent(player, 1000) { + public void action() { + + owner.getActionSender().sendMessage( + "You disarm the trap"); + + Instance.getDelayedEventHandler().add( + new MiniEvent(player, 1000) { + public void action() { + owner.getActionSender() + .sendMessage( + "You open the chest"); + doChest(); + + Instance.getDelayedEventHandler() + .add(new MiniEvent( + player, 1200) { + public void action() { + replaceChest(Chests[ourChest][3]); + owner.getActionSender() + .sendMessage( + "You find treasure inside!"); + for (int i = 4; i < Chests[ourChest].length - 1; i++) { + InvItem loot = new InvItem( + Chests[ourChest][i], + Chests[ourChest][i + 1]); + owner.getInventory() + .add(loot); + i = i + 1; + } + if (Chests[ourChest][0] == 340) { + owner.getActionSender() + .sendMessage( + "You triggered the trap!"); + owner.teleport( + 612, + 568, + true); + } + owner.getActionSender() + .sendInventory(); + owner.incExp( + 17, + Chests[ourChest][2], + true); + owner.getActionSender() + .sendStat( + 17); + owner.setBusy(false); + owner.setSpam(false); + } + }); + } + }); + } + }); + } + }); + } + + public int thieveGem() { + try { + int temp = Rand(100); + if (temp <= 40) { + return 160; + } else if (temp <= 70) { + return 159; + } else if (temp <= 90) { + return 158; + } else if (temp <= 100) { + return 157; + } + return -1; + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + } + + public void thieveStall() { + + try { + + if (object == null) { + player.setSpam(false); + // owner.packetSpam + return; + } + boolean exist = false; + + for (int i = 0; i < Stalls.length; i++) { + if (object.getID() == Stalls[i][1]) { + curStall = i; + exist = true; + if (player.getMaxStat(17) < Stalls[i][0]) { + player.getActionSender().sendMessage( + "Sorry, you need a thieving level of " + + Stalls[i][0] + " to steal from that"); + player.setSpam(false); + return; + } + } + } + if (!exist) { + player.getActionSender().sendMessage( + "Sorry, this stall does not exist.. contact an admin?"); + Logger.println("Player " + player.getUsername() + + " found a stall not added, ID: " + object.getID() + + ", Coords: " + object.getLocation()); + player.setSpam(false); + return; + } + Bubble bubble = new Bubble(player, 609); + for (Player p : player.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + player.getActionSender().sendMessage( + "You attempt to steal from the " + + object.getGameObjectDef().name); + player.setBusy(true); + + Instance.getDelayedEventHandler().add(new ShortEvent(player) { + public void action() { + + owner.setSpam(false); + if (object == null) { + owner.getActionSender() + .sendMessage( + "There are nothing to steal as this current time"); + owner.setSpam(false); + owner.setBusy(false); + return; + } + if (!chanceFormulae(Stalls[curStall][0])) { + + owner.getActionSender().sendMessage( + "You failed to steal from the " + + object.getGameObjectDef().name); + owner.setSpam(false); + owner.setBusy(false); + if (Rand(20) <= 3) { + if (StallNpcs[curStall][0] == -1) { + } else { + Npc person = world.getNpc( + StallNpcs[curStall][0], + StallNpcs[curStall][1], + StallNpcs[curStall][2], + StallNpcs[curStall][3], + StallNpcs[curStall][4]); + if (person != null) { + owner.getNpcThief()[curStall] = true; + String str = caughtChats[Rand(caughtChats.length)]; + str = str.replace("-name-", + owner.getUsername()); + owner.informOfNpcMessage(new ChatMessage( + person, str, owner)); + person.resetPath(); + } + + } + } + return; + + } else { + world.registerGameObject(new GameObject(object + .getLocation(), 341, object.getDirection(), + object.getType())); + world.delayedSpawnObject(object.getLoc(), + Stalls[curStall][3] * 1000); + owner.getActionSender().sendMessage( + "You successfully thieved from the " + + object.getGameObjectDef().name); + owner.setSpam(false); + owner.setBusy(false); + + if (curStall == 5) { + InvItem loot = new InvItem(thieveGem(), 1); + owner.getInventory().add(loot); + } else { + InvItem loot = new InvItem(Stalls[curStall][4], 1); + owner.getInventory().add(loot); + } + owner.getActionSender().sendInventory(); + owner.incExp(17, Stalls[curStall][2] * ExpMultiplier, + true); + owner.getActionSender().sendStat(17); + } + } + }); + } catch (Exception e) { + Logger.error(e.getMessage()); + } + } + + public void setDef(GameObjectDef def) { + this.def = def; + } + + public GameObjectDef getDef() { + return def; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/listeners/ObjectListener.java b/GameServer/src/org/moparscape/msc/gs/plugins/listeners/ObjectListener.java index 55e2080..ca24def 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/listeners/ObjectListener.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/listeners/ObjectListener.java @@ -10,38 +10,38 @@ import org.moparscape.msc.gs.model.Player; */ public interface ObjectListener { - /** - * When a user activates an in-game Object. - * - * @param obj - * - the object model - * @param player - * - the player model - */ - public boolean onObjectAction(GameObject obj, String command, Player player); + /** + * When a user activates an in-game Object. + * + * @param obj + * - the object model + * @param player + * - the player model + */ + public boolean onObjectAction(GameObject obj, String command, Player player); - /** - * When an object is removed from the game. - * - * @param obj - * - the object model - */ - public boolean onObjectRemoval(GameObject obj); + /** + * When an object is removed from the game. + * + * @param obj + * - the object model + */ + public boolean onObjectRemoval(GameObject obj); - /** - * When an object is created in-game - * - * @param obj - * - the new object model - * @param player - * - the player model (might possibly be null) - */ - public boolean onObjectCreation(GameObject obj, Player player); + /** + * When an object is created in-game + * + * @param obj + * - the new object model + * @param player + * - the player model (might possibly be null) + */ + public boolean onObjectCreation(GameObject obj, Player player); - /** - * - * @return - an integer array of object ID's that trigger these actions - */ - public int[] getAssociatedIDS(); + /** + * + * @return - an integer array of object ID's that trigger these actions + */ + public int[] getAssociatedIDS(); } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/plugs/Test.java b/GameServer/src/org/moparscape/msc/gs/plugins/plugs/Test.java index ecd0f79..63ad95e 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/plugs/Test.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/plugs/Test.java @@ -12,21 +12,22 @@ import org.moparscape.msc.gs.plugins.listeners.ObjectListener; */ public class Test implements ObjectListener { - public int[] getAssociatedIDS() { - return new int[] {/* 19 */}; // altar. - } + public int[] getAssociatedIDS() { + return new int[] {/* 19 */}; // altar. + } - public boolean onObjectAction(GameObject obj, String command, Player player) { - player.getActionSender().sendMessage("You used the " + obj.getGameObjectDef().name); - return true; - } + public boolean onObjectAction(GameObject obj, String command, Player player) { + player.getActionSender().sendMessage( + "You used the " + obj.getGameObjectDef().name); + return true; + } - public boolean onObjectCreation(GameObject obj, Player player) { - return true; - } + public boolean onObjectCreation(GameObject obj, Player player) { + return true; + } - public boolean onObjectRemoval(GameObject obj) { - return true; - } + public boolean onObjectRemoval(GameObject obj) { + return true; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java b/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java index be2daac..b4c028a 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/plugs/skills/Mining.java @@ -7,7 +7,6 @@ import org.moparscape.msc.gs.event.ShortEvent; import org.moparscape.msc.gs.event.SingleEvent; import org.moparscape.msc.gs.external.EntityHandler; import org.moparscape.msc.gs.external.ObjectMiningDef; -import org.moparscape.msc.gs.model.ActiveTile; import org.moparscape.msc.gs.model.Bubble; import org.moparscape.msc.gs.model.GameObject; import org.moparscape.msc.gs.model.InvItem; @@ -17,155 +16,174 @@ import org.moparscape.msc.gs.tools.DataConversions; public class Mining implements ObjectListener { - @Override - public int[] getAssociatedIDS() { - // rock ID's - return new int[] { 176, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 195, 196, 210, 211 }; - } + @Override + public int[] getAssociatedIDS() { + // rock ID's + return new int[] { 176, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 195, 196, 210, 211 }; + } - @Override - public boolean onObjectAction(final GameObject object, String command, Player owner) { + @Override + public boolean onObjectAction(final GameObject object, String command, + Player owner) { - owner.setSkillLoops(0); - handleMining(object, owner, owner.click); - return true; - } + owner.setSkillLoops(0); + handleMining(object, owner, owner.getClick()); + return true; + } - // just picks the best pickaxe the player can use. - public int getAxe(Player p) { - int lv = p.getCurStat(14); - for (int i = 0; i < Formulae.miningAxeIDs.length; i++) { - if (p.getInventory().countId(Formulae.miningAxeIDs[i]) > 0) { - if (lv >= Formulae.miningAxeLvls[i]) { - return Formulae.miningAxeIDs[i]; + // just picks the best pickaxe the player can use. + public int getAxe(Player p) { + int lv = p.getCurStat(14); + for (int i = 0; i < Formulae.miningAxeIDs.length; i++) { + if (p.getInventory().countId(Formulae.miningAxeIDs[i]) > 0) { + if (lv >= Formulae.miningAxeLvls[i]) { + return Formulae.miningAxeIDs[i]; + } + } } - } - } - return -1; - } - - public void handleMining(final GameObject object, Player owner, int click) { - if (owner.isBusy() && !owner.inCombat()) { - return; - } - if (!owner.withinRange(object, 1)) - return; - final GameObject newobject = Instance.getWorld().getTile(object.getX(), object.getY()).getGameObject(); - final ObjectMiningDef def = EntityHandler.getObjectMiningDef(newobject.getID()); - if (def == null || def.getRespawnTime() < 1) { - owner.getActionSender().sendMessage("There is currently no ore available in this rock."); - return; - } - final InvItem ore = new InvItem(def.getOreId()); - if (owner.click == 1) { - owner.getActionSender().sendMessage("This rock contains " + ore.getDef().getName() + "."); - return; + return -1; } - if (owner.getCurStat(14) < def.getReqLevel()) { - owner.getActionSender().sendMessage("You need a mining level of " + def.getReqLevel() + " to mine this rock."); - return; - } - int axeId = getAxe(owner); - - if (axeId < 0) { - owner.getActionSender().sendMessage("You need a pickaxe to mine this rock."); - return; - } - final int axeID = axeId; - int retrytimes = -1; - final int swings = owner.getSkillLoops(); - final int mineLvl = owner.getCurStat(14); - int reqlvl = 1; - switch (axeID) { - case 1258: - retrytimes = 2; - break; - case 1259: - retrytimes = 4; - reqlvl = 6; - break; - case 1260: - retrytimes = 6; - reqlvl = 21; - break; - case 1261: - retrytimes = 8; - reqlvl = 31; - break; - case 1262: - retrytimes = 12; - reqlvl = 41; - break; - - } - - if (reqlvl > mineLvl) { - owner.getActionSender().sendMessage("You need to be level " + reqlvl + " to use this pick."); - return; - } - owner.setBusy(true); - - owner.getActionSender().sendSound("mine"); - Bubble bubble = new Bubble(owner, axeId); - for (Player p : owner.getViewArea().getPlayersInView()) { - p.informOfBubble(bubble); - } - - final int retrytime = retrytimes; - owner.lastMineTimer = GameEngine.getTime(); - owner.getActionSender().sendMessage("You swing your pick at the rock..."); - Instance.getDelayedEventHandler().add(new ShortEvent(owner) { - public void action() { - if (Formulae.getOre(def, owner.getCurStat(14), axeID)) { - if (DataConversions.random(0, 200) == 0) { - InvItem gem = new InvItem(Formulae.getGem(), 1); - owner.incExp(14, 100, true); - owner.getInventory().add(gem); - owner.getActionSender().sendMessage("You found a gem!"); - } else { - owner.getInventory().add(ore); - owner.getActionSender().sendMessage("You manage to obtain some " + ore.getDef().getName() + "."); - owner.setSkillLoops(0); - owner.incExp(14, def.getExp(), true); - owner.getActionSender().sendStat(14); - world.registerGameObject(new GameObject(object.getLocation(), 98, object.getDirection(), object.getType())); - world.delayedSpawnObject(newobject.getLoc(), def.getRespawnTime() * 1000); - } - owner.getActionSender().sendInventory(); - } else { - boolean retry = false; - if (retrytime >= swings) - retry = true; - owner.getActionSender().sendMessage("You only succeed in scratching the rock."); - if (retry) { - world.getDelayedEventHandler().add(new SingleEvent(owner, 500) { - public void action() { - owner.setSkillLoops(swings + 1); - handleMining(object, owner, owner.click); - } - }); - } - if (!retry) { - owner.isMining(false); - owner.setSkillLoops(0); - } + public void handleMining(final GameObject object, Player owner, int click) { + if (owner.isBusy() && !owner.inCombat()) { + return; + } + if (!owner.withinRange(object, 1)) + return; + final GameObject newobject = Instance.getWorld() + .getTile(object.getX(), object.getY()).getGameObject(); + final ObjectMiningDef def = EntityHandler.getObjectMiningDef(newobject + .getID()); + if (def == null || def.getRespawnTime() < 1) { + owner.getActionSender().sendMessage( + "There is currently no ore available in this rock."); + return; + } + final InvItem ore = new InvItem(def.getOreId()); + if (owner.getClick() == 1) { + owner.getActionSender().sendMessage( + "This rock contains " + ore.getDef().getName() + "."); + return; } - owner.setBusy(false); - } - }); - } - @Override - public boolean onObjectCreation(GameObject obj, Player player) { + if (owner.getCurStat(14) < def.getReqLevel()) { + owner.getActionSender().sendMessage( + "You need a mining level of " + def.getReqLevel() + + " to mine this rock."); + return; + } + int axeId = getAxe(owner); - return true; - } + if (axeId < 0) { + owner.getActionSender().sendMessage( + "You need a pickaxe to mine this rock."); + return; + } + final int axeID = axeId; + int retrytimes = -1; + final int swings = owner.getSkillLoops(); + final int mineLvl = owner.getCurStat(14); + int reqlvl = 1; + switch (axeID) { + case 1258: + retrytimes = 2; + break; + case 1259: + retrytimes = 4; + reqlvl = 6; + break; + case 1260: + retrytimes = 6; + reqlvl = 21; + break; + case 1261: + retrytimes = 8; + reqlvl = 31; + break; + case 1262: + retrytimes = 12; + reqlvl = 41; + break; - @Override - public boolean onObjectRemoval(GameObject obj) { + } - return true; - } + if (reqlvl > mineLvl) { + owner.getActionSender().sendMessage( + "You need to be level " + reqlvl + " to use this pick."); + return; + } + owner.setBusy(true); + + owner.getActionSender().sendSound("mine"); + Bubble bubble = new Bubble(owner, axeId); + for (Player p : owner.getViewArea().getPlayersInView()) { + p.informOfBubble(bubble); + } + + final int retrytime = retrytimes; + owner.setLastMineTimer(GameEngine.getTime()); + owner.getActionSender().sendMessage( + "You swing your pick at the rock..."); + Instance.getDelayedEventHandler().add(new ShortEvent(owner) { + public void action() { + if (Formulae.getOre(def, owner.getCurStat(14), axeID)) { + if (DataConversions.random(0, 200) == 0) { + InvItem gem = new InvItem(Formulae.getGem(), 1); + owner.incExp(14, 100, true); + owner.getInventory().add(gem); + owner.getActionSender().sendMessage("You found a gem!"); + } else { + owner.getInventory().add(ore); + owner.getActionSender().sendMessage( + "You manage to obtain some " + + ore.getDef().getName() + "."); + owner.setSkillLoops(0); + owner.incExp(14, def.getExp(), true); + owner.getActionSender().sendStat(14); + world.registerGameObject(new GameObject(object + .getLocation(), 98, object.getDirection(), + object.getType())); + world.delayedSpawnObject(newobject.getLoc(), + def.getRespawnTime() * 1000); + } + owner.getActionSender().sendInventory(); + } else { + boolean retry = false; + if (retrytime >= swings) + retry = true; + owner.getActionSender().sendMessage( + "You only succeed in scratching the rock."); + if (retry) { + world.getDelayedEventHandler().add( + new SingleEvent(owner, 500) { + public void action() { + owner.setSkillLoops(swings + 1); + handleMining(object, owner, + owner.getClick()); + } + }); + } + if (!retry) { + owner.isMining(false); + owner.setSkillLoops(0); + } + } + owner.setBusy(false); + } + }); + } + + @Override + public boolean onObjectCreation(GameObject obj, Player player) { + + return true; + } + + @Override + public boolean onObjectRemoval(GameObject obj) { + + return true; + } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/CooksAssistant.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/CooksAssistant.java index a2a004e..ed8a447 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/CooksAssistant.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/CooksAssistant.java @@ -12,190 +12,217 @@ import org.moparscape.msc.gs.quest.QuestAction; * @author youKnowWho */ public class CooksAssistant extends Quest { - private static final int COOK_ID = 7; - private static final int ITEM_EGG = 19; - private static final int ITEM_FLOUR = 136; - private static final int ITEM_MILK = 22; - private static final int REWARD_XP = 350; - private static final String[] FIRST_MENU = new String[] { "Oh, ok, sorry.", "Well maybe I can help?" }; - private static final String[] SECOND_MENU = new String[] { "Sure, what do you need?", "No, sorry" }; - private static final int QUEST_POINTS = 1; + private static final int COOK_ID = 7; + private static final int ITEM_EGG = 19; + private static final int ITEM_FLOUR = 136; + private static final int ITEM_MILK = 22; + private static final int REWARD_XP = 350; + private static final String[] FIRST_MENU = new String[] { "Oh, ok, sorry.", + "Well maybe I can help?" }; + private static final String[] SECOND_MENU = new String[] { + "Sure, what do you need?", "No, sorry" }; + private static final int QUEST_POINTS = 1; - public void init() { - associateNpc(COOK_ID); - } + public void init() { + associateNpc(COOK_ID); + } - public CooksAssistant() { - } + public CooksAssistant() { + } - public String getName() { - return "Cook's Assistant"; - } + public String getName() { + return "Cook's Assistant"; + } - public int getUniqueID() { - return 0; - } + public int getUniqueID() { + return 0; + } - public void handleAction(QuestAction action, Object[] args, final Player player) { - int stage = player.getQuestStage(this); + public void handleAction(QuestAction action, Object[] args, + final Player player) { + int stage = player.getQuestStage(this); - if (stage == -1) // Quest hasn't been started - { - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; + if (stage == -1) // Quest hasn't been started + { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; - final Npc npc = (Npc) args[0]; + final Npc npc = (Npc) args[0]; - if (npc.getID() != COOK_ID) - return; + if (npc.getID() != COOK_ID) + return; - player.setBusy(true); - npc.blockedBy(player); + player.setBusy(true); + npc.blockedBy(player); - sendChat("Sorry, I can't talk right now, I'm very busy!", npc, player); + sendChat("Sorry, I can't talk right now, I'm very busy!", npc, + player); - player.setBusy(false); - int option = getMenuOption(player, FIRST_MENU); - player.setBusy(true); - sleep(); - switch (option) { + player.setBusy(false); + int option = getMenuOption(player, FIRST_MENU); + player.setBusy(true); + sleep(); + switch (option) { - case 0: - player.setBusy(false); - npc.unblock(); - break; - case 1: + case 0: + player.setBusy(false); + npc.unblock(); + break; + case 1: - sendChat("Perhaps you can... You see, it's the duke's birthday tomorrow", npc, player); + sendChat( + "Perhaps you can... You see, it's the duke's birthday tomorrow", + npc, player); - sendChat("And I haven't got the ingredients for his cake yet!", npc, player); + sendChat( + "And I haven't got the ingredients for his cake yet!", + npc, player); - sendChat("Do you think you could collect them for me?", npc, player); + sendChat("Do you think you could collect them for me?", + npc, player); - player.setBusy(false); - option = getMenuOption(player, SECOND_MENU); + player.setBusy(false); + option = getMenuOption(player, SECOND_MENU); - player.setBusy(true); - switch (option) { - case 0: + player.setBusy(true); + switch (option) { + case 0: - sendChat("Oh thank you so much! I'm going to need an egg, some milk and a pot of flour.", npc, player); + sendChat( + "Oh thank you so much! I'm going to need an egg, some milk and a pot of flour.", + npc, player); - sendChat("Please, hurry!", npc, player); - player.setQuestStage(getUniqueID(), 1); - player.setBusy(false); - npc.unblock(); + sendChat("Please, hurry!", npc, player); + player.setQuestStage(getUniqueID(), 1); + player.setBusy(false); + npc.unblock(); - break; - case 1: + break; + case 1: - sendChat("Fine. I didn't want your help anyway.", npc, player); - player.setBusy(false); - npc.unblock(); + sendChat("Fine. I didn't want your help anyway.", npc, + player); + player.setBusy(false); + npc.unblock(); - break; - default: - player.setBusy(false); - npc.unblock(); - break; - } + break; + default: + player.setBusy(false); + npc.unblock(); + break; + } - break; - default: - player.setBusy(false); - npc.unblock(); - break; + break; + default: + player.setBusy(false); + npc.unblock(); + break; + } + + } else + return; + } else if (stage == 1) { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; + + final Npc npc = (Npc) args[0]; + + if (npc.getID() != COOK_ID) + return; + + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "Sorry, I can't - oh, it's you! Do you have the ingredients?", + npc, player); + + player.setBusy(false); + int option = getMenuOption(player, "I forgot what to get!", + "Yes, i have them", "No, not yet"); + player.setBusy(true); + sleep(); + if (option == 0) { + + sendChat( + "I need an egg, a pot flour and some milk! And quickly!", + npc, player); + player.setBusy(false); + npc.unblock(); + + } else if (option == 1) { + + // check items + if (player.getInventory().hasItemId(ITEM_EGG) + && player.getInventory().hasItemId(ITEM_FLOUR) + && player.getInventory().hasItemId(ITEM_MILK)) { + finishQuest(player, npc); + } else { + sendChat( + "No you don't! Oh please, don't get my hopes up like that!", + npc, player); + player.setBusy(false); + npc.unblock(); + } + + } else { + + sendChat("Oh, please hurry!", npc, player); + player.setBusy(false); + npc.unblock(); + + } + + } + } else if (stage == 0) { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; + + final Npc npc = (Npc) args[0]; + + if (npc.getID() != COOK_ID) + return; + + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "Oh hi " + + player.getUsername() + + ". Thanks for your help! I can't talk at the moment though.", + npc, player); + player.setBusy(false); + npc.unblock(); + } } - } else - return; - } else if (stage == 1) { - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; + } - final Npc npc = (Npc) args[0]; - - if (npc.getID() != COOK_ID) - return; - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Sorry, I can't - oh, it's you! Do you have the ingredients?", npc, player); - - player.setBusy(false); - int option = getMenuOption(player, "I forgot what to get!", "Yes, i have them", "No, not yet"); - player.setBusy(true); - sleep(); - if (option == 0) { - - sendChat("I need an egg, a pot flour and some milk! And quickly!", npc, player); - player.setBusy(false); - npc.unblock(); - - } else if (option == 1) { - - // check items - if (player.getInventory().hasItemId(ITEM_EGG) && player.getInventory().hasItemId(ITEM_FLOUR) && player.getInventory().hasItemId(ITEM_MILK)) { - finishQuest(player, npc); - } else { - sendChat("No you don't! Oh please, don't get my hopes up like that!", npc, player); + private void finishQuest(final Player player, final Npc npc) { + sleep(1000); + if (player.getQuestStage(this) == COMPLETE) { player.setBusy(false); npc.unblock(); - } - - } else { - - sendChat("Oh, please hurry!", npc, player); - player.setBusy(false); - npc.unblock(); - + return; } + sendChat("Oh, thank you so much " + player.getUsername() + "!", npc, + player); - } - } else if (stage == 0) { - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; + sendChat("I'm afraid don't have any money to reward you with", npc, + player, 3000); - final Npc npc = (Npc) args[0]; + sendChat("But I can give you some cooking tips!", npc, player); - if (npc.getID() != COOK_ID) - return; - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Oh hi " + player.getUsername() + ". Thanks for your help! I can't talk at the moment though.", npc, player); + player.incExp(7, REWARD_XP, false); + player.getActionSender().sendStat(7); + player.setQuestStage(getUniqueID(), Quest.COMPLETE); + player.getInventory().remove(ITEM_EGG, 1); + player.getInventory().remove(ITEM_MILK, 1); + player.getInventory().remove(ITEM_FLOUR, 1); + player.getActionSender().sendInventory(); + player.incQuestPoints(QUEST_POINTS); player.setBusy(false); npc.unblock(); - } } - - } - - private void finishQuest(final Player player, final Npc npc) { - sleep(1000); - if (player.getQuestStage(this) == COMPLETE) { - player.setBusy(false); - npc.unblock(); - return; - } - sendChat("Oh, thank you so much " + player.getUsername() + "!", npc, player); - - sendChat("I'm afraid don't have any money to reward you with", npc, player, 3000); - - sendChat("But I can give you some cooking tips!", npc, player); - - player.incExp(7, REWARD_XP, false); - player.getActionSender().sendStat(7); - player.setQuestStage(getUniqueID(), Quest.COMPLETE); - player.getInventory().remove(ITEM_EGG, 1); - player.getInventory().remove(ITEM_MILK, 1); - player.getInventory().remove(ITEM_FLOUR, 1); - player.getActionSender().sendInventory(); - player.incQuestPoints(QUEST_POINTS); - player.setBusy(false); - npc.unblock(); - } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/Dorics.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/Dorics.java index f9831d6..6854cd2 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/Dorics.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/Dorics.java @@ -1,8 +1,11 @@ package org.moparscape.msc.gs.plugins.quests; -import org.moparscape.msc.gs.event.*; -import org.moparscape.msc.gs.model.*; -import org.moparscape.msc.gs.quest.*; +import org.moparscape.msc.gs.model.GameObject; +import org.moparscape.msc.gs.model.InvItem; +import org.moparscape.msc.gs.model.Npc; +import org.moparscape.msc.gs.model.Player; +import org.moparscape.msc.gs.quest.Quest; +import org.moparscape.msc.gs.quest.QuestAction; /** * Quest: Doric's Quest (v1.1) 4/5/2009 (uid: 7) Status: COMPLETE (untested) @@ -12,209 +15,251 @@ import org.moparscape.msc.gs.quest.*; * @author punKrockeR */ public class Dorics extends Quest { - public static final int DORIC_ID = 144; - public static final int ANVIL1_ID = 177; - public static final int ANVIL1_X = 327; - public static final int ANVIL1_Y = 490; - public static final int ANVIL2_ID = 177; - public static final int ANVIL2_X = 327; - public static final int ANVIL2_Y = 487; - private static final int QUEST_POINTS = 1; - private static final int REWARD_GP = 1500; - private static final int REWARD_EXP = 1000; + public static final int DORIC_ID = 144; + public static final int ANVIL1_ID = 177; + public static final int ANVIL1_X = 327; + public static final int ANVIL1_Y = 490; + public static final int ANVIL2_ID = 177; + public static final int ANVIL2_X = 327; + public static final int ANVIL2_Y = 487; + private static final int QUEST_POINTS = 1; + private static final int REWARD_GP = 1500; + private static final int REWARD_EXP = 1000; - public void init() { - associateNpc(DORIC_ID); - // associateObject(ANVIL1_ID, ANVIL1_X, ANVIL1_Y); - // associateObject(ANVIL2_ID, ANVIL2_X, ANVIL2_Y); - } - - /* - * public boolean isObjectAssociated(GameObject object, Player player) { - * if(object.getID() == ANVIL1_ID && (object.getX() == ANVIL1_X && - * object.getY() == ANVIL1_Y) || (object.getX() == ANVIL2_X && object.getY() - * == ANVIL2_Y)) return player.getQuestStage(getUniqueID()) != COMPLETE; - * - * return false; } - */ - - public String getName() { - return "Doric's Quest"; - } - - public int getUniqueID() { - return 7; - } - - public void handleAction(QuestAction action, Object[] args, final Player player) { - int stage = player.getQuestStage(this); - - if (action == action.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - player.setBusy(true); - npc.blockedBy(player); - - if (npc.getID() == DORIC_ID) - handleDoricChat(npc, player); - } else if (action == action.ITEM_USED_ON_OBJECT) { - if (args.length < 2 || !(args[0] instanceof InvItem) || !(args[1] instanceof GameObject)) - return; - - final InvItem item = (InvItem) args[0]; - final GameObject obj = (GameObject) args[1]; - } - } - - private void handleDoricChat(final Npc npc, final Player player) { - int stage = player.getQuestStage(this); - if (stage == Quest.COMPLETE) { - sendChat("Be sure to use my anvils at anytime friend!", npc, player); - sendChat("I will do that, thanks.", player, npc); - player.setBusy(false); - npc.unblock(); - return; + public void init() { + associateNpc(DORIC_ID); + // associateObject(ANVIL1_ID, ANVIL1_X, ANVIL1_Y); + // associateObject(ANVIL2_ID, ANVIL2_X, ANVIL2_Y); } - if (stage == -1) { - sendChat("Why are you so grumpy little man?", player, npc); - sendChat("I'm sick of people sneaking into my house to use my anvils!", npc, player); - sendChat("But they're the only anvils in this part of town", player, npc); - sendChat("It's very selfish of you to keep them all to yourself", player, npc); - sendChat("They're my anvils and it's my house", npc, player); - sendChat("So unless they earn my respect as a smither, I'll be as selfish as I want!", npc, player); + /* + * public boolean isObjectAssociated(GameObject object, Player player) { + * if(object.getID() == ANVIL1_ID && (object.getX() == ANVIL1_X && + * object.getY() == ANVIL1_Y) || (object.getX() == ANVIL2_X && object.getY() + * == ANVIL2_Y)) return player.getQuestStage(getUniqueID()) != COMPLETE; + * + * return false; } + */ - player.setBusy(false); - int option = getMenuOption(player, "How can I earn your respect?", "No wonder no one likes you", "But... I'm bigger than you"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + public String getName() { + return "Doric's Quest"; + } - if (option == 0) { - sendChat("Well, I can always use a helping hand", npc, player); - sendChat("What do you need help with?", player, npc); - sendChat("I'm crafting some amulets at the moment", npc, player); - sendChat("But I've just run out of materials to make them with", npc, player); - sendChat("If you're serious about helping me", npc, player); - sendChat("Then collecting them for me would be a great start", npc, player); + public int getUniqueID() { + return 7; + } - player.setBusy(false); - option = getMenuOption(player, "I don't have time", "I don't work for little people", "Alright, what do you need?"); - if (option == -1) - return; + public void handleAction(QuestAction action, Object[] args, + final Player player) { + + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; + + final Npc npc = (Npc) args[0]; + + player.setBusy(true); + npc.blockedBy(player); + + if (npc.getID() == DORIC_ID) + handleDoricChat(npc, player); + } else if (action == QuestAction.ITEM_USED_ON_OBJECT) { + if (args.length < 2 || !(args[0] instanceof InvItem) + || !(args[1] instanceof GameObject)) + return; + + } + } + + private void handleDoricChat(final Npc npc, final Player player) { + int stage = player.getQuestStage(this); + if (stage == Quest.COMPLETE) { + sendChat("Be sure to use my anvils at anytime friend!", npc, player); + sendChat("I will do that, thanks.", player, npc); + player.setBusy(false); + npc.unblock(); + return; + } + + if (stage == -1) { + sendChat("Why are you so grumpy little man?", player, npc); + sendChat( + "I'm sick of people sneaking into my house to use my anvils!", + npc, player); + sendChat("But they're the only anvils in this part of town", + player, npc); + sendChat("It's very selfish of you to keep them all to yourself", + player, npc); + sendChat("They're my anvils and it's my house", npc, player); + sendChat( + "So unless they earn my respect as a smither, I'll be as selfish as I want!", + npc, player); + + player.setBusy(false); + int option = getMenuOption(player, "How can I earn your respect?", + "No wonder no one likes you", "But... I'm bigger than you"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat("Well, I can always use a helping hand", npc, player); + sendChat("What do you need help with?", player, npc); + sendChat("I'm crafting some amulets at the moment", npc, player); + sendChat( + "But I've just run out of materials to make them with", + npc, player); + sendChat("If you're serious about helping me", npc, player); + sendChat("Then collecting them for me would be a great start", + npc, player); + + player.setBusy(false); + option = getMenuOption(player, "I don't have time", + "I don't work for little people", + "Alright, what do you need?"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat( + "Fine, leave me to it then. But don't expect me to let you use my anvils!", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 1) { + sendChat("I'm vertically challenged!", npc, player); + sendChat( + "Get out of here before I smelt an iron bar to your ass", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 2) { + sendChat( + "I need six pieces of clay, four copper ores and two iron ores", + npc, player); + sendChat( + "Save me some time and bring those back here for me", + npc, player); + sendChat( + "And I'll let you use my anvils any time you need to", + npc, player); + + player.setBusy(false); + option = getMenuOption(player, "I'll get to it then", + "Maybe later"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + player.setQuestStage(getUniqueID(), 1); // Start quest + sendChat("Thank you " + player.getUsername(), npc, + player); + sendChat("That would be a great help", npc, player); + sendChat( + "I'll just wait here for you to come back then", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else { + sendChat( + "Fine, but don't expect me to let you use my anvils in the meantime!", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } + } else if (option == 1) { + sendChat("I don't care much for friends", npc, player); + sendChat("So get outta my house!", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else { + sendChat("I'm big where it counts, " + + (player.isMale() ? "buddy" : "missy") + "!", npc, + player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (stage == 1) { + sendChat("Have you got my materials yet?", npc, player); + + player.setBusy(false); + int option = getMenuOption(player, "Yes, I have", "No, not yet", + "I forgot what to get!"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + + if (countItem(player, 149) >= 6 && countItem(player, 150) >= 4 + && countItem(player, 151) >= 2 && stage != COMPLETE) { + sendChat("Excellent! Hand 'em over, then", npc, player); + player.getActionSender().sendMessage( + "You hand Doric the materials"); + for (int i = 0; i < 6; i++) + takeItem(player, new InvItem(149)); + for (int i = 0; i < 4; i++) + takeItem(player, new InvItem(150)); + for (int i = 0; i < 2; i++) + takeItem(player, new InvItem(151)); + sleep(); + sendChat("Thanks for your help " + player.getUsername(), + npc, player); + sendChat( + "Anyone who lends a hand is welcome in my workshop", + npc, player); + sendChat("Come back and use my anvils whenever you like!", + npc, player, 1200); + player.incQuestPoints(QUEST_POINTS); + player.incExp(13, REWARD_EXP, false); + giveItem(player, new InvItem(10, REWARD_GP)); + player.setQuestStage(getUniqueID(), Quest.COMPLETE); + player.setBusy(false); + npc.unblock(); + return; + } else { + sendChat( + "Liar! You're not doing a very good job of earning my trust!", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (option == 1) { + sendChat("Well come and talk to me when you do", npc, player); + sendChat("And I'll consider letting you use my anvils", npc, + player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 2) { + sendChat( + "I need six pieces of clay, four copper ores and two iron ores", + npc, player); + sendChat("Oh right, thanks. I'll get back to it then", player, + npc, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } + npc.unblock(); player.setBusy(true); - sleep(); - - if (option == 0) { - sendChat("Fine, leave me to it then. But don't expect me to let you use my anvils!", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 1) { - sendChat("I'm vertically challenged!", npc, player); - sendChat("Get out of here before I smelt an iron bar to your ass", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 2) { - sendChat("I need six pieces of clay, four copper ores and two iron ores", npc, player); - sendChat("Save me some time and bring those back here for me", npc, player); - sendChat("And I'll let you use my anvils any time you need to", npc, player); - - player.setBusy(false); - option = getMenuOption(player, "I'll get to it then", "Maybe later"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - player.setQuestStage(getUniqueID(), 1); // Start quest - sendChat("Thank you " + player.getUsername(), npc, player); - sendChat("That would be a great help", npc, player); - sendChat("I'll just wait here for you to come back then", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else { - sendChat("Fine, but don't expect me to let you use my anvils in the meantime!", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } - } else if (option == 1) { - sendChat("I don't care much for friends", npc, player); - sendChat("So get outta my house!", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else { - sendChat("I'm big where it counts, " + (player.isMale() ? "buddy" : "missy") + "!", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (stage == 1) { - sendChat("Have you got my materials yet?", npc, player); - - player.setBusy(false); - int option = getMenuOption(player, "Yes, I have", "No, not yet", "I forgot what to get!"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - - if (countItem(player, 149) >= 6 && countItem(player, 150) >= 4 && countItem(player, 151) >= 2 && stage != COMPLETE) { - sendChat("Excellent! Hand 'em over, then", npc, player); - player.getActionSender().sendMessage("You hand Doric the materials"); - for (int i = 0; i < 6; i++) - takeItem(player, new InvItem(149)); - for (int i = 0; i < 4; i++) - takeItem(player, new InvItem(150)); - for (int i = 0; i < 2; i++) - takeItem(player, new InvItem(151)); - sleep(); - sendChat("Thanks for your help " + player.getUsername(), npc, player); - sendChat("Anyone who lends a hand is welcome in my workshop", npc, player); - sendChat("Come back and use my anvils whenever you like!", npc, player, 1200); - player.incQuestPoints(QUEST_POINTS); - player.incExp(13, REWARD_EXP, false); - giveItem(player, new InvItem(10, REWARD_GP)); - player.setQuestStage(getUniqueID(), Quest.COMPLETE); - player.setBusy(false); - npc.unblock(); - return; - } else { - sendChat("Liar! You're not doing a very good job of earning my trust!", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (option == 1) { - sendChat("Well come and talk to me when you do", npc, player); - sendChat("And I'll consider letting you use my anvils", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 2) { - sendChat("I need six pieces of clay, four copper ores and two iron ores", npc, player); - sendChat("Oh right, thanks. I'll get back to it then", player, npc, 1200); - player.setBusy(false); - npc.unblock(); - return; - } } - npc.unblock(); - player.setBusy(true); - } - public Dorics() { - } + public Dorics() { + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/GoblinDiplomacy.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/GoblinDiplomacy.java index 416a0ea..f6b8fa1 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/GoblinDiplomacy.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/GoblinDiplomacy.java @@ -1,8 +1,12 @@ package org.moparscape.msc.gs.plugins.quests; -import org.moparscape.msc.gs.event.*; -import org.moparscape.msc.gs.model.*; -import org.moparscape.msc.gs.quest.*; +import org.moparscape.msc.gs.model.InvItem; +import org.moparscape.msc.gs.model.Item; +import org.moparscape.msc.gs.model.Npc; +import org.moparscape.msc.gs.model.Player; +import org.moparscape.msc.gs.model.World; +import org.moparscape.msc.gs.quest.Quest; +import org.moparscape.msc.gs.quest.QuestAction; /** * Quest: Goblin Diplomacy (v1.0) 8/5/2009 (uid: 10) Status: COMPLETE (untested) @@ -15,618 +19,727 @@ import org.moparscape.msc.gs.quest.*; * @author punKrockeR */ public class GoblinDiplomacy extends Quest { - private static final int QUEST_POINTS = 5; - private static final int REWARD_EXP = 1000; - private static final int BENTNOZE_ID = 152; - private static final int WARTFACE_ID = 151; - private static final int BARTENDER_ID = 150; - private static final int WYSON_ID = 116; - private static final int AGGIE_ID = 125; - private static final int WOAD_LEAF_ID = 281; - private static final int BERRIES_ID = 236; - private static final int ONION_ID = 241; - private static final int ORANGE_ARMOUR_ID = 274; - private static final int GOBLIN_ARMOUR_ID = 273; - private static final int RED_DYE_ID = 238; - private static final int YELLOW_DYE_ID = 239; - private static final int BLUE_DYE_ID = 272; - private static final int ORANGE_DYE_ID = 282; - private static final int BLUE_ARMOUR_ID = 275; + private static final int QUEST_POINTS = 5; + private static final int REWARD_EXP = 1000; + private static final int BENTNOZE_ID = 152; + private static final int WARTFACE_ID = 151; + private static final int BARTENDER_ID = 150; + private static final int WYSON_ID = 116; + private static final int AGGIE_ID = 125; + private static final int WOAD_LEAF_ID = 281; + private static final int BERRIES_ID = 236; + private static final int ONION_ID = 241; + private static final int ORANGE_ARMOUR_ID = 274; + private static final int GOBLIN_ARMOUR_ID = 273; + private static final int RED_DYE_ID = 238; + private static final int YELLOW_DYE_ID = 239; + private static final int BLUE_DYE_ID = 272; + private static final int ORANGE_DYE_ID = 282; + private static final int BLUE_ARMOUR_ID = 275; - public void init() { - associateNpc(BENTNOZE_ID); - associateNpc(WARTFACE_ID); - associateNpc(BARTENDER_ID); - // associateNpc(WYSON_ID); - associateNpc(AGGIE_ID); - associateItem(GOBLIN_ARMOUR_ID); - associateItem(RED_DYE_ID); - associateItem(YELLOW_DYE_ID); - associateItem(BLUE_DYE_ID); - associateItem(ORANGE_DYE_ID); - // associateItem(ORANGE_ARMOUR_ID); - } - - /** - * @return if the given Item is visible to the player - */ - public boolean isItemVisible(Item item, Player player) { - int stage = player.getQuestStage(this); - - switch (item.getID()) { - case ORANGE_ARMOUR_ID: - BLUE_ARMOUR_ID: return stage >= 1; - default: - return true; - } - } - - public String getName() { - return "Goblin Diplomacy"; - } - - public int getUniqueID() { - return 10; - } - - public void handleAction(QuestAction action, Object[] args, final Player player) { - - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - - - if (npc.getID() == BENTNOZE_ID) - handleBentnozeChat(npc, player); - else if (npc.getID() == WARTFACE_ID) - handleWartfaceChat(npc, player); - else if (npc.getID() == BARTENDER_ID) - handleBartenderChat(npc, player); - else if (npc.getID() == WYSON_ID) - handleWysonChat(npc, player); - else if (npc.getID() == AGGIE_ID) - handleAggieChat(npc, player); - } else if (action == QuestAction.ITEM_USED_ON_ITEM) { - if (!(args[0] instanceof InvItem) && !(args[1] instanceof InvItem)) - return; - - final InvItem item1 = (InvItem) args[0]; - final InvItem item2 = (InvItem) args[1]; - - if ((item1.getID() == ORANGE_DYE_ID && item2.getID() == GOBLIN_ARMOUR_ID) || (item1.getID() == GOBLIN_ARMOUR_ID && item2.getID() == ORANGE_DYE_ID)) { - player.setBusy(true); - sendMessage(player, "You dye the goblin armour orange"); - sleep(1200); - takeItem(player, item1, item2); - giveItem(player, ORANGE_ARMOUR_ID); - player.setBusy(false); - return; - } else if ((item1.getID() == BLUE_DYE_ID && item2.getID() == GOBLIN_ARMOUR_ID) || (item1.getID() == GOBLIN_ARMOUR_ID && item2.getID() == BLUE_DYE_ID)) { - player.setBusy(true); - sendMessage(player, "You dye the goblin armour dark blue"); - sleep(1200); - takeItem(player, item1, item2); - giveItem(player, BLUE_ARMOUR_ID); - player.setBusy(false); - return; - } else if ((item1.getID() == RED_DYE_ID && item2.getID() == YELLOW_DYE_ID) || (item1.getID() == YELLOW_DYE_ID && item2.getID() == RED_DYE_ID)) { - player.setBusy(true); - sendMessage(player, "You mix the two dyes and make an orange dye"); - sleep(1200); - takeItem(player, item1, item2); - giveItem(player, ORANGE_DYE_ID); - player.setBusy(false); - return; - } - } - } - - private void handleAggieChat(final Npc npc, final Player player) { - sendChat("What can I help you with?", npc, player); - - player.setBusy(false); - int option = getMenuOption(player, "What could you make for me", "Cool, do you turn people into frogs?", "You mad old witch, you can't help me", "Can you make dyes for me please"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - sendChat("I mostly just make what i find pretty", npc, player); - sendChat("I sometimes make dye for the womens clothes, brighten the place up", npc, player); - sendChat("I can make red, yellow and blue dyes. would you like some?", npc, player); - - player.setBusy(false); - option = getMenuOption(player, "What do you need to make some red dye please", "What do you need to make some yellow dye please", "What do you need to make some blue dye please", "No thanks, I am happy the colour I am"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - redDye(npc, player); - } else if (option == 1) { - yellowDye(npc, player); - } else if (option == 2) { - blueDye(npc, player); - } else { - sendChat("You are easily pleased with yourself then", npc, player); - sendChat("When you need dyes, come to me", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (option == 1) { - sendChat("Oh, not for years, but if you meet a talking chicken,", npc, player); - sendChat("You have probably met the professor in the manor north of here", npc, player); - sendChat("A few years ago it was flying fish, that machine is a menace", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 2) { - sendChat("Oh, you like to call a witch names, do you?", npc, player); - - if (countItem(player, 10) >= 20) { - sendMessage(player, "Aggie waves her hands about, and you seem to be 20 coins poorer"); - takeItem(player, new InvItem(10, 20)); - sleep(); - sendChat("Thats a fine for insulting a witch, you should learn some respect", npc, player, 1200); - } else { - sendChat("You should be careful about insulting a witch", npc, player); - sendChat("You never know what shape you could wake up in", npc, player, 1200); - } - - player.setBusy(false); - npc.unblock(); - return; - } else { - sendChat("What sort of dye would you like? red, yellow or blue?", npc, player); - - player.setBusy(false); - option = getMenuOption(player, "What do you need to make some red dye please", "What do you need to make some yellow dye please", "What do you need to make some blue dye please", "None thanks"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - redDye(npc, player); - } else if (option == 1) { - yellowDye(npc, player); - } else if (option == 2) { - blueDye(npc, player); - } else { - sendChat("Suit yourself", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } - } - - private void redDye(final Npc npc, final Player player) { - sendChat("3 Lots of red berries, and 5 coins, to you", npc, player); - handleDye("red", BERRIES_ID, 3, "berries", 238, npc, player); - } - - private void yellowDye(final Npc npc, final Player player) { - sendChat("Yellow is a strange colour to get, comes from onion skins", npc, player); - sendChat("I need 2 onions, and 5 coins to make yellow", npc, player); - handleDye("yellow", ONION_ID, 2, "onions", YELLOW_DYE_ID, npc, player); - } - - private void blueDye(final Npc npc, final Player player) { - sendChat("2 Woad leaves, and 5 coins, to you", npc, player); - handleDye("blue", WOAD_LEAF_ID, 2, "leaves", BLUE_DYE_ID, npc, player); - } - - private void handleDye(String colour, int itemId, int amount, String itemName, int dyeId, final Npc npc, final Player player) { - player.setBusy(false); - int option = getMenuOption(player, "Okay, make me some " + colour + " dye please", "I don't think I have all the ingredients yet", "I can do without dye at that price"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - if (countItem(player, itemId) < amount) { - sendChat("Ah wait, sorry. I don't have all the ingredients yet", player, npc); - sendChat("You know what you need to get now, come back when you have them", npc, player); - sendChat("Goodbye for now", npc, player, 2000); - player.setBusy(false); - npc.unblock(); - sendMessage(player, "You don't have enough " + itemName + " for the dye!"); - return; - } - - if (countItem(player, 10) < 5) { - sendChat("Ah wait, sorry, I don't have enough coins on me", player, npc); - sendChat("Well come back when you do and I'll make you some dye", npc, player, 2000); - sendMessage(player, "You don't have enough coins for the dye!"); - player.setBusy(false); - npc.unblock(); - return; - } - - sendMessage(player, "You hand the " + itemName + " and payment to Aggie"); - player.getActionSender().sendSound("coin"); - takeItem(player, new InvItem(10, 5), new InvItem(itemId, 1)); - sleep(); - sendMessage(player, "She takes a red bottle from nowhere and hands it to you"); - giveItem(player, dyeId); - sleep(); - sendChat("Thank you", player, npc, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 1) { - sendChat("You know what you need to get now, come back when you have them", npc, player); - sendChat("Goodbye for now", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 2) { - sendChat("That's your choice, but I would think you have killed for less", npc, player); - sendChat("I can see it in your eyes", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - } - } - - private void handleWysonChat(final Npc npc, final Player player) { - sendChat("I am the gardener round here", npc, player); - sendChat("Do you have any gardening that needs doing?", npc, player); - - if (getQuestStage(player) <= 1 || getQuestStage(player) == COMPLETE) { - sendChat("Not right now thanks", player, npc, 1200); - player.setBusy(false); - npc.unblock(); - return; + public void init() { + associateNpc(BENTNOZE_ID); + associateNpc(WARTFACE_ID); + associateNpc(BARTENDER_ID); + // associateNpc(WYSON_ID); + associateNpc(AGGIE_ID); + associateItem(GOBLIN_ARMOUR_ID); + associateItem(RED_DYE_ID); + associateItem(YELLOW_DYE_ID); + associateItem(BLUE_DYE_ID); + associateItem(ORANGE_DYE_ID); + // associateItem(ORANGE_ARMOUR_ID); } - player.setBusy(false); - int option = getMenuOption(player, "I'm looking for woad leaves", "Not right now thanks"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + /** + * @return if the given Item is visible to the player + */ + public boolean isItemVisible(Item item, Player player) { + int stage = player.getQuestStage(this); - if (option == 0) { - sendChat("Well luckily for you I may have some around here somewhere", npc, player); - sendChat("Can I buy one please?", player, npc); - sendChat("How much are you willing to pay?", npc, player); - - player.setBusy(false); - option = getMenuOption(player, "How about 5 coins?", "How about 10 coins?", "How about 15 coins?", "How about 20 coins?"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0 || option == 1) // 5 or 10 - { - sendChat("No no thats far too little. Woad leaves are hard to get you know", npc, player); - sendChat("I used to have plenty but someone kept stealing them off me", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - if (option == 2) // 15 - { - sendChat("Mmmm ok that sounds fair.", npc, player); - - if (countItem(player, 10) < 15) { - sendChat("I dont have enough coins to buy the leaves. I'll come back later", player, npc, 1200); - player.setBusy(false); - npc.unblock(); - return; + switch (item.getID()) { + case ORANGE_ARMOUR_ID: + case BLUE_ARMOUR_ID: + return stage >= 1; + default: + return true; } - - takeItem(player, new InvItem(10, 15)); - sendMessage(player, "You give Wyson 15 coins"); - sleep(); - giveItem(player, WOAD_LEAF_ID); - sendMessage(player, "Wyson the gardener gives you some woad leaves"); - sleep(1200); - player.setBusy(false); - npc.unblock(); - } else // 20 - { - sendChat("Ok that's more than fair.", npc, player); - takeItem(player, new InvItem(10, 20)); - sendMessage(player, "You give Wyson 20 coins"); - sleep(); - takeItem(player, WOAD_LEAF_ID); - sendMessage(player, "Wyson the gardener gives you some woad leaves"); - sleep(); - sendChat("Here have some more you're a generous person", npc, player); - takeItem(player, WOAD_LEAF_ID); - sendMessage(player, "Wyson the gardener gives you some more leaves"); - sleep(1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else { - player.setBusy(false); - npc.unblock(); } - } - private void handleBartenderChat(final Npc npc, final Player player) { - int stage = getQuestStage(player); + public String getName() { + return "Goblin Diplomacy"; + } - if (stage == -1) { - sendChat("Hi there how may i help you", npc, player); + public int getUniqueID() { + return 10; + } - player.setBusy(false); - int option = getMenuOption(player, "Could I buy a beer please?", "Not very busy in here today is it?"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + public void handleAction(QuestAction action, Object[] args, + final Player player) { - if (option == 0) { - sendChat("Sure that will be 2 gold coins please", npc, player); + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; - if (countItem(player, 10) >= 2) { - sendChat("Ok here you go thanks", player, npc, 2000); - player.getActionSender().sendMessage("You buy a beer"); - takeItem(player, new InvItem(10, 2)); - giveItem(player, 193); - sleep(1200); - player.setBusy(false); - npc.unblock(); - return; + final Npc npc = (Npc) args[0]; + + if (npc.getID() == BENTNOZE_ID) + handleBentnozeChat(npc, player); + else if (npc.getID() == WARTFACE_ID) + handleWartfaceChat(npc, player); + else if (npc.getID() == BARTENDER_ID) + handleBartenderChat(npc, player); + else if (npc.getID() == WYSON_ID) + handleWysonChat(npc, player); + else if (npc.getID() == AGGIE_ID) + handleAggieChat(npc, player); + } else if (action == QuestAction.ITEM_USED_ON_ITEM) { + if (!(args[0] instanceof InvItem) && !(args[1] instanceof InvItem)) + return; + + final InvItem item1 = (InvItem) args[0]; + final InvItem item2 = (InvItem) args[1]; + + if ((item1.getID() == ORANGE_DYE_ID && item2.getID() == GOBLIN_ARMOUR_ID) + || (item1.getID() == GOBLIN_ARMOUR_ID && item2.getID() == ORANGE_DYE_ID)) { + player.setBusy(true); + sendMessage(player, "You dye the goblin armour orange"); + sleep(1200); + takeItem(player, item1, item2); + giveItem(player, ORANGE_ARMOUR_ID); + player.setBusy(false); + return; + } else if ((item1.getID() == BLUE_DYE_ID && item2.getID() == GOBLIN_ARMOUR_ID) + || (item1.getID() == GOBLIN_ARMOUR_ID && item2.getID() == BLUE_DYE_ID)) { + player.setBusy(true); + sendMessage(player, "You dye the goblin armour dark blue"); + sleep(1200); + takeItem(player, item1, item2); + giveItem(player, BLUE_ARMOUR_ID); + player.setBusy(false); + return; + } else if ((item1.getID() == RED_DYE_ID && item2.getID() == YELLOW_DYE_ID) + || (item1.getID() == YELLOW_DYE_ID && item2.getID() == RED_DYE_ID)) { + player.setBusy(true); + sendMessage(player, + "You mix the two dyes and make an orange dye"); + sleep(1200); + takeItem(player, item1, item2); + giveItem(player, ORANGE_DYE_ID); + player.setBusy(false); + return; + } + } + } + + private void handleAggieChat(final Npc npc, final Player player) { + sendChat("What can I help you with?", npc, player); + + player.setBusy(false); + int option = getMenuOption(player, "What could you make for me", + "Cool, do you turn people into frogs?", + "You mad old witch, you can't help me", + "Can you make dyes for me please"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat("I mostly just make what i find pretty", npc, player); + sendChat( + "I sometimes make dye for the womens clothes, brighten the place up", + npc, player); + sendChat( + "I can make red, yellow and blue dyes. would you like some?", + npc, player); + + player.setBusy(false); + option = getMenuOption(player, + "What do you need to make some red dye please", + "What do you need to make some yellow dye please", + "What do you need to make some blue dye please", + "No thanks, I am happy the colour I am"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + redDye(npc, player); + } else if (option == 1) { + yellowDye(npc, player); + } else if (option == 2) { + blueDye(npc, player); + } else { + sendChat("You are easily pleased with yourself then", npc, + player); + sendChat("When you need dyes, come to me", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (option == 1) { + sendChat("Oh, not for years, but if you meet a talking chicken,", + npc, player); + sendChat( + "You have probably met the professor in the manor north of here", + npc, player); + sendChat( + "A few years ago it was flying fish, that machine is a menace", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 2) { + sendChat("Oh, you like to call a witch names, do you?", npc, player); + + if (countItem(player, 10) >= 20) { + sendMessage(player, + "Aggie waves her hands about, and you seem to be 20 coins poorer"); + takeItem(player, new InvItem(10, 20)); + sleep(); + sendChat( + "Thats a fine for insulting a witch, you should learn some respect", + npc, player, 1200); + } else { + sendChat("You should be careful about insulting a witch", npc, + player); + sendChat("You never know what shape you could wake up in", npc, + player, 1200); + } + + player.setBusy(false); + npc.unblock(); + return; } else { - player.getActionSender().sendMessage("You don't have enough coins to buy the beer!"); - sleep(1200); - player.setBusy(false); - npc.unblock(); - return; + sendChat("What sort of dye would you like? red, yellow or blue?", + npc, player); + + player.setBusy(false); + option = getMenuOption(player, + "What do you need to make some red dye please", + "What do you need to make some yellow dye please", + "What do you need to make some blue dye please", + "None thanks"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + redDye(npc, player); + } else if (option == 1) { + yellowDye(npc, player); + } else if (option == 2) { + blueDye(npc, player); + } else { + sendChat("Suit yourself", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } } - } else { - queueChat(npc, player, "No it was earlier", "There was a guy in here saying the goblins up by the mountain", "Are arguing again", "Of all things about the colour of their armour.", "Knowing the goblins, it could easily turn into a full blown war", "Which wouldn't be good", "Goblin wars make such a mess of the countryside"); - sendChat("Well if I have time I'll see if I can go and knock some sense into them", player, npc, 1200); - setStage(player, 1); // Start quest + } + + private void redDye(final Npc npc, final Player player) { + sendChat("3 Lots of red berries, and 5 coins, to you", npc, player); + handleDye("red", BERRIES_ID, 3, "berries", 238, npc, player); + } + + private void yellowDye(final Npc npc, final Player player) { + sendChat("Yellow is a strange colour to get, comes from onion skins", + npc, player); + sendChat("I need 2 onions, and 5 coins to make yellow", npc, player); + handleDye("yellow", ONION_ID, 2, "onions", YELLOW_DYE_ID, npc, player); + } + + private void blueDye(final Npc npc, final Player player) { + sendChat("2 Woad leaves, and 5 coins, to you", npc, player); + handleDye("blue", WOAD_LEAF_ID, 2, "leaves", BLUE_DYE_ID, npc, player); + } + + private void handleDye(String colour, int itemId, int amount, + String itemName, int dyeId, final Npc npc, final Player player) { player.setBusy(false); - npc.unblock(); - } - } else { - player.setBusy(false); - int option = getMenuOption(player, "Could I buy a beer please?", stage == COMPLETE ? "I fixed the goblin problem" : "I'm negotiating with the goblins"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + int option = getMenuOption(player, "Okay, make me some " + colour + + " dye please", + "I don't think I have all the ingredients yet", + "I can do without dye at that price"); + if (option == -1) + return; + player.setBusy(true); + sleep(); - if (option == 0) { - sendChat("Sure that will be 2 gold coins please", npc, player); + if (option == 0) { + if (countItem(player, itemId) < amount) { + sendChat( + "Ah wait, sorry. I don't have all the ingredients yet", + player, npc); + sendChat( + "You know what you need to get now, come back when you have them", + npc, player); + sendChat("Goodbye for now", npc, player, 2000); + player.setBusy(false); + npc.unblock(); + sendMessage(player, "You don't have enough " + itemName + + " for the dye!"); + return; + } - if (countItem(player, 10) >= 2) { - sendChat("Ok here you go thanks", player, npc, 2000); - player.getActionSender().sendMessage("You buy a beer"); - takeItem(player, new InvItem(10, 2)); - giveItem(player, 193); - sleep(1200); - player.setBusy(false); - npc.unblock(); - return; - } else { - player.getActionSender().sendMessage("You don't have enough coins to buy the beer!"); - sleep(1200); - player.setBusy(false); - npc.unblock(); - return; + if (countItem(player, 10) < 5) { + sendChat("Ah wait, sorry, I don't have enough coins on me", + player, npc); + sendChat( + "Well come back when you do and I'll make you some dye", + npc, player, 2000); + sendMessage(player, "You don't have enough coins for the dye!"); + player.setBusy(false); + npc.unblock(); + return; + } + + sendMessage(player, "You hand the " + itemName + + " and payment to Aggie"); + player.getActionSender().sendSound("coin"); + takeItem(player, new InvItem(10, 5), new InvItem(itemId, 1)); + sleep(); + sendMessage(player, + "She takes a red bottle from nowhere and hands it to you"); + giveItem(player, dyeId); + sleep(); + sendChat("Thank you", player, npc, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 1) { + sendChat( + "You know what you need to get now, come back when you have them", + npc, player); + sendChat("Goodbye for now", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 2) { + sendChat( + "That's your choice, but I would think you have killed for less", + npc, player); + sendChat("I can see it in your eyes", npc, player, 1200); + player.setBusy(false); + npc.unblock(); } - } else { + } + + private void handleWysonChat(final Npc npc, final Player player) { + sendChat("I am the gardener round here", npc, player); + sendChat("Do you have any gardening that needs doing?", npc, player); + + if (getQuestStage(player) <= 1 || getQuestStage(player) == COMPLETE) { + sendChat("Not right now thanks", player, npc, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + + player.setBusy(false); + int option = getMenuOption(player, "I'm looking for woad leaves", + "Not right now thanks"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat( + "Well luckily for you I may have some around here somewhere", + npc, player); + sendChat("Can I buy one please?", player, npc); + sendChat("How much are you willing to pay?", npc, player); + + player.setBusy(false); + option = getMenuOption(player, "How about 5 coins?", + "How about 10 coins?", "How about 15 coins?", + "How about 20 coins?"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0 || option == 1) // 5 or 10 + { + sendChat( + "No no thats far too little. Woad leaves are hard to get you know", + npc, player); + sendChat( + "I used to have plenty but someone kept stealing them off me", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + if (option == 2) // 15 + { + sendChat("Mmmm ok that sounds fair.", npc, player); + + if (countItem(player, 10) < 15) { + sendChat( + "I dont have enough coins to buy the leaves. I'll come back later", + player, npc, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + + takeItem(player, new InvItem(10, 15)); + sendMessage(player, "You give Wyson 15 coins"); + sleep(); + giveItem(player, WOAD_LEAF_ID); + sendMessage(player, + "Wyson the gardener gives you some woad leaves"); + sleep(1200); + player.setBusy(false); + npc.unblock(); + } else // 20 + { + sendChat("Ok that's more than fair.", npc, player); + takeItem(player, new InvItem(10, 20)); + sendMessage(player, "You give Wyson 20 coins"); + sleep(); + takeItem(player, WOAD_LEAF_ID); + sendMessage(player, + "Wyson the gardener gives you some woad leaves"); + sleep(); + sendChat("Here have some more you're a generous person", npc, + player); + takeItem(player, WOAD_LEAF_ID); + sendMessage(player, + "Wyson the gardener gives you some more leaves"); + sleep(1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else { + player.setBusy(false); + npc.unblock(); + } + } + + private void handleBartenderChat(final Npc npc, final Player player) { + int stage = getQuestStage(player); + + if (stage == -1) { + sendChat("Hi there how may i help you", npc, player); + + player.setBusy(false); + int option = getMenuOption(player, "Could I buy a beer please?", + "Not very busy in here today is it?"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat("Sure that will be 2 gold coins please", npc, player); + + if (countItem(player, 10) >= 2) { + sendChat("Ok here you go thanks", player, npc, 2000); + player.getActionSender().sendMessage("You buy a beer"); + takeItem(player, new InvItem(10, 2)); + giveItem(player, 193); + sleep(1200); + player.setBusy(false); + npc.unblock(); + return; + } else { + player.getActionSender().sendMessage( + "You don't have enough coins to buy the beer!"); + sleep(1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else { + queueChat( + npc, + player, + "No it was earlier", + "There was a guy in here saying the goblins up by the mountain", + "Are arguing again", + "Of all things about the colour of their armour.", + "Knowing the goblins, it could easily turn into a full blown war", + "Which wouldn't be good", + "Goblin wars make such a mess of the countryside"); + sendChat( + "Well if I have time I'll see if I can go and knock some sense into them", + player, npc, 1200); + setStage(player, 1); // Start quest + player.setBusy(false); + npc.unblock(); + } + } else { + player.setBusy(false); + int option = getMenuOption(player, "Could I buy a beer please?", + stage == COMPLETE ? "I fixed the goblin problem" + : "I'm negotiating with the goblins"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat("Sure that will be 2 gold coins please", npc, player); + + if (countItem(player, 10) >= 2) { + sendChat("Ok here you go thanks", player, npc, 2000); + player.getActionSender().sendMessage("You buy a beer"); + takeItem(player, new InvItem(10, 2)); + giveItem(player, 193); + sleep(1200); + player.setBusy(false); + npc.unblock(); + return; + } else { + player.getActionSender().sendMessage( + "You don't have enough coins to buy the beer!"); + sleep(1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else { + if (stage == COMPLETE) { + sendChat("Thanks lad", npc, player); + sendChat("Hard work like that deserves a beer", npc, + player, 2000); + player.getActionSender().sendMessage( + "The bartender hands you a free beer"); + giveItem(player, 193); + sleep(1200); + sendChat("Cheers mate", player, npc, 1200); + player.setBusy(false); + npc.unblock(); + } else { + sendChat("Well goodluck with that", npc, player); + sendChat( + "If you sort it out, come back and I'll shout you a beer on the house", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } + } + } + + private void handleBentnozeChat(final Npc npc, final Player player) { + final Npc wartface = World.getWorld().getNpc(WARTFACE_ID, 314, 330, + 441, 457); + + if (wartface == null) + return; + + handleWartfaceChat(wartface, player); + } + + private void handleWartfaceChat(final Npc npc, final Player player) { + int stage = player.getQuestStage(this); + final Npc bentnoze = World.getWorld().getNpc(BENTNOZE_ID, 314, 330, + 441, 457); + if (stage == COMPLETE) { - sendChat("Thanks lad", npc, player); - sendChat("Hard work like that deserves a beer", npc, player, 2000); - player.getActionSender().sendMessage("The bartender hands you a free beer"); - giveItem(player, 193); - sleep(1200); - sendChat("Cheers mate", player, npc, 1200); - player.setBusy(false); - npc.unblock(); - } else { - sendChat("Well goodluck with that", npc, player); - sendChat("If you sort it out, come back and I'll shout you a beer on the house", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; + sendChat( + "Now you've solved our argument we gotta think of something else to do", + npc, player); + sendChat("Yep, we bored now", bentnoze, player, 1200); + npc.unblock(); + player.setBusy(false); + return; } - } - } - } - private void handleBentnozeChat(final Npc npc, final Player player) { - int stage = getQuestStage(player); - final Npc wartface = World.getWorld().getNpc(WARTFACE_ID, 314, 330, 441, 457); + argue(player); - if (wartface == null) - return; + if (npc == null) + return; - handleWartfaceChat(wartface, player); - } + if (stage == -1 || stage == 1) { + if (stage == 1) + startQuest(npc, player); + } else if (stage == 2) { + sendChat("Oh it you", npc, player, 2000); + sendChat("Have you got some orange goblin armour yet?", npc, player); - private void handleWartfaceChat(final Npc npc, final Player player) { - int stage = player.getQuestStage(this); - final Npc bentnoze = World.getWorld().getNpc(BENTNOZE_ID, 314, 330, 441, 457); + if (hasItem(player, ORANGE_ARMOUR_ID)) { + sendChat("Yeah I have it right here", player, npc); + sendMessage(player, "You hand Wartface the armour"); + takeItem(player, ORANGE_ARMOUR_ID); + sleep(); + sendChat("No I don't like that much", npc, player); + sendChat("It clashes with my skin colour", bentnoze, player); + sendChat("Try bringing us dark blue armour", npc, player, 1200); + player.setQuestStage(this, 3); + player.setBusy(false); + npc.unblock(); + bentnoze.unblock(); + return; + } else { + sendChat("Err no", player, npc, 2000); + sendChat("Come back when you have some", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (stage == 3) { + sendChat("Oh it you", npc, player, 2000); + sendChat("Have you got us some dark blue goblin armour?", npc, + player); - if (stage == COMPLETE) { - sendChat("Now you've solved our argument we gotta think of something else to do", npc, player); - sendChat("Yep, we bored now", bentnoze, player, 1200); - npc.unblock(); - player.setBusy(false); - return; + if (hasItem(player, BLUE_ARMOUR_ID)) { + sendChat("Yes, here you go", player, npc); + sendMessage(player, "You hand Wartface the armour"); + takeItem(player, BLUE_ARMOUR_ID); + sleep(); + sendChat("Doesn't seem quite right", npc, player); + sendChat("Maybe if it was a bit lighter", bentnoze, player); + sendChat("Yeah try light blue", npc, player); + sendChat("I thought that was the amour you were changing from", + player, npc); + sendChat( + "But never mind, anything is worth a try to avoid a war", + player, npc, 1200); + + player.setQuestStage(this, 4); + player.setBusy(false); + npc.unblock(); + bentnoze.unblock(); + return; + } else { + sendChat("Not yet", player, npc, 2000); + sendChat("Come back when you have some", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (stage == 4) { + if (player.getQuestStage(this) == COMPLETE) { + player.setBusy(false); + npc.unblock(); + bentnoze.unblock(); + return; + } + sendChat("Oh it you", npc, player, 2000); + sendChat("Have you got some light blue goblin armour yet?", npc, + player); + + if (hasItem(player, GOBLIN_ARMOUR_ID)) { + sendChat("Sigh...", player, npc, 2000); + sendChat("Yes, here it is", player, npc); + sendMessage(player, "You hand Wartface the armour"); + takeItem(player, GOBLIN_ARMOUR_ID); + sleep(); + sendChat("That is rather nice", npc, player); + sendChat("Yes i could see myself wearing somethin' like that", + bentnoze, player); + sendChat("It a deal then", npc, player); + sendChat("Light blue it is", npc, player); + sendChat("Thank you for sorting our argument", npc, player, + 1200); + player.setQuestStage(this, COMPLETE); + player.incQuestPoints(QUEST_POINTS); + player.incExp(12, REWARD_EXP, false); + sleep(); + sendMessage(player, + "General Wartface gives you a gold bar as thanks"); + giveItem(player, 172); + player.setBusy(false); + npc.unblock(); + bentnoze.unblock(); + return; + } else { + sendChat("Not yet", player, npc, 2000); + sendChat("Come back when you have some", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } } - argue(player); - - if (npc == null) - return; - - if (stage == -1 || stage == 1) { - if (stage == 1) - startQuest(npc, player); - } else if (stage == 2) { - sendChat("Oh it you", npc, player, 2000); - sendChat("Have you got some orange goblin armour yet?", npc, player); - - if (hasItem(player, ORANGE_ARMOUR_ID)) { - sendChat("Yeah I have it right here", player, npc); - sendMessage(player, "You hand Wartface the armour"); - takeItem(player, ORANGE_ARMOUR_ID); + private void startQuest(final Npc npc, final Player player) { + player.setBusy(false); + int option = getMenuOption(player, + "Why are you arguing about the colour of your armour?", + "Wouldn't you prefer peace?", + "Do you want me to pick an armour colour for you?"); + if (option == -1) + return; + player.setBusy(true); sleep(); - sendChat("No I don't like that much", npc, player); - sendChat("It clashes with my skin colour", bentnoze, player); - sendChat("Try bringing us dark blue armour", npc, player, 1200); - player.setQuestStage(this, 3); - player.setBusy(false); - npc.unblock(); - bentnoze.unblock(); - return; - } else { - sendChat("Err no", player, npc, 2000); - sendChat("Come back when you have some", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (stage == 3) { - sendChat("Oh it you", npc, player, 2000); - sendChat("Have you got us some dark blue goblin armour?", npc, player); - if (hasItem(player, BLUE_ARMOUR_ID)) { - sendChat("Yes, here you go", player, npc); - sendMessage(player, "You hand Wartface the armour"); - takeItem(player, BLUE_ARMOUR_ID); - sleep(); - sendChat("Doesn't seem quite right", npc, player); - sendChat("Maybe if it was a bit lighter", bentnoze, player); - sendChat("Yeah try light blue", npc, player); - sendChat("I thought that was the amour you were changing from", player, npc); - sendChat("But never mind, anything is worth a try to avoid a war", player, npc, 1200); + final Npc bentnoze = World.getWorld().getNpc(BENTNOZE_ID, 314, 330, + 441, 457); - player.setQuestStage(this, 4); - player.setBusy(false); - npc.unblock(); - bentnoze.unblock(); - return; - } else { - sendChat("Not yet", player, npc, 2000); - sendChat("Come back when you have some", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (stage == 4) { - if (player.getQuestStage(this) == COMPLETE) { - player.setBusy(false); - npc.unblock(); - bentnoze.unblock(); - return; - } - sendChat("Oh it you", npc, player, 2000); - sendChat("Have you got some light blue goblin armour yet?", npc, player); + if (bentnoze == null) { + player.getActionSender().sendMessage( + "Quest error: Bentnoze missing"); + player.setBusy(false); + return; + } - if (hasItem(player, GOBLIN_ARMOUR_ID)) { - sendChat("Sigh...", player, npc, 2000); - sendChat("Yes, here it is", player, npc); - sendMessage(player, "You hand Wartface the armour"); - takeItem(player, GOBLIN_ARMOUR_ID); - sleep(); - sendChat("That is rather nice", npc, player); - sendChat("Yes i could see myself wearing somethin' like that", bentnoze, player); - sendChat("It a deal then", npc, player); - sendChat("Light blue it is", npc, player); - sendChat("Thank you for sorting our argument", npc, player, 1200); - player.setQuestStage(this, COMPLETE); - player.incQuestPoints(QUEST_POINTS); - player.incExp(12, REWARD_EXP, false); - sleep(); - sendMessage(player, "General Wartface gives you a gold bar as thanks"); - giveItem(player, 172); - player.setBusy(false); - npc.unblock(); - bentnoze.unblock(); - return; - } else { - sendChat("Not yet", player, npc, 2000); - sendChat("Come back when you have some", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } - } + if (option == 0) { + queueChat(npc, player, "We decide to celebrate goblin new century", + "By changing the colour of our armour", + "Light blue get boring after a bit", "And we want change", + "Problem is they want different change to us"); + player.setBusy(false); + npc.unblock(); + return; + } else if (option == 1) { + sendChat( + "Yeah peace is good as long as it is peace wearing green armour", + npc, player); + sendChat("But green to much like skin!", bentnoze, player); + sendChat("Nearly make you look naked!", bentnoze, player, 1200); + player.setBusy(false); + npc.unblock(); + bentnoze.unblock(); + return; + } else { + sendChat("Different to either green or red", player, npc); + sendChat("Hmm me dunno what that'd look like", npc, player); + sendChat("You'd have to bring me some, so us could decide", npc, + player); + sendChat("Yep bring us orange armour", bentnoze, player); + sendChat("Yep orange might be good", npc, player, 1200); - private void startQuest(final Npc npc, final Player player) { - player.setBusy(false); - int option = getMenuOption(player, "Why are you arguing about the colour of your armour?", "Wouldn't you prefer peace?", "Do you want me to pick an armour colour for you?"); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - final Npc bentnoze = World.getWorld().getNpc(BENTNOZE_ID, 314, 330, 441, 457); - - if (bentnoze == null) { - player.getActionSender().sendMessage("Quest error: Bentnoze missing"); - player.setBusy(false); - return; + player.setQuestStage(this, 2); + player.setBusy(false); + npc.unblock(); + bentnoze.unblock(); + return; + } } - if (option == 0) { - queueChat(npc, player, "We decide to celebrate goblin new century", "By changing the colour of our armour", "Light blue get boring after a bit", "And we want change", "Problem is they want different change to us"); - player.setBusy(false); - npc.unblock(); - return; - } else if (option == 1) { - sendChat("Yeah peace is good as long as it is peace wearing green armour", npc, player); - sendChat("But green to much like skin!", bentnoze, player); - sendChat("Nearly make you look naked!", bentnoze, player, 1200); - player.setBusy(false); - npc.unblock(); - bentnoze.unblock(); - return; - } else { - sendChat("Different to either green or red", player, npc); - sendChat("Hmm me dunno what that'd look like", npc, player); - sendChat("You'd have to bring me some, so us could decide", npc, player); - sendChat("Yep bring us orange armour", bentnoze, player); - sendChat("Yep orange might be good", npc, player, 1200); + private Npc argue(final Player player) { + final Npc wartface = World.getWorld().getNpc(WARTFACE_ID, 321, 445, + 326, 449); + final Npc bentnoze = World.getWorld().getNpc(BENTNOZE_ID, 321, 445, + 326, 449); - player.setQuestStage(this, 2); - player.setBusy(false); - npc.unblock(); - bentnoze.unblock(); - return; - } - } + if (wartface == null || bentnoze == null) { + player.setBusy(false); + return null; + } - private Npc argue(final Player player) { - final Npc wartface = World.getWorld().getNpc(WARTFACE_ID, 321, 445, 326, 449); - final Npc bentnoze = World.getWorld().getNpc(BENTNOZE_ID, 321, 445, 326, 449); - - if (wartface == null || bentnoze == null) { - player.setBusy(false); - return null; + sendChat("Green armour best", wartface, player, 2000); + sendChat("No, no red every time", bentnoze, player, 2000); + sendChat("Go away human, we busy", wartface, player, 2000); + player.setBusy(false); + wartface.unblock(); + bentnoze.unblock(); + return wartface; } - sendChat("Green armour best", wartface, player, 2000); - sendChat("No, no red every time", bentnoze, player, 2000); - sendChat("Go away human, we busy", wartface, player, 2000); - player.setBusy(false); - wartface.unblock(); - bentnoze.unblock(); - return wartface; - } - - public GoblinDiplomacy() { - } + public GoblinDiplomacy() { + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/ImpCatcher.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/ImpCatcher.java index 3330dba..4f7a87c 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/ImpCatcher.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/ImpCatcher.java @@ -15,346 +15,385 @@ import org.moparscape.msc.gs.quest.QuestAction; * @author punKrockeR */ public class ImpCatcher extends Quest { - private static final int TALBORN_ID = 17; - private static final int RED_BEAD = 231; - private static final int YELLOW_BEAD = 232; - private static final int BLACK_BEAD = 233; - private static final int WHITE_BEAD = 234; - private static final int ITEM_REWARD = 235; - private static final int REWARD_XP = 350; - private static final String[] FIRST_MENU = new String[] { "No way you crazy man", "Sure, why not" }; - private static final String[] SECOND_MENU = new String[] { "Yeah I did", "Not yet" }; - private static final int DEFAULT_EVENT_DELAY = 3200; - private static final int QUEST_POINTS = 1; + private static final int TALBORN_ID = 17; + private static final int RED_BEAD = 231; + private static final int YELLOW_BEAD = 232; + private static final int BLACK_BEAD = 233; + private static final int WHITE_BEAD = 234; + private static final int ITEM_REWARD = 235; + private static final int REWARD_XP = 350; + private static final String[] FIRST_MENU = new String[] { + "No way you crazy man", "Sure, why not" }; + private static final String[] SECOND_MENU = new String[] { "Yeah I did", + "Not yet" }; + // private static final int DEFAULT_EVENT_DELAY = 3200; + private static final int QUEST_POINTS = 1; - /** - * @return the quest's name - */ - public String getName() { - return "Imp Catcher"; - } - - /** - * @return this quest's unique id - */ - public int getUniqueID() { - return 3; - } - - /** - * Initialises the quest - */ - public void init() { - associateNpc(TALBORN_ID); - } - - /** - * Handles the given quest action - */ - public void handleAction(QuestAction action, Object[] args, final Player player) { - int stage = player.getQuestStage(this); - - if (action == action.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - if (npc.getID() != TALBORN_ID) - return; - - player.setBusy(true); - npc.blockedBy(player); - - if (stage == -1) - startQuest(player, npc); - else - handleTalk(player, npc); - } - } - - /** - * Handles npc chat if the quest hasn't been started yet - */ - private void startQuest(final Player player, final Npc npc) { - sendChat("...Avada kedavra!", npc, player); - - spellPlayer(player, npc); - sleep(1000); - player.setBusy(true); - npc.blockedBy(player); - sendChat("wow!!", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("What? Huh? Get out of the way you fool!", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("You shot me you stupid sod", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Hmm, indeed. But it worked!", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Yeah it did. You burnt my sleeve.", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Collateral damage. A necessary casualty.", npc, player); - sendChat("Your sleeve is expendable in this war", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("What war?", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Well the war against those nasty little imps of course", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Imps? What threat could they possibly pose?", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Those little red demons stole my beads!", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Riight.. your beads. And what's so special about these beads?", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Why, absolutely nothing. It's the principle of the matter.", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Surely it can't be that hard to get them to give them back", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Oh really? Why don't you try and get them back then", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Yeah right, chase imps around for free. You're crazier than I thought", player, npc); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Free? Nonsense. I'd be happy to reward you.", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Hmm. What kind of reward?", player, npc); - npc.blockedBy(player); - player.setBusy(true); - sendChat("I've got a few valuable things lying around, I'll find something.", npc, player); - npc.blockedBy(player); - player.setBusy(true); - sendChat("How about it? Would you help an old wizard out?", npc, player); - - player.setBusy(false); - int option = getMenuOption(player, FIRST_MENU); - if (option == -1) { - npc.unblock(); - player.setBusy(false); - return; - } - sleep(2000); - - player.setBusy(true); - npc.blockedBy(player); - if (option == 1) { - player.setBusy(true); - npc.blockedBy(player); - sendChat("Excellent! Begin at once if you wish to collect them within a decade", npc, player); - player.setBusy(true); - npc.blockedBy(player); - sendChat("There are four beads! Red, white, black, and yellow.", npc, player); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Ahh you said... nevermind", player, npc); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("I'll come back when I get the beads...", player, npc); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("If! If you get the beads. Don't underestimate the little beasts!", npc, player); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Sure, whatever old man.", player, npc); - - player.setBusy(true); - npc.blockedBy(player); - player.setQuestStage(getUniqueID(), 1); - sendChat("Tarantallegra!", npc, player); - spellPlayer(player, npc); - - sendChat("Ouch! Would you bloody wait til I'm gone!", player, npc); - player.setBusy(false); - npc.unblock(); - - sendChat("Move it!", npc, player); - - } else { - player.setBusy(true); - npc.blockedBy(player); - sendChat("Fine. But don't come to me when you need some pomegranate!", npc, player); - - sendChat("Okaaay...", player, npc); - player.setBusy(false); - npc.unblock(); + /** + * @return the quest's name + */ + public String getName() { + return "Imp Catcher"; } - } + /** + * @return this quest's unique id + */ + public int getUniqueID() { + return 3; + } - // black - /** - * Handles npc chat if the quest is started but not finished - */ - private void handleTalk(final Player player, final Npc npc) { - player.setBusy(true); - npc.blockedBy(player); - sendChat("I know you. You're that fellow that stole my beads!", npc, player); + /** + * Initialises the quest + */ + public void init() { + associateNpc(TALBORN_ID); + } - npc.blockedBy(player); - sendChat("What? No, I'm the one that offered to find them for you.", player, npc); + /** + * Handles the given quest action + */ + public void handleAction(QuestAction action, Object[] args, + final Player player) { + int stage = player.getQuestStage(this); - npc.blockedBy(player); - sendChat("It makes no difference, I still don't like you.", npc, player); - sleep(1000); - if (player.getQuestStage(getUniqueID()) != COMPLETE) { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; - npc.blockedBy(player); - sendChat("But my beads, did you find them?", npc, player); + final Npc npc = (Npc) args[0]; + + if (npc.getID() != TALBORN_ID) + return; + + player.setBusy(true); + npc.blockedBy(player); + + if (stage == -1) + startQuest(player, npc); + else + handleTalk(player, npc); + } + } + + /** + * Handles npc chat if the quest hasn't been started yet + */ + private void startQuest(final Player player, final Npc npc) { + sendChat("...Avada kedavra!", npc, player); + + spellPlayer(player, npc); + sleep(1000); + player.setBusy(true); + npc.blockedBy(player); + sendChat("wow!!", player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("What? Huh? Get out of the way you fool!", npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("You shot me you stupid sod", player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Hmm, indeed. But it worked!", npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Yeah it did. You burnt my sleeve.", player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Collateral damage. A necessary casualty.", npc, player); + sendChat("Your sleeve is expendable in this war", npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("What war?", player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Well the war against those nasty little imps of course", npc, + player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Imps? What threat could they possibly pose?", player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Those little red demons stole my beads!", npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "Riight.. your beads. And what's so special about these beads?", + player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Why, absolutely nothing. It's the principle of the matter.", + npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Surely it can't be that hard to get them to give them back", + player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Oh really? Why don't you try and get them back then", npc, + player); + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "Yeah right, chase imps around for free. You're crazier than I thought", + player, npc); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Free? Nonsense. I'd be happy to reward you.", npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Hmm. What kind of reward?", player, npc); + npc.blockedBy(player); + player.setBusy(true); + sendChat( + "I've got a few valuable things lying around, I'll find something.", + npc, player); + npc.blockedBy(player); + player.setBusy(true); + sendChat("How about it? Would you help an old wizard out?", npc, player); - player.setBusy(false); - npc.blockedBy(player); - int option = getMenuOption(player, SECOND_MENU); - if (option == -1) { - npc.unblock(); player.setBusy(false); - return; - } - if (option == 0) // Yes - { - sleep(1500); - if (player.getInventory().hasItemId(RED_BEAD) && player.getInventory().hasItemId(YELLOW_BEAD) && player.getInventory().hasItemId(BLACK_BEAD) && player.getInventory().hasItemId(WHITE_BEAD)) { - sendChat("Excellent! Hand them over immediately", npc, player); + int option = getMenuOption(player, FIRST_MENU); + if (option == -1) { + npc.unblock(); + player.setBusy(false); + return; + } + sleep(2000); - sendChat("Alright, calm down. I thought they were useless anyway", player, npc); + player.setBusy(true); + npc.blockedBy(player); + if (option == 1) { + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "Excellent! Begin at once if you wish to collect them within a decade", + npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("There are four beads! Red, white, black, and yellow.", + npc, player); - sendChat("Useless! Oh my dear " + (player.isMale() ? "boy" : "girl") + ", they are quite important", npc, player); + player.setBusy(true); + npc.blockedBy(player); + sendChat("Ahh you said... nevermind", player, npc); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("I'll come back when I get the beads...", player, npc); + + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "If! If you get the beads. Don't underestimate the little beasts!", + npc, player); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("Sure, whatever old man.", player, npc); + + player.setBusy(true); + npc.blockedBy(player); + player.setQuestStage(getUniqueID(), 1); + sendChat("Tarantallegra!", npc, player); + spellPlayer(player, npc); + + sendChat("Ouch! Would you bloody wait til I'm gone!", player, npc); + player.setBusy(false); + npc.unblock(); + + sendChat("Move it!", npc, player); - finishQuest(player, npc); } else { - sendChat("Bollocks! Don't return til you have them you fool", npc, player); - spellPlayer(player, npc); - sendChat("Hey! Watch yourself old man", player, npc); - player.setBusy(false); - npc.unblock(); + player.setBusy(true); + npc.blockedBy(player); + sendChat( + "Fine. But don't come to me when you need some pomegranate!", + npc, player); + + sendChat("Okaaay...", player, npc); + player.setBusy(false); + npc.unblock(); } - } else // No - { + } - sendChat("Well what are you doing here then? Move it!", npc, player); + // black + /** + * Handles npc chat if the quest is started but not finished + */ + private void handleTalk(final Player player, final Npc npc) { + player.setBusy(true); + npc.blockedBy(player); + sendChat("I know you. You're that fellow that stole my beads!", npc, + player); + + npc.blockedBy(player); + sendChat("What? No, I'm the one that offered to find them for you.", + player, npc); + + npc.blockedBy(player); + sendChat("It makes no difference, I still don't like you.", npc, player); + sleep(1000); + if (player.getQuestStage(getUniqueID()) != COMPLETE) { + + npc.blockedBy(player); + sendChat("But my beads, did you find them?", npc, player); + + player.setBusy(false); + npc.blockedBy(player); + int option = getMenuOption(player, SECOND_MENU); + if (option == -1) { + npc.unblock(); + player.setBusy(false); + return; + } + if (option == 0) // Yes + { + sleep(1500); + if (player.getInventory().hasItemId(RED_BEAD) + && player.getInventory().hasItemId(YELLOW_BEAD) + && player.getInventory().hasItemId(BLACK_BEAD) + && player.getInventory().hasItemId(WHITE_BEAD)) { + sendChat("Excellent! Hand them over immediately", npc, + player); + + sendChat( + "Alright, calm down. I thought they were useless anyway", + player, npc); + + sendChat("Useless! Oh my dear " + + (player.isMale() ? "boy" : "girl") + + ", they are quite important", npc, player); + + finishQuest(player, npc); + } else { + sendChat( + "Bollocks! Don't return til you have them you fool", + npc, player); + spellPlayer(player, npc); + sendChat("Hey! Watch yourself old man", player, npc); + player.setBusy(false); + npc.unblock(); + } + + } else // No + { + + sendChat("Well what are you doing here then? Move it!", npc, + player); + + spellPlayer(player, npc); + + sendChat("Would you bugger off with the spells you mad fool!", + player, npc); + player.setBusy(false); + npc.unblock(); + } + + } else { + player.setBusy(false); + npc.unblock(); + } + } + + /** + * Finishes the quest + */ + private void finishQuest(final Player player, final Npc npc) { + if (player.getQuestStage(this) == COMPLETE) { + player.setBusy(false); + npc.unblock(); + return; + } + player.setBusy(true); + npc.blockedBy(player); + player.getActionSender().sendMessage("You hand over the beads"); + player.getInventory().remove(YELLOW_BEAD, 1); + player.getInventory().remove(RED_BEAD, 1); + player.getInventory().remove(WHITE_BEAD, 1); + player.getInventory().remove(BLACK_BEAD, 1); + player.getActionSender().sendInventory(); + player.getActionSender().sendSound("click"); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("Alright, that's my half of the bargain.", player, npc); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("Now what of my reward?", player, npc); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("Ah, your reward. I found this! You can take it.", npc, player); + + player.setBusy(true); + npc.blockedBy(player); + player.getActionSender().sendMessage( + EntityHandler.getNpcDef(TALBORN_ID).getName() + + " gives you one " + + EntityHandler.getItemDef(ITEM_REWARD).getName()); + player.getInventory().add(new InvItem(ITEM_REWARD, 1)); + player.getActionSender().sendInventory(); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("What am I supposed to do with this?", player, npc); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("I don't know, whatever you like. I certainly don't want it", + npc, player); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("And have a read of this book", npc, player); + + player.setBusy(true); + npc.blockedBy(player); + sendChat("It'll teach you a thing or two about magic!", npc, player); + + player.setBusy(true); + npc.blockedBy(player); + player.getActionSender().sendMessage("You read the wizard's book"); + + player.setBusy(true); + npc.blockedBy(player); + player.incExp(6, REWARD_XP, false); + player.getActionSender().sendStat(6); + + player.setBusy(true); + npc.blockedBy(player); + + sendChat("Now I have work to do! Leave my tower!", npc, player); spellPlayer(player, npc); - sendChat("Would you bugger off with the spells you mad fool!", player, npc); + sendChat("Damnit! Gladly...", player, npc); + + player.setQuestStage(getUniqueID(), Quest.COMPLETE); + player.incQuestPoints(QUEST_POINTS); player.setBusy(false); npc.unblock(); - } - } else { - player.setBusy(false); - npc.unblock(); } - } - /** - * Finishes the quest - */ - private void finishQuest(final Player player, final Npc npc) { - if (player.getQuestStage(this) == COMPLETE) { - player.setBusy(false); - npc.unblock(); - return; + /** + * Casts an imaginary spell at the player + */ + private void spellPlayer(Player player, Npc npc) { + player.setLastDamage(0); + player.informOfModifiedHits(player); + player.getActionSender().sendTeleBubble(npc.getLocation().getX(), + npc.getLocation().getY(), false); + player.getActionSender().sendSound("combat1a"); } - player.setBusy(true); - npc.blockedBy(player); - player.getActionSender().sendMessage("You hand over the beads"); - player.getInventory().remove(YELLOW_BEAD, 1); - player.getInventory().remove(RED_BEAD, 1); - player.getInventory().remove(WHITE_BEAD, 1); - player.getInventory().remove(BLACK_BEAD, 1); - player.getActionSender().sendInventory(); - player.getActionSender().sendSound("click"); - player.setBusy(true); - npc.blockedBy(player); - sendChat("Alright, that's my half of the bargain.", player, npc); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Now what of my reward?", player, npc); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Ah, your reward. I found this! You can take it.", npc, player); - - player.setBusy(true); - npc.blockedBy(player); - player.getActionSender().sendMessage(EntityHandler.getNpcDef(TALBORN_ID).getName() + " gives you one " + EntityHandler.getItemDef(ITEM_REWARD).getName()); - player.getInventory().add(new InvItem(ITEM_REWARD, 1)); - player.getActionSender().sendInventory(); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("What am I supposed to do with this?", player, npc); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("I don't know, whatever you like. I certainly don't want it", npc, player); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("And have a read of this book", npc, player); - - player.setBusy(true); - npc.blockedBy(player); - sendChat("It'll teach you a thing or two about magic!", npc, player); - - player.setBusy(true); - npc.blockedBy(player); - player.getActionSender().sendMessage("You read the wizard's book"); - - player.setBusy(true); - npc.blockedBy(player); - player.incExp(6, REWARD_XP, false); - player.getActionSender().sendStat(6); - - player.setBusy(true); - npc.blockedBy(player); - - sendChat("Now I have work to do! Leave my tower!", npc, player); - - spellPlayer(player, npc); - - sendChat("Damnit! Gladly...", player, npc); - - player.setQuestStage(getUniqueID(), Quest.COMPLETE); - player.incQuestPoints(QUEST_POINTS); - player.setBusy(false); - npc.unblock(); - - } - - /** - * Casts an imaginary spell at the player - */ - private void spellPlayer(Player player, Npc npc) { - player.setLastDamage(0); - player.informOfModifiedHits(player); - player.getActionSender().sendTeleBubble(npc.getLocation().getX(), npc.getLocation().getY(), false); - player.getActionSender().sendSound("combat1a"); - } - - /** - * Construct the quest (empty) - */ - public ImpCatcher() { - } + /** + * Construct the quest (empty) + */ + public ImpCatcher() { + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/KnightsSword.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/KnightsSword.java index 2aacb7d..d4a0834 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/KnightsSword.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/KnightsSword.java @@ -29,10 +29,10 @@ public class KnightsSword extends Quest { private static final int CUPBOARD_X = 318; private static final int CUPBOARD_Y = 2454; private static final int BLUERITE_ID = 176; - private static final int BLUERITE_X = 312; - private static final int BLUERITE_Y = 3517; - private static final int BLUERITE2_X = 314; - private static final int BLUERITE2_Y = 3527; + // private static final int BLUERITE_X = 312; + // private static final int BLUERITE_Y = 3517; + // private static final int BLUERITE2_X = 314; + // private static final int BLUERITE2_Y = 3527; private static final int BLUERITE_ORE_ID = 266; private static final int SWORD_ID = 265; private static final int PICTURE_ID = 264; @@ -62,7 +62,7 @@ public class KnightsSword extends Quest { switch (item.getID()) { case BLUERITE_ORE_ID: - SWORD_ID: + case SWORD_ID: return stage >= 6; case PICTURE_ID: return stage >= 4; @@ -80,17 +80,18 @@ public class KnightsSword extends Quest { } // iron bar - public void handleAction(QuestAction action, Object[] args, final Player player) { - int stage = player.getQuestStage(this); + public void handleAction(QuestAction action, Object[] args, + final Player player) { - if (action == action.TALKED_NPC) { + if (action == QuestAction.TALKED_NPC) { if (!(args[0] instanceof Npc)) { return; } final Npc npc = (Npc) args[0]; - if (npc.getID() != NPC_SQUIRE && npc.getID() != NPC_RELDO && npc.getID() != NPC_DWARF && npc.getID() != NPC_VYVIN) { + if (npc.getID() != NPC_SQUIRE && npc.getID() != NPC_RELDO + && npc.getID() != NPC_DWARF && npc.getID() != NPC_VYVIN) { return; } @@ -106,22 +107,22 @@ public class KnightsSword extends Quest { } else if (npc.getID() == NPC_VYVIN) { handleVyvinChat(npc, player); } - } else if (action == action.USED_OBJECT) { + } else if (action == QuestAction.USED_OBJECT) { if (!(args[0] instanceof GameObject)) { return; } final GameObject obj = (GameObject) args[0]; - final boolean click = (Boolean) args[1]; if (obj.getID() != CUPBOARD_ID && obj.getID() != BLUERITE_ID) { return; } - if (obj.getID() == CUPBOARD_ID && obj.getX() == CUPBOARD_X && obj.getY() == CUPBOARD_Y) { + if (obj.getID() == CUPBOARD_ID && obj.getX() == CUPBOARD_X + && obj.getY() == CUPBOARD_Y) { player.setBusy(true); - final Npc npc = World.getWorld().getNpc(138, 316, 320, 2454, 2459); - boolean allowed = true; + final Npc npc = World.getWorld().getNpc(138, 316, 320, 2454, + 2459); if (npc != null) { if (!npc.isBusy()) { @@ -129,24 +130,31 @@ public class KnightsSword extends Quest { npc.setSprite(0); sendChat("Hey what are you doing?", npc, player); sendChat("That's my cupboard", npc, player); - player.getActionSender().sendMessage("Maybe you need someone to distract Sir Vivyn for you"); + player.getActionSender() + .sendMessage( + "Maybe you need someone to distract Sir Vivyn for you"); sleep(1200); player.setBusy(false); npc.unblock(); return; } - player.getActionSender().sendMessage("You search through the cupboard"); + player.getActionSender().sendMessage( + "You search through the cupboard"); sleep(2000); - if (hasItem(player, PICTURE_ID) || player.getQuestStage(this) < 4) { - player.getActionSender().sendMessage("The cupboard is just full of junk"); + if (hasItem(player, PICTURE_ID) + || player.getQuestStage(this) < 4) { + player.getActionSender().sendMessage( + "The cupboard is just full of junk"); sleep(1200); player.setBusy(false); return; } - player.getActionSender().sendMessage("You find a small portrait in there which you take"); + player.getActionSender() + .sendMessage( + "You find a small portrait in there which you take"); giveItem(player, PICTURE_ID); player.setBusy(false); return; @@ -161,44 +169,45 @@ public class KnightsSword extends Quest { /* * private void handleMining(final GameObject object, final Player player, * final boolean click) { if(player.isBusy()) return; - * + * * if(!player.withinRange(object, 1)) return; - * + * * final GameObject newobject = world.getTile(object.getX(), * object.getY()).getGameObject(); final ObjectMiningDef def = * org.moparscape.msc.gs.external.EntityHandler.getObjectMiningDef(102); - * + * * final InvItem ore = new InvItem(BLUERITE_ORE_ID); if(!click) { * player.getActionSender().sendMessage("This rock contains Bluerite ore"); * return; } - * + * * if(player.getCurStat(14) < 15) {player.getActionSender().sendMessage( * "You need a mining level of 15 to mine this rock."); return; } - * - * int axeId = -1; for(int id : org.moparscape.msc.config.Formulae.miningAxeIDs) { - * if(countItem(player, id) > 0) { axeId = id; break; } } - * + * + * int axeId = -1; for(int id : + * org.moparscape.msc.config.Formulae.miningAxeIDs) { if(countItem(player, + * id) > 0) { axeId = id; break; } } + * * if(axeId < 0) { * player.getActionSender().sendMessage("You need a pickaxe to mine this rock." * ); return; } - * + * * final int axeID = axeId; int retrytimes = -1; final int swings = * player.getSkillLoops(); final int mineLvl = player.getCurStat(14); int * reqlvl = 1; - * + * * switch(axeID) { case 1258: retrytimes = 2; break; case 1259: retrytimes = * 4; reqlvl = 6; break; case 1260: retrytimes = 6; reqlvl = 21; break; case * 1261: retrytimes = 8; reqlvl = 31; break; case 1262: retrytimes = 12; * reqlvl = 41; break; } - * + * * if(reqlvl > mineLvl) { * player.getActionSender().sendMessage("You need to be level " + reqlvl + * " to use this pick."); return; } - * + * * player.setBusy(true); player.getActionSender().sendSound("mine"); Bubble * bubble = new Bubble(player, axeId); for(Player p : * player.getViewArea().getPlayersInView()) p.informOfBubble(bubble); - * + * * final int retrytime = retrytimes; * player.getActionSender().sendMessage("You swing your pick at the rock..." * ); world.getDelayedEventHandler().add(new ShortEvent(player) { public @@ -206,9 +215,9 @@ public class KnightsSword extends Quest { * world.getTile(object.getX(), object.getY()).getGameObject(); * if(newobject2 != newobject) { player.setBusy(false); * player.setSkillLoops(0); return; } - * - * if(org.moparscape.msc.config.Formulae.getOre(def, player.getCurStat(14), axeID)) { - * giveItem(player, ore); + * + * if(org.moparscape.msc.config.Formulae.getOre(def, player.getCurStat(14), + * axeID)) { giveItem(player, ore); * player.getActionSender().sendMessage("You manage to obtain some " + * ore.getDef().getName() + "."); player.setSkillLoops(0); player.incExp(14, * def.getExp(), true); player.getActionSender().sendStat(14); @@ -216,15 +225,15 @@ public class KnightsSword extends Quest { * object.getDirection(), object.getType())); * world.delayedSpawnObject(newobject.getLoc(), 60000); } else { boolean * retry = false; if(retrytime >= swings) retry = true; - * + * * player.getActionSender().sendMessage( * "You only succeed in scratching the rock."); if(retry) { * world.getDelayedEventHandler().add(new SingleEvent(player, 500) { public * void action() { player.setSkillLoops(swings + 1); handleMining(object, * player, click); } }); } - * + * * if(!retry) { player.isMining(false); player.setSkillLoops(0); } } - * + * * player.setBusy(false); } }); } */ private void handleVyvinChat(final Npc npc, final Player player) { @@ -232,7 +241,8 @@ public class KnightsSword extends Quest { sendChat("Greetings traveller", npc, player, 2000); player.setBusy(false); - int option = getMenuOption(player, "Do you have anything to trade?", "Why are there so many knights in this city?"); + int option = getMenuOption(player, "Do you have anything to trade?", + "Why are there so many knights in this city?"); if (option == -1) { return; } @@ -245,7 +255,10 @@ public class KnightsSword extends Quest { npc.unblock(); return; } else { - queueChat(npc, player, "We are the white knights of falador", "We are the most powerfull order of knights in the land", "We are helping the king vallance rule the kingdom", "As he is getting old and tired"); + queueChat(npc, player, "We are the white knights of falador", + "We are the most powerfull order of knights in the land", + "We are helping the king vallance rule the kingdom", + "As he is getting old and tired"); player.setBusy(false); npc.unblock(); return; @@ -257,7 +270,9 @@ public class KnightsSword extends Quest { if (stage == 2) { player.setBusy(false); - int option = getMenuOption(player, "Hello are you an incando Dwarf?", "Would you like some redberry pie?"); + int option = getMenuOption(player, + "Hello are you an incando Dwarf?", + "Would you like some redberry pie?"); if (option == -1) { return; } @@ -267,7 +282,9 @@ public class KnightsSword extends Quest { if (option == 0) { sendChat("Yeah what about it?", npc, player); player.setBusy(false); - option = getMenuOption(player, "Would you like some redberry pie?", "Can you make me a special sword?"); + option = getMenuOption(player, + "Would you like some redberry pie?", + "Can you make me a special sword?"); if (option == -1) { return; } @@ -290,13 +307,24 @@ public class KnightsSword extends Quest { } } else if (stage == 3) { sendChat("Can you make me a special sword?", player, npc); - sendChat("Well after you've brought me such a great pie", npc, player); + sendChat("Well after you've brought me such a great pie", npc, + player); sendChat("I guess i should give it a go", npc, player); sendChat("What sort of sword is it?", npc, player); - sendChat("I need you to make a sword for one of falador's knights", player, npc); - sendChat("He had one which was passed down through five generations", player, npc); + sendChat("I need you to make a sword for one of falador's knights", + player, npc); + sendChat( + "He had one which was passed down through five generations", + player, npc); sendChat("But his squire has lost it", player, npc); - queueChat(npc, player, "A knight's sword eh?", "Well i'd need to know exactly how it looked", "Before i could make a new one", "All the faladian knights used to have swords with different designs", "Could you bring me a picture or something?"); + queueChat( + npc, + player, + "A knight's sword eh?", + "Well i'd need to know exactly how it looked", + "Before i could make a new one", + "All the faladian knights used to have swords with different designs", + "Could you bring me a picture or something?"); sendChat("I'll see if i can find one", player, npc); sendChat("I'll go and ask his squire", player, npc, 1200); player.setQuestStage(this, 4); @@ -305,19 +333,40 @@ public class KnightsSword extends Quest { return; } else if (stage == 4 || stage == 5 && stage != COMPLETE) { if (hasItem(player, PICTURE_ID)) { - sendChat("I have found a picture of the sword i would like you to make", player, npc); - player.getActionSender().sendMessage("You hand Thurgo the portrait"); + sendChat( + "I have found a picture of the sword i would like you to make", + player, npc); + player.getActionSender().sendMessage( + "You hand Thurgo the portrait"); takeItem(player, PICTURE_ID); sleep(2000); - player.getActionSender().sendMessage("Thurgo examines the picture for a moment"); + player.getActionSender().sendMessage( + "Thurgo examines the picture for a moment"); sleep(); - queueChat(npc, player, "Ok you'll need to get me some stuff for me to make this", "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", "But i'll need some as decoration for the hilt", "It is a fairly rare sort of ore", "The only place i know where to get it", "Is under this cliff here", "But it is guarded by a very powerful ice giant", "Most the rocks in that cliff are pretty useless", "Don't contain much of anything", "But there's definitly some blurite in there", "You'll need a little bit of mining experience", "To be able to find it"); + queueChat( + npc, + player, + "Ok you'll need to get me some stuff for me to make this", + "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", + "But i'll need some as decoration for the hilt", + "It is a fairly rare sort of ore", + "The only place i know where to get it", + "Is under this cliff here", + "But it is guarded by a very powerful ice giant", + "Most the rocks in that cliff are pretty useless", + "Don't contain much of anything", + "But there's definitly some blurite in there", + "You'll need a little bit of mining experience", + "To be able to find it"); sendChat("Ok i'll go and find them", player, npc, 1200); player.setQuestStage(this, 6); player.setBusy(false); npc.unblock(); } else { - sendChat("Have you got a picture of the sword for me yet?", npc, player); + sendChat("Have you got a picture of the sword for me yet?", + npc, player); sendChat("No sorry, not yet", player, npc, 1200); player.setBusy(false); npc.unblock(); @@ -325,7 +374,8 @@ public class KnightsSword extends Quest { } } else if (stage == 6) { if (hasItem(player, 265)) { - sendChat("Thanks for your help getting the sword for me", player, npc); + sendChat("Thanks for your help getting the sword for me", + player, npc); sendChat("No worries mate", npc, player, 1200); player.setBusy(false); npc.unblock(); @@ -333,30 +383,38 @@ public class KnightsSword extends Quest { } if (countItem(player, 170) >= 2 && hasItem(player, BLUERITE_ORE_ID)) { - sendChat("How are you doing finding sword materials?", npc, player); + sendChat("How are you doing finding sword materials?", npc, + player); sendChat("I have them all", player, npc); - player.getActionSender().sendMessage("You hand Thurgo the items"); - takeItem(player, new InvItem(170), new InvItem(BLUERITE_ORE_ID), new InvItem(170)); - player.getActionSender().sendMessage("Thurgo hammers the materials into a metal sword"); + player.getActionSender().sendMessage( + "You hand Thurgo the items"); + takeItem(player, new InvItem(170), + new InvItem(BLUERITE_ORE_ID), new InvItem(170)); + player.getActionSender().sendMessage( + "Thurgo hammers the materials into a metal sword"); sleep(); giveItem(player, SWORD_ID); sendChat("Here you go", npc, player); sendChat("Thank you very much", player, npc); - sendChat("Just remember to call in with more pie some time", npc, player, 1200); + sendChat("Just remember to call in with more pie some time", + npc, player, 1200); player.setBusy(false); npc.unblock(); return; } else { - sendChat("How are you doing finding sword materials?", npc, player); + sendChat("How are you doing finding sword materials?", npc, + player); sendChat("I haven't found everything yet", player, npc); sendChat("Well come back when you do", npc, player); - sendChat("Remember i need blurite ore and two iron bars", npc, player, 1200); + sendChat("Remember i need blurite ore and two iron bars", npc, + player, 1200); player.setBusy(false); npc.unblock(); return; } } else if (stage == COMPLETE) { - sendChat("Thanks for your help getting the sword for me", player, npc); + sendChat("Thanks for your help getting the sword for me", player, + npc); sendChat("No worries mate", npc, player, 1200); player.setBusy(false); npc.unblock(); @@ -375,8 +433,10 @@ public class KnightsSword extends Quest { sendChat("I'd never say no to a redberry pie", npc, player); if (!hasItem(player, 258)) { - sendChat("Well that's too bad, because I don't have any", player, npc); - player.getActionSender().sendMessage("Thurgo does not look impressed"); + sendChat("Well that's too bad, because I don't have any", player, + npc); + player.getActionSender().sendMessage( + "Thurgo does not look impressed"); sleep(1200); player.setBusy(false); npc.unblock(); @@ -392,7 +452,8 @@ public class KnightsSword extends Quest { player.getActionSender().sendMessage("He pats his stomach"); sleep(2000); sendChat("By guthix that was good pie", npc, player); - sendChat("Anyone who makes pie like that has gotta be alright", npc, player, 1200); + sendChat("Anyone who makes pie like that has gotta be alright", + npc, player, 1200); player.setBusy(false); npc.unblock(); return; @@ -407,7 +468,9 @@ public class KnightsSword extends Quest { sendChat("Hello stranger", npc, player, 2000); player.setBusy(false); - int option = getMenuOption(player, "I'm in search of a quest", "Do you have anything to trade?", "What do you do?", "What do you know about the incando dwarves?"); + int option = getMenuOption(player, "I'm in search of a quest", + "Do you have anything to trade?", "What do you do?", + "What do you know about the incando dwarves?"); if (option == -1) { return; } @@ -428,17 +491,40 @@ public class KnightsSword extends Quest { return; } else if (option == 2) { sendChat("I'm the palace librarian", npc, player); - sendChat("Ah that's why you're in the library then", npc, player); + sendChat("Ah that's why you're in the library then", npc, + player); sendChat("Yes", npc, player, 2000); - sendChat("Though i might be in here even if i didn't work here", npc, player); + sendChat( + "Though i might be in here even if i didn't work here", + npc, player); sendChat("I like reading", npc, player, 1200); player.setBusy(false); npc.unblock(); return; } else { - queueChat(npc, player, "The incando dwarves, you say?", "They were the world's most skilled smiths about a hundred years ago", "They used secret knowledge", "Which they passed down from generation to generation", "Unfortunatly about a century ago the once thriving race", "Was wiped out during the barbarian invasions of that time"); + queueChat( + npc, + player, + "The incando dwarves, you say?", + "They were the world's most skilled smiths about a hundred years ago", + "They used secret knowledge", + "Which they passed down from generation to generation", + "Unfortunatly about a century ago the once thriving race", + "Was wiped out during the barbarian invasions of that time"); sendChat("So are there any incando left at all?", player, npc); - queueChat(npc, player, "A few of them survived", "But with the bulk of their population destroyed", "Their numbers have dwindled even further", "Last i knew there were a couple living in asgarnia", "Near the cliffs on the asgarnian southern peninsula", "They tend to keep to themselves", "They don't tend to tell people that they're the descendants of the incando", "Which is why people think that the tribe has died out totally", "You may have more luck talking to them if you bring them some red berry pie", "They really like red berry pie"); + queueChat( + npc, + player, + "A few of them survived", + "But with the bulk of their population destroyed", + "Their numbers have dwindled even further", + "Last i knew there were a couple living in asgarnia", + "Near the cliffs on the asgarnian southern peninsula", + "They tend to keep to themselves", + "They don't tend to tell people that they're the descendants of the incando", + "Which is why people think that the tribe has died out totally", + "You may have more luck talking to them if you bring them some red berry pie", + "They really like red berry pie"); sendChat("Thank you", player, npc); sendChat("You're welcome", npc, player, 1200); player.setQuestStage(this, 2); @@ -460,7 +546,8 @@ public class KnightsSword extends Quest { sendChat("Hello, i am the squire to sir vyvin", npc, player); player.setBusy(false); - int option = getMenuOption(player, "And how is life as a squire?", "Wouldn't you prefer to be a squire for me?"); + int option = getMenuOption(player, "And how is life as a squire?", + "Wouldn't you prefer to be a squire for me?"); if (option == -1) { return; } @@ -468,12 +555,15 @@ public class KnightsSword extends Quest { sleep(); if (option == 0) { - sendChat("Well sir vyvin is a good guy to work for", npc, player); + sendChat("Well sir vyvin is a good guy to work for", npc, + player); sendChat("However i'm in a spot of trouble today", npc, player); sendChat("I've gone and lost sir vyvin's sword", npc, player); player.setBusy(false); - option = getMenuOption(player, "Do you know where you lost it?", "I can make a new sword if you like", "Is he angry?"); + option = getMenuOption(player, + "Do you know where you lost it?", + "I can make a new sword if you like", "Is he angry?"); if (option == -1) { return; } @@ -490,7 +580,10 @@ public class KnightsSword extends Quest { makeNewSwordChat(npc, player); return; } else { - queueChat(npc, player, "He doesn't know yet", "I was hoping i could think of something to do", "Before he does find out", "But i find myself at a loss"); + queueChat(npc, player, "He doesn't know yet", + "I was hoping i could think of something to do", + "Before he does find out", + "But i find myself at a loss"); mainOptionsChat(npc, player); } @@ -509,11 +602,16 @@ public class KnightsSword extends Quest { } else if (stage == 4) { sendChat("So how are you doing getting a sword?", npc, player); sendChat("I've found an incando dwarf", player, npc); - sendChat("But he needs a picture of the sword before he can make it", player, npc); + sendChat( + "But he needs a picture of the sword before he can make it", + player, npc); sendChat("A picture eh?", npc, player); - sendChat("The only one i can think of is in a small portrait of sir vyvin's father", npc, player); + sendChat( + "The only one i can think of is in a small portrait of sir vyvin's father", + npc, player); sendChat("He's holding the sword in it", npc, player); - sendChat("Sir vyvin keeps it in a cupboard in his room i think", npc, player, 1200); + sendChat("Sir vyvin keeps it in a cupboard in his room i think", + npc, player, 1200); player.setQuestStage(this, 5); player.setBusy(false); npc.unblock(); @@ -527,8 +625,11 @@ public class KnightsSword extends Quest { } sendChat("I have retrieved your sword for you", player, npc); sendChat("Thankyou, thankyou", npc, player); - sendChat("I was seriously worried i'd have to own up to sir vyvin", npc, player); - player.getActionSender().sendMessage("You give the sword to the squire"); + sendChat( + "I was seriously worried i'd have to own up to sir vyvin", + npc, player); + player.getActionSender().sendMessage( + "You give the sword to the squire"); takeItem(player, SWORD_ID); sleep(); player.setQuestStage(this, COMPLETE); @@ -547,17 +648,25 @@ public class KnightsSword extends Quest { } else { sendChat("So how are you doing getting a sword?", npc, player); sendChat("I've found an incando dwarf", player, npc); - sendChat("But he needs a picture of the sword before he can make it", player, npc); + sendChat( + "But he needs a picture of the sword before he can make it", + player, npc); sendChat("A picture eh?", npc, player); - sendChat("The only one i can think of is in a small portrait of sir vyvin's father", npc, player); - sendChat("Sir vyvin keeps it in a cupboard in his room i think", npc, player, 1200); + sendChat( + "The only one i can think of is in a small portrait of sir vyvin's father", + npc, player); + sendChat( + "Sir vyvin keeps it in a cupboard in his room i think", + npc, player, 1200); player.setQuestStage(this, 5); player.setBusy(false); npc.unblock(); return; } } else if (stage == COMPLETE) { - queueChat(npc, player, "Hello friend", "Thanks for your help before", "Vyvin never even realised it was a different sword"); + queueChat(npc, player, "Hello friend", + "Thanks for your help before", + "Vyvin never even realised it was a different sword"); player.setBusy(false); npc.unblock(); return; @@ -566,7 +675,11 @@ public class KnightsSword extends Quest { private void mainOptionsChat(final Npc npc, final Player player) { player.setBusy(false); - int option = getMenuOption(player, "Well do you know the vague area you lost it?", "I can make a new sword if you like", "Well the kingdom is fairly abundant with swords", "Well I hope you find it soon"); + int option = getMenuOption(player, + "Well do you know the vague area you lost it?", + "I can make a new sword if you like", + "Well the kingdom is fairly abundant with swords", + "Well I hope you find it soon"); if (option == -1) { return; } @@ -589,16 +702,26 @@ public class KnightsSword extends Quest { } private void abundantSwordChat(final Npc npc, final Player player) { - queueChat(npc, player, "Yes you can get bronze swords anywhere", "But this isn't any old sword"); + queueChat(npc, player, "Yes you can get bronze swords anywhere", + "But this isn't any old sword"); dwarfChat(npc, player); } private void dwarfChat(final Npc npc, final Player player) { - queueChat(npc, player, "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 incando dwarves", "Who were a particularly skilled tribe of dwarven smiths", "I doubt anyone could make it in the style they do"); + queueChat( + npc, + player, + "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 incando dwarves", + "Who were a particularly skilled tribe of dwarven smiths", + "I doubt anyone could make it in the style they do"); player.setBusy(false); - int option = getMenuOption(player, "So would these dwarves make another one?", "Well I hope you find it soon"); + int option = getMenuOption(player, + "So would these dwarves make another one?", + "Well I hope you find it soon"); if (option == -1) { return; } @@ -615,10 +738,19 @@ public class KnightsSword extends Quest { } private void lostItChat(final Npc npc, final Player player) { - queueChat(npc, player, "No i was carrying it for him all the way from where he had it stored in Varrock", "It must have slipped from my pack during the trip", "And you know what people are like these days", "Someone will have just picked it up and kept it for themselves"); + queueChat( + npc, + player, + "No i was carrying it for him all the way from where he had it stored in Varrock", + "It must have slipped from my pack during the trip", + "And you know what people are like these days", + "Someone will have just picked it up and kept it for themselves"); player.setBusy(false); - int option = getMenuOption(player, "I can make a new sword if you like", "Well the kingdom is fairly abundant with swords", "Well I hope you find it soon"); + int option = getMenuOption(player, + "I can make a new sword if you like", + "Well the kingdom is fairly abundant with swords", + "Well I hope you find it soon"); if (option == -1) { return; } @@ -645,18 +777,28 @@ public class KnightsSword extends Quest { private void findItChat(final Npc npc, final Player player) { sendChat("Yes me too", npc, player); - sendChat("I'm not looking forward to telling vyvin i've lost it", npc, player); - sendChat("He's going to want it for the parade next week as well", npc, player, 1200); + sendChat("I'm not looking forward to telling vyvin i've lost it", npc, + player); + sendChat("He's going to want it for the parade next week as well", npc, + player, 1200); player.setBusy(false); npc.unblock(); return; } private void startQuest(final Npc npc, final Player player) { - queueChat(npc, player, "I'm not a hundred percent sure the incando tribe exists anymore", "I should think reldo the palace librarian in varrock will know", "He has done a lot of research on the races of these lands", "I don't suppose you could try and track down the incando dwarves for me?", "I've got so much work to do"); + queueChat( + npc, + player, + "I'm not a hundred percent sure the incando tribe exists anymore", + "I should think reldo the palace librarian in varrock will know", + "He has done a lot of research on the races of these lands", + "I don't suppose you could try and track down the incando dwarves for me?", + "I've got so much work to do"); player.setBusy(false); - int option = getMenuOption(player, "Ok I'll give it a go", "No I've got lots of mining work to do"); + int option = getMenuOption(player, "Ok I'll give it a go", + "No I've got lots of mining work to do"); if (option == -1) { return; } @@ -665,7 +807,8 @@ public class KnightsSword extends Quest { if (option == 0) { sendChat("Thankyou very much", npc, player); - sendChat("As i say the best place to start should be with reldo", npc, player, 1200); + sendChat("As i say the best place to start should be with reldo", + npc, player, 1200); player.setQuestStage(this, 1); // Start quest player.setBusy(false); npc.unblock(); diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/SheepShearer.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/SheepShearer.java index 818dafa..2b8dc81 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/SheepShearer.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/SheepShearer.java @@ -13,182 +13,204 @@ import org.moparscape.msc.gs.quest.QuestAction; * @author Konijn */ public class SheepShearer extends Quest { - private final int FRED_ID = 77; - private final int ITEM_WOOL = 207; - private final int REWARD_XP = 350; - private final int REWARD_GP = 330; - private final String[] FIRST_MENU = new String[] { "Sure, what do I need to do?", "No thanks, I'm good." }; - private final String[] SECOND_MENU = new String[] { "Sorry, I don't like the sound of that.", "I'd be happy to help." }; + private final int FRED_ID = 77; + private final int ITEM_WOOL = 207; + private final int REWARD_XP = 350; + private final int REWARD_GP = 330; + private final String[] FIRST_MENU = new String[] { + "Sure, what do I need to do?", "No thanks, I'm good." }; + private final String[] SECOND_MENU = new String[] { + "Sorry, I don't like the sound of that.", "I'd be happy to help." }; - public void init() { - associateNpc(FRED_ID); - } + public void init() { + associateNpc(FRED_ID); + } - public SheepShearer() { - } + public SheepShearer() { + } - public String getName() { - return "Sheep Shearer"; - } + public String getName() { + return "Sheep Shearer"; + } - public int getUniqueID() { - return 1; - } + public int getUniqueID() { + return 1; + } - public void handleAction(QuestAction action, Object[] args, final Player player) { - int stage = player.getQuestStage(this); + public void handleAction(QuestAction action, Object[] args, + final Player player) { + int stage = player.getQuestStage(this); - if (stage == -1) // Quest hasn't been started - { - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; + if (stage == -1) // Quest hasn't been started + { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; - final Npc npc = (Npc) args[0]; + final Npc npc = (Npc) args[0]; - if (npc.getID() != FRED_ID) - return; + if (npc.getID() != FRED_ID) + return; - player.setBusy(true); - npc.blockedBy(player); + player.setBusy(true); + npc.blockedBy(player); - sendChat("Hi there, traveller. Care to make some money?", npc, player); + sendChat("Hi there, traveller. Care to make some money?", npc, + player); - player.setBusy(false); - int option = getMenuOption(player, FIRST_MENU); - sleep(); - player.setBusy(true); - switch (option) { - case 1: - player.setBusy(false); - npc.unblock(); + player.setBusy(false); + int option = getMenuOption(player, FIRST_MENU); + sleep(); + player.setBusy(true); + switch (option) { + case 1: + player.setBusy(false); + npc.unblock(); - break; - case 0: + break; + case 0: - sendChat("If you collect 20 balls of wool for me, I'll pay you 500 coins.", npc, player); + sendChat( + "If you collect 20 balls of wool for me, I'll pay you 500 coins.", + npc, player); - sendChat("Maybe I'll teach you a thing or two about crafting, too.", npc, player); + sendChat( + "Maybe I'll teach you a thing or two about crafting, too.", + npc, player); - sendChat("I'm afraid you'll have to find your own shears, but the sheep are outside.", npc, player); + sendChat( + "I'm afraid you'll have to find your own shears, but the sheep are outside.", + npc, player); - player.setBusy(false); - option = getMenuOption(player, SECOND_MENU); - sleep(); - player.setBusy(true); - switch (option) { - case 1: - sendChat("Great! Come back and see me when you're done.", npc, player); + player.setBusy(false); + option = getMenuOption(player, SECOND_MENU); + sleep(); + player.setBusy(true); + switch (option) { + case 1: + sendChat( + "Great! Come back and see me when you're done.", + npc, player); - player.setQuestStage(getUniqueID(), 1); - player.setBusy(false); - npc.unblock(); + player.setQuestStage(getUniqueID(), 1); + player.setBusy(false); + npc.unblock(); - break; - case 0: + break; + case 0: - sendChat("Suit yourself. Come and see me if you change your mind.", npc, player); - player.setBusy(false); - npc.unblock(); + sendChat( + "Suit yourself. Come and see me if you change your mind.", + npc, player); + player.setBusy(false); + npc.unblock(); - break; - default: - player.setBusy(false); - npc.unblock(); - break; + break; + default: + player.setBusy(false); + npc.unblock(); + break; - } + } - break; - default: - player.setBusy(false); - npc.unblock(); - break; + break; + default: + player.setBusy(false); + npc.unblock(); + break; + } + + } else + return; + } else if (stage == 1) { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; + + final Npc npc = (Npc) args[0]; + + if (npc.getID() != FRED_ID) + return; + + player.setBusy(true); + npc.blockedBy(player); + sendChat("Ahh, you've returned! Do you have my wool?", npc, + player); + + player.setBusy(false); + int option = getMenuOption(player, "I'm afraid not.", + "Yes, I do."); + + if (option == -1) { + npc.unblock(); + player.setBusy(false); + return; + } + sleep(); + player.setBusy(true); + // SingleEvent + if (option == 0) { + + sendChat( + "Well, come and see me when you do. The offer still stands", + npc, player); + player.setBusy(false); + npc.unblock(); + + } else if (option == 1) { + + // check items + if (player.getInventory().hasItemId(ITEM_WOOL) + && player.getInventory().countId(ITEM_WOOL) >= 20) { + finishQuest(player, npc); + } else { + sendChat( + "Um, no you don't. Get back to me when you do. The reward still stands!", + npc, player); + player.setBusy(false); + npc.unblock(); + } + } + + } + } else if (stage == 0) { + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; + + final Npc npc = (Npc) args[0]; + + if (npc.getID() != FRED_ID) + return; + + player.setBusy(true); + npc.blockedBy(player); + sendChat("Hello " + player.getUsername() + "!", npc, player); + player.setBusy(false); + npc.unblock(); + } } + } - } else - return; - } else if (stage == 1) { - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - if (npc.getID() != FRED_ID) - return; - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Ahh, you've returned! Do you have my wool?", npc, player); - - player.setBusy(false); - int option = getMenuOption(player, "I'm afraid not.", "Yes, I do."); - - if (option == -1) { - npc.unblock(); - player.setBusy(false); - return; - } - sleep(); - player.setBusy(true); - // SingleEvent - if (option == 0) { - - sendChat("Well, come and see me when you do. The offer still stands", npc, player); - player.setBusy(false); - npc.unblock(); - - } else if (option == 1) { - - // check items - if (player.getInventory().hasItemId(ITEM_WOOL) && player.getInventory().countId(ITEM_WOOL) >= 20) { - finishQuest(player, npc); - } else { - sendChat("Um, no you don't. Get back to me when you do. The reward still stands!", npc, player); + private void finishQuest(final Player player, final Npc npc) { + if (player.getQuestStage(this) == COMPLETE) { player.setBusy(false); npc.unblock(); - } + return; } + sendChat("Thank you very much! As promised, here's your reward.", npc, + player); - } - } else if (stage == 0) { - if (action == QuestAction.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - if (npc.getID() != FRED_ID) - return; - - player.setBusy(true); - npc.blockedBy(player); - sendChat("Hello " + player.getUsername() + "!", npc, player); + player.incExp(12, REWARD_XP, false); + player.getActionSender().sendStat(12); + player.setQuestStage(getUniqueID(), Quest.COMPLETE); + for (int i = 0; i < 20; i++) + player.getInventory().remove(ITEM_WOOL, 1); + player.getInventory().add(new InvItem(10, REWARD_GP)); + player.getActionSender().sendInventory(); + player.incQuestPoints(1); player.setBusy(false); npc.unblock(); - } + } - } - - private void finishQuest(final Player player, final Npc npc) { - if (player.getQuestStage(this) == COMPLETE) { - player.setBusy(false); - npc.unblock(); - return; - } - sendChat("Thank you very much! As promised, here's your reward.", npc, player); - - player.incExp(12, REWARD_XP, false); - player.getActionSender().sendStat(12); - player.setQuestStage(getUniqueID(), Quest.COMPLETE); - for (int i = 0; i < 20; i++) - player.getInventory().remove(ITEM_WOOL, 1); - player.getInventory().add(new InvItem(10, REWARD_GP)); - player.getActionSender().sendInventory(); - player.incQuestPoints(1); - player.setBusy(false); - npc.unblock(); - - } } diff --git a/GameServer/src/org/moparscape/msc/gs/plugins/quests/WitchsPotion.java b/GameServer/src/org/moparscape/msc/gs/plugins/quests/WitchsPotion.java index d917713..9a8da2a 100644 --- a/GameServer/src/org/moparscape/msc/gs/plugins/quests/WitchsPotion.java +++ b/GameServer/src/org/moparscape/msc/gs/plugins/quests/WitchsPotion.java @@ -18,254 +18,288 @@ import org.moparscape.msc.gs.quest.QuestAction; * @author punKrockeR */ public class WitchsPotion extends Quest { - private static final int WITCH_ID = 148; - private static final int RAT_ID = 29; - private static final int TAIL_ID = 271; - private static final int CAULDRON_ID = 147; - private static final int CAULDRON_X = 316; - private static final int CAULDRON_Y = 666; - private static final int ONION_ID = 241; - private static final int NEWT_EYE_ID = 270; - private static final int BURNT_MEAT_ID = 134; - private static final int QUEST_POINTS = 1; - private static final int REWARD_XP = 1000; + private static final int WITCH_ID = 148; + private static final int RAT_ID = 29; + private static final int TAIL_ID = 271; + private static final int CAULDRON_ID = 147; + private static final int CAULDRON_X = 316; + private static final int CAULDRON_Y = 666; + private static final int ONION_ID = 241; + private static final int NEWT_EYE_ID = 270; + private static final int BURNT_MEAT_ID = 134; + private static final int QUEST_POINTS = 1; + private static final int REWARD_XP = 1000; - public void init() { - associateNpc(WITCH_ID); - associateNpc(RAT_ID); - associateObject(CAULDRON_ID, CAULDRON_X, CAULDRON_Y); - } - - public String getName() { - return "Witch's Potion"; - } - - public int getUniqueID() { - return 9; - } - - /** - * @return if the given npc id is associated with this quest - */ - @Override - public boolean isNpcAssociated(int id, Player player) { - if (id == RAT_ID && player.getQuestStage(this) == 1) - return true; - - if (id == WITCH_ID) - return true; - - return false; - } - - public void handleAction(QuestAction action, Object[] args, final Player player) { - int stage = player.getQuestStage(this); - - if (action == action.TALKED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - if (npc.getID() == WITCH_ID) - handleWitchChat(npc, player); - else if (npc.getID() == RAT_ID) { - player.getActionSender().sendMessage("Rats can't talk!"); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (action == action.KILLED_NPC) { - if (!(args[0] instanceof Npc)) - return; - - final Npc npc = (Npc) args[0]; - - if (npc.getID() == RAT_ID) { - if (stage == 1) - world.registerItem(new Item(TAIL_ID, npc.getX(), npc.getY(), 1, player)); - } - } else if (action == action.USED_OBJECT) { - if (!(args[0] instanceof GameObject)) - return; - - final GameObject obj = (GameObject) args[0]; - - if (obj.getID() == CAULDRON_ID && obj.getX() == CAULDRON_X && obj.getY() == CAULDRON_Y) { - player.setBusy(true); - - if (stage != 2) { - sendChat("I'd rather not", player, null); - sendChat("It doesn't look very tasty", player, null); - player.setBusy(false); - } else { - if (player.getQuestStage(this) == COMPLETE) { - player.setBusy(false); - return; - } - sendMessage(player, "You drink from the cauldron"); - sleep(); - sendMessage(player, "You feel yourself imbued with power"); - sleep(1200); - player.setQuestStage(this, COMPLETE); - player.incQuestPoints(QUEST_POINTS); - player.incExp(6, REWARD_XP, false); - player.setBusy(false); - } - } + public void init() { + associateNpc(WITCH_ID); + associateNpc(RAT_ID); + associateObject(CAULDRON_ID, CAULDRON_X, CAULDRON_Y); } - } - private void handleWitchChat(final Npc npc, final Player player) { - int stage = player.getQuestStage(this); + public String getName() { + return "Witch's Potion"; + } - if (stage == -1) { - sendChat("Greetings traveller", npc, player); + public int getUniqueID() { + return 9; + } - sendChat("What could you want with an old woman like me?", npc, player); + /** + * @return if the given npc id is associated with this quest + */ + @Override + public boolean isNpcAssociated(int id, Player player) { + if (id == RAT_ID && player.getQuestStage(this) == 1) + return true; - player.setBusy(false); - int option = getMenuOption(player, "I am in search of a quest", "I've heard that you are a witch"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + if (id == WITCH_ID) + return true; - if (option == 0) { - sendChat("Hmm maybe i can think of something for you", npc, player); + return false; + } - sendChat("Would you like to become more proficient in the dark arts?", npc, player); + public void handleAction(QuestAction action, Object[] args, + final Player player) { + int stage = player.getQuestStage(this); - player.setBusy(false); - option = getMenuOption(player, "Yes help me become one with my darker side", "No I have my principles and honour", "What, you mean improve my magic?"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + if (action == QuestAction.TALKED_NPC) { + if (!(args[0] instanceof Npc)) + return; - if (option == 0) { - startQuest(npc, player, true); - return; - } else if (option == 1) { - sendChat("Suit yourself, but you're missing out", npc, player); - sleep(1200); - player.setBusy(false); - npc.unblock(); - return; - } else { - sendChat("Yes improve your magic", npc, player); + final Npc npc = (Npc) args[0]; - sendChat("Do you have no sense of drama?", npc, player); + if (npc.getID() == WITCH_ID) + handleWitchChat(npc, player); + else if (npc.getID() == RAT_ID) { + player.getActionSender().sendMessage("Rats can't talk!"); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (action == QuestAction.KILLED_NPC) { + if (!(args[0] instanceof Npc)) + return; - player.setBusy(false); - option = getMenuOption(player, "Yes I'd like to improve my magic", "No I'm not interested", "Show me the mysteries of the dark arts"); - if (option == -1) - return; - player.setBusy(true); - sleep(); + final Npc npc = (Npc) args[0]; - if (option == 0) { - startQuest(npc, player, false); - return; - } else if (option == 1) { - sendChat("Many aren't to start off with", npc, player); - sendChat("But i think you'll be drawn back to this place", npc, player, 1200); + if (npc.getID() == RAT_ID) { + if (stage == 1) + world.registerItem(new Item(TAIL_ID, npc.getX(), + npc.getY(), 1, player)); + } + } else if (action == QuestAction.USED_OBJECT) { + if (!(args[0] instanceof GameObject)) + return; + + final GameObject obj = (GameObject) args[0]; + + if (obj.getID() == CAULDRON_ID && obj.getX() == CAULDRON_X + && obj.getY() == CAULDRON_Y) { + player.setBusy(true); + + if (stage != 2) { + sendChat("I'd rather not", player, null); + sendChat("It doesn't look very tasty", player, null); + player.setBusy(false); + } else { + if (player.getQuestStage(this) == COMPLETE) { + player.setBusy(false); + return; + } + sendMessage(player, "You drink from the cauldron"); + sleep(); + sendMessage(player, "You feel yourself imbued with power"); + sleep(1200); + player.setQuestStage(this, COMPLETE); + player.incQuestPoints(QUEST_POINTS); + player.incExp(6, REWARD_XP, false); + player.setBusy(false); + } + } + } + } + + private void handleWitchChat(final Npc npc, final Player player) { + int stage = player.getQuestStage(this); + + if (stage == -1) { + sendChat("Greetings traveller", npc, player); + + sendChat("What could you want with an old woman like me?", npc, + player); + + player.setBusy(false); + int option = getMenuOption(player, "I am in search of a quest", + "I've heard that you are a witch"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat("Hmm maybe i can think of something for you", npc, + player); + + sendChat( + "Would you like to become more proficient in the dark arts?", + npc, player); + + player.setBusy(false); + option = getMenuOption(player, + "Yes help me become one with my darker side", + "No I have my principles and honour", + "What, you mean improve my magic?"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + startQuest(npc, player, true); + return; + } else if (option == 1) { + sendChat("Suit yourself, but you're missing out", npc, + player); + sleep(1200); + player.setBusy(false); + npc.unblock(); + return; + } else { + sendChat("Yes improve your magic", npc, player); + + sendChat("Do you have no sense of drama?", npc, player); + + player.setBusy(false); + option = getMenuOption(player, + "Yes I'd like to improve my magic", + "No I'm not interested", + "Show me the mysteries of the dark arts"); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + startQuest(npc, player, false); + return; + } else if (option == 1) { + sendChat("Many aren't to start off with", npc, player); + sendChat( + "But i think you'll be drawn back to this place", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else { + startQuest(npc, player, true); + return; + } + } + } else { + sendChat( + "Yes it does seem to be getting fairly common knowledge", + npc, player); + sendChat( + "I fear i may get a visit from the witch hunters of falador before long", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (stage == 1) { + sendChat("So have you found the things for the potion?", npc, + player); + + if (hasItem(player, TAIL_ID, NEWT_EYE_ID, BURNT_MEAT_ID, ONION_ID)) { + sendChat("Yes i have everthing", player, npc); + sendChat("Excellent, can i have them then?", npc, player); + sendMessage(player, "You pass the ingredients to Hetty"); + takeItem(player, NEWT_EYE_ID, TAIL_ID, BURNT_MEAT_ID, ONION_ID); + sleep(); + sendMessage(player, + "Hetty puts all the ingredients in her cauldron"); + sleep(); + sendMessage(player, "She closes her eyes and begins to chant"); + sleep(); + sendChat("Ok drink from the cauldron", npc, player, 1200); + player.setQuestStage(this, 2); + player.setBusy(false); + npc.unblock(); + return; + } else { + sendChat("No not yet", player, npc); + sendChat("Well remember what you need to get", npc, player); + sendChat( + "An eye of newt, a rat's tail, some burnt meat and an onion", + npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } else if (stage == 2) { + sendChat("Well are you going to drink the potion or not?", npc, + player, 1200); player.setBusy(false); npc.unblock(); return; - } else { - startQuest(npc, player, true); + } else if (stage == COMPLETE) { + sendChat("Greetings traveller", npc, player); + sendChat("How's your magic coming along? ", npc, player); + sendChat("I'm practicing and slowly getting better", player, npc); + sendChat("Good, good", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } else // error + { + player.setBusy(false); + npc.unblock(); return; - } } - } else { - sendChat("Yes it does seem to be getting fairly common knowledge", npc, player); - sendChat("I fear i may get a visit from the witch hunters of falador before long", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (stage == 1) { - sendChat("So have you found the things for the potion?", npc, player); - - if (hasItem(player, TAIL_ID, NEWT_EYE_ID, BURNT_MEAT_ID, ONION_ID)) { - sendChat("Yes i have everthing", player, npc); - sendChat("Excellent, can i have them then?", npc, player); - sendMessage(player, "You pass the ingredients to Hetty"); - takeItem(player, NEWT_EYE_ID, TAIL_ID, BURNT_MEAT_ID, ONION_ID); - sleep(); - sendMessage(player, "Hetty puts all the ingredients in her cauldron"); - sleep(); - sendMessage(player, "She closes her eyes and begins to chant"); - sleep(); - sendChat("Ok drink from the cauldron", npc, player, 1200); - player.setQuestStage(this, 2); - player.setBusy(false); - npc.unblock(); - return; - } else { - sendChat("No not yet", player, npc); - sendChat("Well remember what you need to get", npc, player); - sendChat("An eye of newt, a rat's tail, some burnt meat and an onion", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } - } else if (stage == 2) { - sendChat("Well are you going to drink the potion or not?", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else if (stage == COMPLETE) { - sendChat("Greetings traveller", npc, player); - sendChat("How's your magic coming along? ", npc, player); - sendChat("I'm practicing and slowly getting better", player, npc); - sendChat("Good, good", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } else // error - { - player.setBusy(false); - npc.unblock(); - return; - } - } - - private void startQuest(final Npc npc, final Player player, boolean dark) { - sendChat("Ok, I'm going to make a potion to help bring out your darker self", npc, player); - sendChat("So that you can perform acts of dark magic with greater ease", npc, player); - - if (!dark) { - sendChat("Dark magic?", player, npc); - sendChat("It's not as ominous as it sounds, trust me", npc, player); - - player.setBusy(false); - int option = getMenuOption(player, "No, I don't like the sound of it", "Well, alright..."); - if (option == -1) - return; - player.setBusy(true); - sleep(); - - if (option == 0) { - sendChat("Fine, suit yourself", npc, player); - sendChat("But I sense a great deal of dark power within you", npc, player); - sendChat("You'll change your mind one day", npc, player, 1200); - player.setBusy(false); - npc.unblock(); - return; - } } - sendChat("You will need certain ingredients", npc, player); - sendChat("What do i need?", player, npc, 2000); - sendChat("You need an eye of newt, a rat's tail, an onion and a piece of burnt meat", npc, player); - player.setQuestStage(this, 1); - player.setBusy(false); - npc.unblock(); - return; - } + private void startQuest(final Npc npc, final Player player, boolean dark) { + sendChat( + "Ok, I'm going to make a potion to help bring out your darker self", + npc, player); + sendChat( + "So that you can perform acts of dark magic with greater ease", + npc, player); - public WitchsPotion() { - } + if (!dark) { + sendChat("Dark magic?", player, npc); + sendChat("It's not as ominous as it sounds, trust me", npc, player); + + player.setBusy(false); + int option = getMenuOption(player, + "No, I don't like the sound of it", "Well, alright..."); + if (option == -1) + return; + player.setBusy(true); + sleep(); + + if (option == 0) { + sendChat("Fine, suit yourself", npc, player); + sendChat("But I sense a great deal of dark power within you", + npc, player); + sendChat("You'll change your mind one day", npc, player, 1200); + player.setBusy(false); + npc.unblock(); + return; + } + } + + sendChat("You will need certain ingredients", npc, player); + sendChat("What do i need?", player, npc, 2000); + sendChat( + "You need an eye of newt, a rat's tail, an onion and a piece of burnt meat", + npc, player); + player.setQuestStage(this, 1); + player.setBusy(false); + npc.unblock(); + return; + } + + public WitchsPotion() { + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/quest/Quest.java b/GameServer/src/org/moparscape/msc/gs/quest/Quest.java index d524aa2..eb43d1f 100644 --- a/GameServer/src/org/moparscape/msc/gs/quest/Quest.java +++ b/GameServer/src/org/moparscape/msc/gs/quest/Quest.java @@ -18,476 +18,487 @@ import org.moparscape.msc.gs.model.Point; import org.moparscape.msc.gs.model.World; import org.moparscape.msc.gs.util.Logger; - /** * Defines a quest script * * @author punKrockeR */ public abstract class Quest { - /** - * Empty constructor - */ - public Quest() { - } + /** + * Empty constructor + */ + public Quest() { + } - /** - * The world instance - */ - protected static final World world = World.getWorld(); - /** - * The completed flag - */ - public static final int COMPLETE = 0; - /** - * This quest's current thread - */ - private Thread thread = null; - /** - * The list of npcs associated with this quest - */ - private Set associatedNpcs = new HashSet(); - /** - * The list of objects associated with this quest - */ - private HashMap associatedObjects = new HashMap(); - /** - * The list of items associated with this quest - */ - private Set associatedItems = new HashSet(); + /** + * The world instance + */ + protected static final World world = World.getWorld(); + /** + * The completed flag + */ + public static final int COMPLETE = 0; + /** + * This quest's current thread + */ + private Thread thread = null; + /** + * The list of npcs associated with this quest + */ + private Set associatedNpcs = new HashSet(); + /** + * The list of objects associated with this quest + */ + private HashMap associatedObjects = new HashMap(); + /** + * The list of items associated with this quest + */ + private Set associatedItems = new HashSet(); - /** - * Quest initialization - */ - public void init() { - } + /** + * Quest initialization + */ + public void init() { + } - /** - * Used for triggers - */ - public abstract void handleAction(QuestAction action, Object[] args, Player player); + /** + * Used for triggers + */ + public abstract void handleAction(QuestAction action, Object[] args, + Player player); - /** - * Sets this thread - */ - public void setThread(Thread thread) { - this.thread = thread; - } + /** + * Sets this thread + */ + public void setThread(Thread thread) { + this.thread = thread; + } - /** - * @return this quest's UNIQUE ID - >>MUST<< be unique. - */ - public abstract int getUniqueID(); + /** + * @return this quest's UNIQUE ID - >>MUST<< be unique. + */ + public abstract int getUniqueID(); - /** - * @return this quest's name - */ - public abstract String getName(); + /** + * @return this quest's name + */ + public abstract String getName(); - /** - * The default sleep time - */ - private static long DEFAULT_DELAY = 3200; + /** + * The default sleep time + */ + private static long DEFAULT_DELAY = 3200; - /** - * Adds the given npc id to the list of npc ids associated with this quest - */ - public void associateNpc(int id) { - associatedNpcs.add(id); - } + /** + * Adds the given npc id to the list of npc ids associated with this quest + */ + public void associateNpc(int id) { + associatedNpcs.add(id); + } - /** - * Adds the given item id to the list of item ids associated with this quest - */ - public void associateItem(int id) { - associatedItems.add(id); - } + /** + * Adds the given item id to the list of item ids associated with this quest + */ + public void associateItem(int id) { + associatedItems.add(id); + } - /** - * Adds the given object id to the list of object ids associated with this - * quest - */ - public void associateObject(int id, int x, int y) { - associatedObjects.put(new java.awt.Point(id, associatedObjects.size()), Point.location(x, y)); - } + /** + * Adds the given object id to the list of object ids associated with this + * quest + */ + public void associateObject(int id, int x, int y) { + associatedObjects.put(new java.awt.Point(id, associatedObjects.size()), + Point.location(x, y)); + } - /** - * Adds the given object id to the list of object ids associated with this - * quest - */ - public void associateObject(int id) { - associatedObjects.put(new java.awt.Point(id, associatedObjects.size()), Point.location(0, 0)); - } + /** + * Adds the given object id to the list of object ids associated with this + * quest + */ + public void associateObject(int id) { + associatedObjects.put(new java.awt.Point(id, associatedObjects.size()), + Point.location(0, 0)); + } - /** - * @return if the given npc id is associated with this quest - */ - public boolean isNpcAssociated(int id, Player player) { - return associatedNpcs.contains(id); - } + /** + * @return if the given npc id is associated with this quest + */ + public boolean isNpcAssociated(int id, Player player) { + return associatedNpcs.contains(id); + } - /** - * @return if the given item id is associated with this quest - */ - public boolean isItemAssociated(int id, Player player) { - return associatedItems.contains(id); - } + /** + * @return if the given item id is associated with this quest + */ + public boolean isItemAssociated(int id, Player player) { + return associatedItems.contains(id); + } - /** - * @return if the given object id is associated with this quest - */ - public boolean isObjectAssociated(GameObject obj, Player player) { + /** + * @return if the given object id is associated with this quest + */ + public boolean isObjectAssociated(GameObject obj, Player player) { java.util.Set set = associatedObjects.keySet(); for (java.awt.Point p : set) { - int i = (int) p.getX(); - if (i == obj.getID()) - if (Point.location(obj.getX(), obj.getY()).equals(associatedObjects.get(p)) || (associatedObjects.get(p).getX() == 0 && associatedObjects.get(p).getY() == 0)) { - Logger.println("obj id " + i + " is associated with quest " + getName()); - return true; - } else - Logger.println("obj id " + i + " is NOT associated with quest " + getName()); + int i = (int) p.getX(); + if (i == obj.getID()) + if (Point.location(obj.getX(), obj.getY()).equals( + associatedObjects.get(p)) + || (associatedObjects.get(p).getX() == 0 && associatedObjects + .get(p).getY() == 0)) { + Logger.println("obj id " + i + " is associated with quest " + + getName()); + return true; + } else + Logger.println("obj id " + i + + " is NOT associated with quest " + getName()); } return false; - } - - /** - * Sends a quest message to the player - */ - public void sendMessage(Player player, String message) { - player.getActionSender().sendMessage("@que@" + message); - } - - /** - * Inform of npc chat - */ - public void sendChat(String msg, Npc npc, Player player) { - sendChat(msg, npc, player, DEFAULT_DELAY); - } - - /** - * Inform of npc chat - */ - public void sendChat(String msg, Npc npc, Player player, long delay) { - try { - if (player != null && npc != null) - npc.blockedBy(player); - } catch (java.util.ConcurrentModificationException cme) { - } catch (Exception e) { - e.printStackTrace(); } - player.informOfNpcMessage(new ChatMessage(npc, msg, player)); - sleep(delay); - } - - /** - * Inform of player chat - */ - public void sendChat(String msg, Player player, Npc npc) { - sendChat(msg, player, npc, DEFAULT_DELAY); - } - - /** - * Inform of player chat - */ - public void sendChat(String msg, Player player, Npc npc, long delay) { - try { - if (player != null && npc != null) - npc.blockedBy(player); - } catch (java.util.ConcurrentModificationException cme) { - } catch (Exception e) { - e.printStackTrace(); + /** + * Sends a quest message to the player + */ + public void sendMessage(Player player, String message) { + player.getActionSender().sendMessage("@que@" + message); } - player.informOfChatMessage(new ChatMessage(player, msg, npc)); - sleep(delay); - } + /** + * Inform of npc chat + */ + public void sendChat(String msg, Npc npc, Player player) { + sendChat(msg, npc, player, DEFAULT_DELAY); + } - /** - * Adds the given short event - */ - public void addSingleEvent(SingleEvent event) { - world.getDelayedEventHandler().add(event); - } - - /** - * @return if the given NPC is visible to the player - */ - public boolean isNpcVisible(Npc npc, Player player) { - return true; - } - - /** - * @return if the given NPC is shootable - */ - public boolean isNpcShootable(Npc npc, Player player) { - return true; - } - - /** - * @return if the given Item is visible to the player - */ - public boolean isItemVisible(Item item, Player player) { - return true; - } - - /** - * @return if this quest is to be loaded or not (used for when a quest is - * not finished yet, and shouldn't be loaded) - */ - public boolean loadQuest() { - return true; - } - - /** - * Pauses the quest for 'ms' milliseconds - */ - public void sleep(long ms) { - if (ms <= 0) - return; - + /** + * Inform of npc chat + */ + public void sendChat(String msg, Npc npc, Player player, long delay) { try { - thread.sleep(ms); - } catch (InterruptedException e) {} - } - - /** - * Sleeps for the DEFAULT time - */ - public void sleep() { - sleep(DEFAULT_DELAY); - } - - /** - * Sets the default delay - */ - public void setDefaultDelay(long l) { - DEFAULT_DELAY = l; - } - - /** - * @return which option the player chooses out of the given menu - */ - public int getMenuOption(final Player player, long timeout, String... menu) { - player.setLastQuestMenuReply(-1); - player.getActionSender().sendMenu(menu); - player.setMenuHandler(new MenuHandler(menu) { - public void handleReply(int option, String reply) { - player.setLastQuestMenuReply(option); - sendChat(reply, player, null, 0); - } - }); - - long start = GameEngine.getTime(); - while (player.getLastQuestMenuReply() == -1 && (GameEngine.getTime() - start) <= timeout) { - if (player.getLastQuestMenuReply() == -2) - return -1; - sleep(10); - } - - return player.getLastQuestMenuReply(); - } - - /** - * @return which option the player chooses out of the given menu - */ - public int getMenuOption(final Player player, String... menu) { - return getMenuOption(player, 30000, menu); // 30 sec default timeout - } - - /** - * Queues the given player-to-npc chat - */ - public void queueChat(Player player, Npc npc, long delay, String... chat) { - int idx = 0; - while (idx < chat.length) - sendChat(chat[idx++], player, npc); - } - - /** - * Queues the given player-to-npc chat - */ - public void queueChat(Player player, Npc npc, String... chat) { - queueChat(player, npc, DEFAULT_DELAY, chat); - } - - /** - * Queues the given npc-to-player chat - */ - public void queueChat(Npc npc, Player player, long delay, String... chat) { - int idx = 0; - while (idx < chat.length) - sendChat(chat[idx++], npc, player); - } - - /** - * Queues the given player-to-npc chat - */ - public void queueChat(Npc npc, Player player, String... chat) { - queueChat(npc, player, DEFAULT_DELAY, chat); - } - - /** - * @return if the player is wielding the given item id - */ - public boolean isWielding(Player player, int id) { - return player.getInventory().wielding(id); - } - - /** - * Adds the given InvItems to the player's inventory - */ - public void giveItem(Player player, InvItem... items) { - boolean coins = false; - - for (InvItem i : items) { - player.getInventory().add(i); - - if (i.getID() == 10) - coins = true; - } - - player.getActionSender().sendSound(coins ? "coins" : "click"); - player.getActionSender().sendInventory(); - } - - /** - * Adds the given item ids to the player's inventory - */ - public void giveItem(Player player, int... ids) { - boolean coins = false; - - for (int i : ids) { - player.getInventory().add(new InvItem(i, 1)); - - if (i == 10) - coins = true; - } - - player.getActionSender().sendSound(coins ? "coins" : "click"); - player.getActionSender().sendInventory(); - } - - /** - * Removes the given InvItems from the player's inventory - */ - public void takeItem(Player player, InvItem... items) { - boolean coins = false; - - for (InvItem i : items) { - player.getInventory().remove(i); - - if (i.getID() == 10) - coins = true; - } - - player.getActionSender().sendSound(coins ? "coins" : "click"); - player.getActionSender().sendInventory(); - } - - /** - * Removes the given item ids from the player's inventory - */ - public void takeItem(Player player, int... ids) { - boolean coins = false; - - for (int i : ids) { - player.getInventory().remove(new InvItem(i, 1)); - - if (i == 10) - coins = true; - } - - player.getActionSender().sendSound(coins ? "coins" : "click"); - player.getActionSender().sendInventory(); - } - - /** - * @return if the player has the given InvItem - */ - public boolean hasItem(Player player, InvItem... items) { - boolean has = true; - - for (InvItem i : items) { - if (!player.getInventory().hasItemId(i.getID())) { - has = false; - break; - } - } - - return has; - } - - /** - * @return if the player has the given item ids - */ - public boolean hasItem(Player player, int... items) { - boolean has = true; - - for (int i : items) { - if (!player.getInventory().hasItemId(i)) { - has = false; - break; - } - } - - return has; - } - - /** - * @return the amount of the given item the player has - */ - public int countItem(Player player, InvItem item) { - return player.getInventory().countId(item.getID()); - } - - /** - * @return the amount of the given item id the player has - */ - public int countItem(Player player, int id) { - return player.getInventory().countId(id); - } - - /** - * @return if the player has the given item in his inventory, bank or if - * it's on the ground somewhere - */ - public boolean hasItemAbs(Player player, int id) { - if (player.getInventory().hasItemId(id)) - return true; - - if (player.getBank().hasItemId(id)) - return true; - - ActiveTile[][] tiles = player.getViewArea().getViewedArea(20, 20, 20, 20); - for (int x = 0; x < tiles.length; x++) { - for (int y = 0; y < tiles[x].length; y++) { - ActiveTile t = tiles[x][y]; - if (t != null) { - for (Item i : t.getItems()) { - if (i.getID() == id) { - if (i.getOwner().equals(player)) - return true; - } - } + if (player != null && npc != null) + npc.blockedBy(player); + } catch (java.util.ConcurrentModificationException cme) { + } catch (Exception e) { + e.printStackTrace(); } - } + + player.informOfNpcMessage(new ChatMessage(npc, msg, player)); + sleep(delay); } - return false; - } + /** + * Inform of player chat + */ + public void sendChat(String msg, Player player, Npc npc) { + sendChat(msg, player, npc, DEFAULT_DELAY); + } - /** - * Sets this quest's stage - */ - public void setStage(Player player, int stage) { - player.setQuestStage(getUniqueID(), stage); - } + /** + * Inform of player chat + */ + public void sendChat(String msg, Player player, Npc npc, long delay) { + try { + if (player != null && npc != null) + npc.blockedBy(player); + } catch (java.util.ConcurrentModificationException cme) { + } catch (Exception e) { + e.printStackTrace(); + } - /** - * @return this quest's stage - */ - public int getQuestStage(Player player) { - return player.getQuestStage(getUniqueID()); - } + player.informOfChatMessage(new ChatMessage(player, msg, npc)); + sleep(delay); + } + + /** + * Adds the given short event + */ + public void addSingleEvent(SingleEvent event) { + world.getDelayedEventHandler().add(event); + } + + /** + * @return if the given NPC is visible to the player + */ + public boolean isNpcVisible(Npc npc, Player player) { + return true; + } + + /** + * @return if the given NPC is shootable + */ + public boolean isNpcShootable(Npc npc, Player player) { + return true; + } + + /** + * @return if the given Item is visible to the player + */ + public boolean isItemVisible(Item item, Player player) { + return true; + } + + /** + * @return if this quest is to be loaded or not (used for when a quest is + * not finished yet, and shouldn't be loaded) + */ + public boolean loadQuest() { + return true; + } + + /** + * Pauses the quest for 'ms' milliseconds + */ + @SuppressWarnings("static-access") + public void sleep(long ms) { + if (ms <= 0) + return; + + try { + thread.sleep(ms); + } catch (InterruptedException e) { + } + } + + /** + * Sleeps for the DEFAULT time + */ + public void sleep() { + sleep(DEFAULT_DELAY); + } + + /** + * Sets the default delay + */ + public void setDefaultDelay(long l) { + DEFAULT_DELAY = l; + } + + /** + * @return which option the player chooses out of the given menu + */ + public int getMenuOption(final Player player, long timeout, String... menu) { + player.setLastQuestMenuReply(-1); + player.getActionSender().sendMenu(menu); + player.setMenuHandler(new MenuHandler(menu) { + public void handleReply(int option, String reply) { + player.setLastQuestMenuReply(option); + sendChat(reply, player, null, 0); + } + }); + + long start = GameEngine.getTime(); + while (player.getLastQuestMenuReply() == -1 + && (GameEngine.getTime() - start) <= timeout) { + if (player.getLastQuestMenuReply() == -2) + return -1; + sleep(10); + } + + return player.getLastQuestMenuReply(); + } + + /** + * @return which option the player chooses out of the given menu + */ + public int getMenuOption(final Player player, String... menu) { + return getMenuOption(player, 30000, menu); // 30 sec default timeout + } + + /** + * Queues the given player-to-npc chat + */ + public void queueChat(Player player, Npc npc, long delay, String... chat) { + int idx = 0; + while (idx < chat.length) + sendChat(chat[idx++], player, npc); + } + + /** + * Queues the given player-to-npc chat + */ + public void queueChat(Player player, Npc npc, String... chat) { + queueChat(player, npc, DEFAULT_DELAY, chat); + } + + /** + * Queues the given npc-to-player chat + */ + public void queueChat(Npc npc, Player player, long delay, String... chat) { + int idx = 0; + while (idx < chat.length) + sendChat(chat[idx++], npc, player); + } + + /** + * Queues the given player-to-npc chat + */ + public void queueChat(Npc npc, Player player, String... chat) { + queueChat(npc, player, DEFAULT_DELAY, chat); + } + + /** + * @return if the player is wielding the given item id + */ + public boolean isWielding(Player player, int id) { + return player.getInventory().wielding(id); + } + + /** + * Adds the given InvItems to the player's inventory + */ + public void giveItem(Player player, InvItem... items) { + boolean coins = false; + + for (InvItem i : items) { + player.getInventory().add(i); + + if (i.getID() == 10) + coins = true; + } + + player.getActionSender().sendSound(coins ? "coins" : "click"); + player.getActionSender().sendInventory(); + } + + /** + * Adds the given item ids to the player's inventory + */ + public void giveItem(Player player, int... ids) { + boolean coins = false; + + for (int i : ids) { + player.getInventory().add(new InvItem(i, 1)); + + if (i == 10) + coins = true; + } + + player.getActionSender().sendSound(coins ? "coins" : "click"); + player.getActionSender().sendInventory(); + } + + /** + * Removes the given InvItems from the player's inventory + */ + public void takeItem(Player player, InvItem... items) { + boolean coins = false; + + for (InvItem i : items) { + player.getInventory().remove(i); + + if (i.getID() == 10) + coins = true; + } + + player.getActionSender().sendSound(coins ? "coins" : "click"); + player.getActionSender().sendInventory(); + } + + /** + * Removes the given item ids from the player's inventory + */ + public void takeItem(Player player, int... ids) { + boolean coins = false; + + for (int i : ids) { + player.getInventory().remove(new InvItem(i, 1)); + + if (i == 10) + coins = true; + } + + player.getActionSender().sendSound(coins ? "coins" : "click"); + player.getActionSender().sendInventory(); + } + + /** + * @return if the player has the given InvItem + */ + public boolean hasItem(Player player, InvItem... items) { + boolean has = true; + + for (InvItem i : items) { + if (!player.getInventory().hasItemId(i.getID())) { + has = false; + break; + } + } + + return has; + } + + /** + * @return if the player has the given item ids + */ + public boolean hasItem(Player player, int... items) { + boolean has = true; + + for (int i : items) { + if (!player.getInventory().hasItemId(i)) { + has = false; + break; + } + } + + return has; + } + + /** + * @return the amount of the given item the player has + */ + public int countItem(Player player, InvItem item) { + return player.getInventory().countId(item.getID()); + } + + /** + * @return the amount of the given item id the player has + */ + public int countItem(Player player, int id) { + return player.getInventory().countId(id); + } + + /** + * @return if the player has the given item in his inventory, bank or if + * it's on the ground somewhere + */ + public boolean hasItemAbs(Player player, int id) { + if (player.getInventory().hasItemId(id)) + return true; + + if (player.getBank().hasItemId(id)) + return true; + + ActiveTile[][] tiles = player.getViewArea().getViewedArea(20, 20, 20, + 20); + for (int x = 0; x < tiles.length; x++) { + for (int y = 0; y < tiles[x].length; y++) { + ActiveTile t = tiles[x][y]; + if (t != null) { + for (Item i : t.getItems()) { + if (i.getID() == id) { + if (i.getOwner().equals(player)) + return true; + } + } + } + } + } + + return false; + } + + /** + * Sets this quest's stage + */ + public void setStage(Player player, int stage) { + player.setQuestStage(getUniqueID(), stage); + } + + /** + * @return this quest's stage + */ + public int getQuestStage(Player player) { + return player.getQuestStage(getUniqueID()); + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/quest/QuestAction.java b/GameServer/src/org/moparscape/msc/gs/quest/QuestAction.java index b9d96ab..49ad45b 100644 --- a/GameServer/src/org/moparscape/msc/gs/quest/QuestAction.java +++ b/GameServer/src/org/moparscape/msc/gs/quest/QuestAction.java @@ -4,21 +4,28 @@ package org.moparscape.msc.gs.quest; * Handles the list of possible quest triggers */ public enum QuestAction { - KILLED_NPC("The player killed a NPC", 0), TALKED_NPC("The player talked to a NPC", 1), USED_OBJECT("The player used an object", 2), USED_ITEM("The player used an inventory item", 3), ITEM_PICKED_UP("The player picked up an item", 4), ITEM_USED_ON_OBJECT("The player used an item on an object", 5), ITEM_USED_ON_ITEM("The player used an item on another item", 6), ATTACKED_NPC("The player attacked an NPC", 7); + KILLED_NPC("The player killed a NPC", 0), TALKED_NPC( + "The player talked to a NPC", 1), USED_OBJECT( + "The player used an object", 2), USED_ITEM( + "The player used an inventory item", 3), ITEM_PICKED_UP( + "The player picked up an item", 4), ITEM_USED_ON_OBJECT( + "The player used an item on an object", 5), ITEM_USED_ON_ITEM( + "The player used an item on another item", 6), ATTACKED_NPC( + "The player attacked an NPC", 7); - private String description = ""; - private int id = -1; + private String description = ""; + private int id = -1; - public String toString() { - return description + " (id " + id + ")"; - } + public String toString() { + return description + " (id " + id + ")"; + } - public int getID() { - return id; - } + public int getID() { + return id; + } - private QuestAction(String description, int id) { - this.description = description; - this.id = id; - } + private QuestAction(String description, int id) { + this.description = description; + this.id = id; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/quest/QuestEvent.java b/GameServer/src/org/moparscape/msc/gs/quest/QuestEvent.java index 002e18e..882021d 100644 --- a/GameServer/src/org/moparscape/msc/gs/quest/QuestEvent.java +++ b/GameServer/src/org/moparscape/msc/gs/quest/QuestEvent.java @@ -11,84 +11,86 @@ import org.moparscape.msc.gs.model.Player; * @author punKrockeR */ public class QuestEvent extends DelayedEvent { - // The quest action - private QuestAction action = null; - // The quest parameters - private Object[] args = null; - // The quest itself - private Quest quest = null; + // The quest action + private QuestAction action = null; + // The quest parameters + private Object[] args = null; + // The quest itself + private Quest quest = null; - /** - * Defines a new quest event with an instant delay time (-1) - */ - public QuestEvent(final QuestAction action, final Object[] args, final Player player, final Quest quest) { - super(player, -1); - this.action = action; - this.args = args; - this.quest = quest; - } - - /** - * Runs the event and stops itself from running again - */ - public void run() { - super.matchRunning = false; - - final Thread t = new Thread(new Runnable() { - public void run() { - try { - quest.handleAction(action, args, owner); - } catch (java.util.ConcurrentModificationException cme) { - } catch (Exception e) { - e.printStackTrace(); - } - } - }, new String("qt-" + getIdentifier())); - - quest.setThread(t); - t.start(); - } - - /** - * @return this quest event's action type - */ - public QuestAction getAction() { - return action; - } - - /** - * @return this quest event's args - */ - public Object[] getArgs() { - return args; - } - - /** - * @return this quest event's quest - */ - public Quest getQuest() { - return quest; - } - - /** - * @return this event's identifer - */ - public Object getIdentifier() { - if (quest == null || action == null) - return null; - - return new String(quest.getUniqueID() + "-" + action.getID() + "-" + owner.getUsernameHash()); - } - - /** - * @return if this quest event is identical to the given quest event - */ - public boolean equals(QuestEvent event) { - if (event != null) { - if (event.getIdentifier() == this.getIdentifier()) - return true; + /** + * Defines a new quest event with an instant delay time (-1) + */ + public QuestEvent(final QuestAction action, final Object[] args, + final Player player, final Quest quest) { + super(player, -1); + this.action = action; + this.args = args; + this.quest = quest; } - return false; - } + /** + * Runs the event and stops itself from running again + */ + public void run() { + super.matchRunning = false; + + final Thread t = new Thread(new Runnable() { + public void run() { + try { + quest.handleAction(action, args, owner); + } catch (java.util.ConcurrentModificationException cme) { + } catch (Exception e) { + e.printStackTrace(); + } + } + }, new String("qt-" + getIdentifier())); + + quest.setThread(t); + t.start(); + } + + /** + * @return this quest event's action type + */ + public QuestAction getAction() { + return action; + } + + /** + * @return this quest event's args + */ + public Object[] getArgs() { + return args; + } + + /** + * @return this quest event's quest + */ + public Quest getQuest() { + return quest; + } + + /** + * @return this event's identifer + */ + public Object getIdentifier() { + if (quest == null || action == null) + return null; + + return new String(quest.getUniqueID() + "-" + action.getID() + "-" + + owner.getUsernameHash()); + } + + /** + * @return if this quest event is identical to the given quest event + */ + public boolean equals(QuestEvent event) { + if (event != null) { + if (event.getIdentifier() == this.getIdentifier()) + return true; + } + + return false; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/quest/QuestEventManager.java b/GameServer/src/org/moparscape/msc/gs/quest/QuestEventManager.java index fe519c2..28464e4 100644 --- a/GameServer/src/org/moparscape/msc/gs/quest/QuestEventManager.java +++ b/GameServer/src/org/moparscape/msc/gs/quest/QuestEventManager.java @@ -7,7 +7,6 @@ import org.moparscape.msc.gs.event.DelayedEvent; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.util.Logger; - /** * Version: 17/5/2009 * @@ -16,110 +15,112 @@ import org.moparscape.msc.gs.util.Logger; * @author punKrockeR */ public final class QuestEventManager { - // The quest events queued for adding - private Vector toAdd = null; - // The quest events list - private Vector events = null; - // Is this event manager currently processing? - private boolean running = true; + // The quest events queued for adding + private Vector toAdd = null; + // The quest events list + private Vector events = null; + // Is this event manager currently processing? + private boolean running = true; - /** - * Contructs a new QuestEvent handler with the given initial array size - */ - public QuestEventManager(int initialCapacity) { - toAdd = new Vector(initialCapacity); - events = new Vector(initialCapacity); - } - - /** - * @return if the event handler contains the given event - */ - public boolean contains(DelayedEvent event) { - return events.contains(event); - } - - /** - * @return the list of existing events - */ - public Vector getEvents() { - return events; - } - - /** - * Adds the given event to the queue - * - * TODO: Make sure this is bugless - */ - public void add(QuestEvent event) { - if (!events.contains(event) && !toAdd.contains(event)) - toAdd.add(event); - } - - /** - * Removes the given event from the list - */ - public void remove(QuestEvent event) { - events.remove(event); - } - - /** - * Removes any of the given player's events - */ - public void removePlayersEvents(Player player) { - try { - Iterator iterator = events.iterator(); - while (iterator.hasNext()) { - QuestEvent event = iterator.next(); - if (event.belongsTo(player)) - iterator.remove(); - } - } catch (Exception e) { - Logger.println("Error @ removePlayer, IP address: " + player.getCurrentIP() + " Name: " + player.getUsername() + " message : " + e.getMessage()); + /** + * Contructs a new QuestEvent handler with the given initial array size + */ + public QuestEventManager(int initialCapacity) { + toAdd = new Vector(initialCapacity); + events = new Vector(initialCapacity); } - } + /** + * @return if the event handler contains the given event + */ + public boolean contains(DelayedEvent event) { + return events.contains(event); + } - /** - * Processes all the events in the queues - */ - public void process() { - if (!running) - return; + /** + * @return the list of existing events + */ + public Vector getEvents() { + return events; + } - try { - if (toAdd.size() > 0) { - events.addAll(toAdd); + /** + * Adds the given event to the queue + * + * TODO: Make sure this is bugless + */ + public void add(QuestEvent event) { + if (!events.contains(event) && !toAdd.contains(event)) + toAdd.add(event); + } + + /** + * Removes the given event from the list + */ + public void remove(QuestEvent event) { + events.remove(event); + } + + /** + * Removes any of the given player's events + */ + public void removePlayersEvents(Player player) { + try { + Iterator iterator = events.iterator(); + while (iterator.hasNext()) { + QuestEvent event = iterator.next(); + if (event.belongsTo(player)) + iterator.remove(); + } + } catch (Exception e) { + Logger.println("Error @ removePlayer, IP address: " + + player.getCurrentIP() + " Name: " + player.getUsername() + + " message : " + e.getMessage()); + } + + } + + /** + * Processes all the events in the queues + */ + public void process() { + if (!running) + return; + + try { + if (toAdd.size() > 0) { + events.addAll(toAdd); + toAdd.clear(); + } + + Iterator iterator = events.iterator(); + while (iterator.hasNext()) { + QuestEvent event = iterator.next(); + + if (event == null) { + iterator.remove(); + continue; + } + + if (event.shouldRun()) { + event.run(); + event.updateLastRun(); + } + + if (event.shouldRemove()) + iterator.remove(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Kills this event manager + */ + public void kill() { + running = false; toAdd.clear(); - } - - Iterator iterator = events.iterator(); - while (iterator.hasNext()) { - QuestEvent event = iterator.next(); - - if (event == null) { - iterator.remove(); - continue; - } - - if (event.shouldRun()) { - event.run(); - event.updateLastRun(); - } - - if (event.shouldRemove()) - iterator.remove(); - } - } catch (Exception e) { - e.printStackTrace(); + events.clear(); } - } - - /** - * Kills this event manager - */ - public void kill() { - running = false; - toAdd.clear(); - events.clear(); - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/quest/QuestManager.java b/GameServer/src/org/moparscape/msc/gs/quest/QuestManager.java index e31a971..56d8ca4 100644 --- a/GameServer/src/org/moparscape/msc/gs/quest/QuestManager.java +++ b/GameServer/src/org/moparscape/msc/gs/quest/QuestManager.java @@ -1,7 +1,6 @@ package org.moparscape.msc.gs.quest; import java.io.File; -import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Enumeration; @@ -9,7 +8,6 @@ import java.util.Vector; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import org.moparscape.msc.config.Config; import org.moparscape.msc.gs.core.GameEngine; import org.moparscape.msc.gs.model.GameObject; import org.moparscape.msc.gs.model.InvItem; @@ -19,379 +17,397 @@ import org.moparscape.msc.gs.model.Npc; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.util.Logger; - /** * Manages the loading and execution of quests TODO: add quest error handling? * * @author punKrockeR */ public class QuestManager { - // Holds loaded quests - private static Vector quests = null; - // Holds the list of quest ids - private static Vector questIds = null; - // The quest events handler - private static final QuestEventManager questEventManager = new QuestEventManager(50); - // The quest events handler condition - private static boolean running = true; + // Holds loaded quests + private static Vector quests = null; + // Holds the list of quest ids + private static Vector questIds = null; + // The quest events handler + private static final QuestEventManager questEventManager = new QuestEventManager( + 50); + // The quest events handler condition + private static boolean running = true; - /** - * Constructs a new quest manager - */ - public QuestManager() { - final Thread eventHandler = new Thread(new Runnable() { - public void run() { - while (running) { - try { - questEventManager.process(); - try { - Thread.sleep(100); - } catch (Exception e) { + /** + * Constructs a new quest manager + */ + public QuestManager() { + final Thread eventHandler = new Thread(new Runnable() { + public void run() { + while (running) { + try { + questEventManager.process(); + try { + Thread.sleep(100); + } catch (Exception e) { + } + } catch (Exception error) { + Logger.println("\n\nQUEST MANAGER EVENT HANDLER ERROR:\n\n"); + error.printStackTrace(); + } + } } - } catch (Exception error) { - Logger.println("\n\nQUEST MANAGER EVENT HANDLER ERROR:\n\n"); - error.printStackTrace(); - } - } - } - }, "QuestManager.EventHandler"); + }, "QuestManager.EventHandler"); - eventHandler.start(); - } - - /** - * Kills the quest manager - */ - public void kill() { - running = false; - questEventManager.kill(); - } - - public static ArrayList questz = new ArrayList(); - - public static void getClassesFromFileJarFile(String pckgname, String baseDirPath) throws ClassNotFoundException { - ArrayList classes = new ArrayList(); - String path = pckgname.replace('.', '/') + "/"; - File mF = new File(baseDirPath); - String[] files = mF.list(); - ArrayList jars = new ArrayList(); - for (int i = 0; i < files.length; i++) - if (files[i].endsWith(".jar")) - jars.add(files[i]); - - for (int i = 0; i < jars.size(); i++) { - try { - JarFile currentFile = new JarFile(jars.get(i).toString()); - for (Enumeration e = currentFile.entries(); e.hasMoreElements();) { - JarEntry current = (JarEntry) e.nextElement(); - if (current.getName().contains("$")) - continue; - if (current.getName().length() > path.length() && current.getName().substring(0, path.length()).equals(path) && current.getName().endsWith(".class")) - classes.add(Class.forName(current.getName().replaceAll("/", ".").replace(".class", ""))); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - Class[] classesA = new Class[classes.size()]; - classes.toArray(classesA); - for (Class c : classesA) { - questz.add(c); + eventHandler.start(); } - } + /** + * Kills the quest manager + */ + public void kill() { + running = false; + questEventManager.kill(); + } - /** - * @return if the quests were loaded successfully or not - */ - public final boolean loadQuests() { - try { - long start = GameEngine.getTime(); + public static ArrayList> questz = new ArrayList>(); - if (quests != null) - quests.clear(); - if (questIds != null) - questIds.clear(); + public static void getClassesFromFileJarFile(String pckgname, + String baseDirPath) throws ClassNotFoundException { + ArrayList> classes = new ArrayList>(); + String path = pckgname.replace('.', '/') + "/"; + File mF = new File(baseDirPath); + String[] files = mF.list(); + ArrayList jars = new ArrayList(); + for (int i = 0; i < files.length; i++) + if (files[i].endsWith(".jar")) + jars.add(files[i]); - /* - * File questDir = new File("src/org.moparscape.msc/gs/plugins/quests/"); - * - * if(questDir == null || !questDir.exists()) throw new - * Exception("Quests directory " + questDir.getAbsolutePath() + - * " does not exist!"); - * - * // List valid .class files File[] questFiles = - * questDir.listFiles(new FilenameFilter() { - * - * @Override public boolean accept(File dir, String name) { return - * name.endsWith(".class") && name.indexOf("$") <= -1; } }); - */ - getClassesFromFileJarFile("org.moparscape.msc.gs.plugins.quests", System.getProperty("user.dir")); - quests = new Vector(questz.size()); - questIds = new Vector(questz.size()); - int questCount = 0; + for (int i = 0; i < jars.size(); i++) { + try { + JarFile currentFile = new JarFile(jars.get(i).toString()); + for (Enumeration e = currentFile.entries(); e + .hasMoreElements();) { + JarEntry current = (JarEntry) e.nextElement(); + if (current.getName().contains("$")) + continue; + if (current.getName().length() > path.length() + && current.getName().substring(0, path.length()) + .equals(path) + && current.getName().endsWith(".class")) + classes.add(Class.forName(current.getName() + .replaceAll("/", ".").replace(".class", ""))); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + Class[] classesA = new Class[classes.size()]; + classes.toArray(classesA); + for (Class c : classesA) { + questz.add(c); + } - for (Class quest : questz) { + } + + /** + * @return if the quests were loaded successfully or not + */ + public final boolean loadQuests() { try { - String name = quest.getName(); // Remove .class ext - // Class c = Class.forName(name); - Quest script = (Quest) quest.getConstructor().newInstance(); - if (!script.loadQuest()) { - Logger.println("Broken Quest: " + quest); - continue; - } + long start = GameEngine.getTime(); - name = name.trim().toLowerCase(); - script.init(); - questIds.add(script.getUniqueID()); - quests.add(script); - questCount++; - } catch (Exception e2) { - e2.printStackTrace(); - Logger.println("Quest file \"" + quest.getName() + "\" skipped due to load failure."); + if (quests != null) + quests.clear(); + if (questIds != null) + questIds.clear(); + + /* + * File questDir = new + * File("src/org.moparscape.msc/gs/plugins/quests/"); + * + * if(questDir == null || !questDir.exists()) throw new + * Exception("Quests directory " + questDir.getAbsolutePath() + + * " does not exist!"); + * + * // List valid .class files File[] questFiles = + * questDir.listFiles(new FilenameFilter() { + * + * @Override public boolean accept(File dir, String name) { return + * name.endsWith(".class") && name.indexOf("$") <= -1; } }); + */ + getClassesFromFileJarFile("org.moparscape.msc.gs.plugins.quests", + System.getProperty("user.dir")); + quests = new Vector(questz.size()); + questIds = new Vector(questz.size()); + int questCount = 0; + + for (Class quest : questz) { + try { + String name = quest.getName(); // Remove .class ext + // Class c = Class.forName(name); + Quest script = (Quest) quest.getConstructor().newInstance(); + if (!script.loadQuest()) { + Logger.println("Broken Quest: " + quest); + continue; + } + + name = name.trim().toLowerCase(); + script.init(); + questIds.add(script.getUniqueID()); + quests.add(script); + questCount++; + } catch (Exception e2) { + e2.printStackTrace(); + Logger.println("Quest file \"" + quest.getName() + + "\" skipped due to load failure."); + } + } + + Logger.println("Loaded " + questCount + " quests successfully (" + + (GameEngine.getTime() - start) + "ms)"); + } catch (Exception e) { + e.printStackTrace(); + return false; } - } - Logger.println("Loaded " + questCount + " quests successfully (" + (GameEngine.getTime() - start) + "ms)"); - } catch (Exception e) { - e.printStackTrace(); - return false; + return true; } - return true; - } - - /** - * @return all quests - */ - @SuppressWarnings("unchecked") + /** + * @return all quests + */ + @SuppressWarnings("unchecked") public Vector getQuests() { - return (Vector) quests.clone(); - } - - /** - * @return the Quest with the given uid - */ - public Quest getQuestById(int id) { - for (Quest q : quests) { - if (q.getUniqueID() == id) - return q; + return (Vector) quests.clone(); } - return null; - } + /** + * @return the Quest with the given uid + */ + public Quest getQuestById(int id) { + for (Quest q : quests) { + if (q.getUniqueID() == id) + return q; + } - /** - * @return quest ids - */ - public Vector getQuestIds() { - return questIds; - } - - /** - * @return how many quests there are - */ - public int getQuestCount() { - return quests.size(); - } - - /** - * Triggers the quest action - */ - public synchronized void handleAction(final QuestAction action, final Object[] args, final Player player) { - for (final Quest quest : quests) - questEventManager.add(new QuestEvent(action, args, player, quest)); - } - - /** - * Triggers the quest action - */ - public void handleAction(QuestAction action, Object arg, Player player) { - handleAction(action, new Object[] { arg }, player); - } - - /** - * Triggers the quest action if necessary - */ - public boolean handleNpcTalk(Npc npc, Player player) { - boolean handled = false; - - for (Quest quest : quests) { - if (quest.isNpcAssociated(npc.getID(), player)) { - handleAction(QuestAction.TALKED_NPC, npc, player); - handled = true; - } + return null; } - return handled; - } - - /** - * Triggers the quest action if necessary - */ - public boolean handleNpcAttack(Npc npc, Player player) { - boolean handled = false; - - for (Quest quest : quests) { - if (quest.isNpcAssociated(npc.getID(), player)) { - handleAction(QuestAction.ATTACKED_NPC, npc, player); - handled = true; - } + /** + * @return quest ids + */ + public Vector getQuestIds() { + return questIds; } - return handled; - } - - /** - * Triggers the quest action if necessary - */ - public boolean handleItemPickup(InvItem item, Player player) { - boolean handled = false; - - for (Quest quest : quests) { - if (quest.isItemAssociated(item.getID(), player)) { - handleAction(QuestAction.ITEM_PICKED_UP, item, player); - handled = true; - } + /** + * @return how many quests there are + */ + public int getQuestCount() { + return quests.size(); } - return handled; - } - - /** - * Triggers the quest action if necessary - */ - public boolean handleUseItemOnObject(InvItem item, GameObject object, Player player) { - boolean handled = false; - - for (Quest quest : quests) { - Logger.println("Trying " + quest.getName()); - - if (quest.isObjectAssociated(object, player)) { - Logger.println(" Object " + object.getID() + " is associated"); - handleAction(QuestAction.ITEM_USED_ON_OBJECT, new Object[] { item, object }, player); - handled = true; - } + /** + * Triggers the quest action + */ + public synchronized void handleAction(final QuestAction action, + final Object[] args, final Player player) { + for (final Quest quest : quests) + questEventManager.add(new QuestEvent(action, args, player, quest)); } - return handled; - } - - /** - * Triggers the quest action if necessary - */ - public boolean handleUseItemOnItem(InvItem item1, InvItem item2, Player player) { - boolean handled = false; - - for (Quest quest : quests) { - if (quest.isItemAssociated(item1.getID(), player) || quest.isItemAssociated(item2.getID(), player)) { - handleAction(QuestAction.ITEM_USED_ON_ITEM, new Object[] { item1, item2 }, player); - handled = true; - } + /** + * Triggers the quest action + */ + public void handleAction(QuestAction action, Object arg, Player player) { + handleAction(action, new Object[] { arg }, player); } - return handled; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleNpcTalk(Npc npc, Player player) { + boolean handled = false; - /** - * Triggers the quest action if necessary - */ - public boolean handleNpcKilled(Npc npc, Player player) { - boolean handled = false; + for (Quest quest : quests) { + if (quest.isNpcAssociated(npc.getID(), player)) { + handleAction(QuestAction.TALKED_NPC, npc, player); + handled = true; + } + } - for (Quest quest : quests) { - if (quest.isNpcAssociated(npc.getID(), player)) { - handleAction(QuestAction.KILLED_NPC, npc, player); - handled = true; - } + return handled; } - return handled; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleNpcAttack(Npc npc, Player player) { + boolean handled = false; - /** - * Triggers the quest action if necessary - */ - public boolean handleUseItem(InvItem item, Player player) { - boolean handled = false; + for (Quest quest : quests) { + if (quest.isNpcAssociated(npc.getID(), player)) { + handleAction(QuestAction.ATTACKED_NPC, npc, player); + handled = true; + } + } - for (Quest quest : quests) { - if (quest.isItemAssociated(item.getID(), player)) { - handleAction(QuestAction.USED_ITEM, item, player); - handled = true; - } + return handled; } - return handled; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleItemPickup(InvItem item, Player player) { + boolean handled = false; - /** - * Triggers the quest action if necessary - */ - public boolean handleObject(GameObject object, Player player, boolean click) { - boolean handled = false; + for (Quest quest : quests) { + if (quest.isItemAssociated(item.getID(), player)) { + handleAction(QuestAction.ITEM_PICKED_UP, item, player); + handled = true; + } + } - for (Quest quest : quests) { - if (quest.isObjectAssociated(object, player)) { - handleAction(QuestAction.USED_OBJECT, new Object[] { object, click }, player); - handled = true; - } + return handled; } - return handled; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleUseItemOnObject(InvItem item, GameObject object, + Player player) { + boolean handled = false; - /** - * @return if the given npc is associated with a quest - */ - public boolean isNpcAssociated(Mob mob, Player player) { - if (!(mob instanceof Npc)) - return false; + for (Quest quest : quests) { + Logger.println("Trying " + quest.getName()); - Npc npc = (Npc) mob; - boolean associated = false; + if (quest.isObjectAssociated(object, player)) { + Logger.println(" Object " + object.getID() + + " is associated"); + handleAction(QuestAction.ITEM_USED_ON_OBJECT, new Object[] { + item, object }, player); + handled = true; + } + } - for (Quest quest : quests) { - if (quest.isNpcAssociated(npc.getID(), player)) - associated = true; + return handled; } - return associated; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleUseItemOnItem(InvItem item1, InvItem item2, + Player player) { + boolean handled = false; - /** - * @return if the given npc is visible - */ - public boolean isNpcVisible(Npc npc, Player player) { - for (Quest quest : quests) { - if (quest.isNpcAssociated(npc.getID(), player)) - return quest.isNpcVisible(npc, player); + for (Quest quest : quests) { + if (quest.isItemAssociated(item1.getID(), player) + || quest.isItemAssociated(item2.getID(), player)) { + handleAction(QuestAction.ITEM_USED_ON_ITEM, new Object[] { + item1, item2 }, player); + handled = true; + } + } + + return handled; } - return true; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleNpcKilled(Npc npc, Player player) { + boolean handled = false; - /** - * @return if the given npc is shootable - */ - public boolean isNpcShootable(Npc npc, Player player) { - for (Quest quest : quests) { - if (quest.isNpcAssociated(npc.getID(), player)) - return quest.isNpcShootable(npc, player); + for (Quest quest : quests) { + if (quest.isNpcAssociated(npc.getID(), player)) { + handleAction(QuestAction.KILLED_NPC, npc, player); + handled = true; + } + } + + return handled; } - return true; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleUseItem(InvItem item, Player player) { + boolean handled = false; - /** - * @return if the given item is visible - */ - public boolean isItemVisible(Item item, Player player) { - for (Quest quest : quests) { - if (quest.isItemAssociated(item.getID(), player)) - return quest.isItemVisible(item, player); + for (Quest quest : quests) { + if (quest.isItemAssociated(item.getID(), player)) { + handleAction(QuestAction.USED_ITEM, item, player); + handled = true; + } + } + + return handled; } - return true; - } + /** + * Triggers the quest action if necessary + */ + public boolean handleObject(GameObject object, Player player, boolean click) { + boolean handled = false; + + for (Quest quest : quests) { + if (quest.isObjectAssociated(object, player)) { + handleAction(QuestAction.USED_OBJECT, new Object[] { object, + click }, player); + handled = true; + } + } + + return handled; + } + + /** + * @return if the given npc is associated with a quest + */ + public boolean isNpcAssociated(Mob mob, Player player) { + if (!(mob instanceof Npc)) + return false; + + Npc npc = (Npc) mob; + boolean associated = false; + + for (Quest quest : quests) { + if (quest.isNpcAssociated(npc.getID(), player)) + associated = true; + } + + return associated; + } + + /** + * @return if the given npc is visible + */ + public boolean isNpcVisible(Npc npc, Player player) { + for (Quest quest : quests) { + if (quest.isNpcAssociated(npc.getID(), player)) + return quest.isNpcVisible(npc, player); + } + + return true; + } + + /** + * @return if the given npc is shootable + */ + public boolean isNpcShootable(Npc npc, Player player) { + for (Quest quest : quests) { + if (quest.isNpcAssociated(npc.getID(), player)) + return quest.isNpcShootable(npc, player); + } + + return true; + } + + /** + * @return if the given item is visible + */ + public boolean isItemVisible(Item item, Player player) { + for (Quest quest : quests) { + if (quest.isItemAssociated(item.getID(), player)) + return quest.isItemVisible(item, player); + } + + return true; + } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/states/Action.java b/GameServer/src/org/moparscape/msc/gs/states/Action.java index f5dc13d..a32f7f8 100644 --- a/GameServer/src/org/moparscape/msc/gs/states/Action.java +++ b/GameServer/src/org/moparscape/msc/gs/states/Action.java @@ -2,7 +2,19 @@ package org.moparscape.msc.gs.states; public enum Action { - AGILITYING("Performing an agility obstacle"), ATTACKING_MOB("Attacking an NPC or Player"), CASTING_GITEM("Casting a Spell on a Ground Item"), CASTING_MOB("Casting a Spell on an NPC or Player"), DROPPING_GITEM("Dropping an Item"), DUELING_PLAYER("Dueling with another player"), FIGHTING_MOB("In combat with an NPC or Player"), IDLE("Idle or Walking"), RANGING_MOB("Ranging an NPC or Player"), TAKING_GITEM("Picking up an Item"), TALKING_MOB("Talking to an NPC"), USING_DOOR("Using a Door"), USING_INVITEM_ON_DOOR("Using an Item on a Door"), USING_INVITEM_ON_GITEM("Using an Item on a Ground Item"), USING_INVITEM_ON_NPC("Using an Item on an NPC"), USING_INVITEM_ON_OBJECT("Using an Item on an Object"), USING_INVITEM_ON_PLAYER("Using an Item on a Player"), USING_OBJECT("Using an Object"); + AGILITYING("Performing an agility obstacle"), ATTACKING_MOB( + "Attacking an NPC or Player"), CASTING_GITEM( + "Casting a Spell on a Ground Item"), CASTING_MOB( + "Casting a Spell on an NPC or Player"), DROPPING_GITEM( + "Dropping an Item"), DUELING_PLAYER("Dueling with another player"), FIGHTING_MOB( + "In combat with an NPC or Player"), IDLE("Idle or Walking"), RANGING_MOB( + "Ranging an NPC or Player"), TAKING_GITEM("Picking up an Item"), TALKING_MOB( + "Talking to an NPC"), USING_DOOR("Using a Door"), USING_INVITEM_ON_DOOR( + "Using an Item on a Door"), USING_INVITEM_ON_GITEM( + "Using an Item on a Ground Item"), USING_INVITEM_ON_NPC( + "Using an Item on an NPC"), USING_INVITEM_ON_OBJECT( + "Using an Item on an Object"), USING_INVITEM_ON_PLAYER( + "Using an Item on a Player"), USING_OBJECT("Using an Object"); private String description; Action(String description) { diff --git a/GameServer/src/org/moparscape/msc/gs/states/CombatState.java b/GameServer/src/org/moparscape/msc/gs/states/CombatState.java index 8dd9925..2351fe3 100644 --- a/GameServer/src/org/moparscape/msc/gs/states/CombatState.java +++ b/GameServer/src/org/moparscape/msc/gs/states/CombatState.java @@ -1,11 +1,10 @@ package org.moparscape.msc.gs.states; - public enum CombatState { - ERROR, // Can be attacked - LOST, - // Can be attacked, // Can't be attacked - RUNNING, // Can be attacked - WAITING, // Can be attacked - WON + ERROR, // Can be attacked + LOST, + // Can be attacked, // Can't be attacked + RUNNING, // Can be attacked + WAITING, // Can be attacked + WON } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/tools/Captcha.java b/GameServer/src/org/moparscape/msc/gs/tools/Captcha.java index a82ec6f..e70b889 100644 --- a/GameServer/src/org/moparscape/msc/gs/tools/Captcha.java +++ b/GameServer/src/org/moparscape/msc/gs/tools/Captcha.java @@ -5,19 +5,17 @@ import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Random; + import javax.imageio.ImageIO; import org.moparscape.msc.gs.model.Player; import org.moparscape.msc.gs.util.Logger; - public class Captcha { /* * ArrayList that includes the preset colours. @@ -31,7 +29,8 @@ public class Captcha { /* * String that represents the folder to load the fonts from */ - public String fontFolder = "." + File.separator + "conf" + File.separator + "fonts" + File.separator; + public String fontFolder = "." + File.separator + "conf" + File.separator + + "fonts" + File.separator; private final int LETTERS_MAX = 5; private final int LETTERS_MIN = 4; private final int LINES_MAX = 10; @@ -54,15 +53,14 @@ public class Captcha { public boolean verboseLoad = false; public byte[] generateCaptcha(Player p) { - BufferedImage image = new BufferedImage(307, 49, BufferedImage.TYPE_INT_RGB); + BufferedImage image = new BufferedImage(307, 49, + BufferedImage.TYPE_INT_RGB); Graphics2D gfx = image.createGraphics(); String captcha = ""; gfx.setColor(Color.white); gfx.fillRect(0, 0, 308, 52); - - int howManyLetters = random(LETTERS_MIN, LETTERS_MAX); for (int i = 1; i <= howManyLetters; i++) { char temp = generateLetter(); @@ -74,17 +72,18 @@ public class Captcha { gfx.setFont(loadedFonts[random(0, loadedFonts.length - 1)]); double shear = (rand.nextDouble()) - 0.5; gfx.shear(shear, 0); - gfx.drawString(String.valueOf(temp), i * random(40, 45), random(30, 40)); + gfx.drawString(String.valueOf(temp), i * random(40, 45), + random(30, 40)); gfx.shear(-shear, 0); } - int howManySquares = random(SQUARES_MIN, SQUARES_MAX); for (int i = 0; i < howManySquares; i++) // Draw the squares, math by // xEnt. { gfx.setColor(colors.get(random(0, colors.size() - 1))); - gfx.drawRect((int) random(0, image.getWidth() - 80), (int) random(0, image.getHeight()), 3, 3); + gfx.drawRect((int) random(0, image.getWidth() - 80), + (int) random(0, image.getHeight()), 3, 3); } int howManyLines = random(LINES_MIN, LINES_MAX); @@ -111,8 +110,9 @@ public class Captcha { try { ImageIO.write(image, "PNG", baos); returnVal = baos.toByteArray(); - //DataOutputStream out = new DataOutputStream(new FileOutputStream("newcaptchas/" + captcha + ".png")); - //out.write(returnVal); + // DataOutputStream out = new DataOutputStream(new + // FileOutputStream("newcaptchas/" + captcha + ".png")); + // out.write(returnVal); } catch (IOException e) { e.printStackTrace(); } @@ -155,11 +155,14 @@ public class Captcha { loadedFonts = new Font[fonts.length]; for (int i = 0; i < fonts.length; i++) { try { - FileInputStream fontStream = new FileInputStream(fontFolder + fonts[i]); - Font temp = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, fontStream); + FileInputStream fontStream = new FileInputStream(fontFolder + + fonts[i]); + Font temp = java.awt.Font.createFont( + java.awt.Font.TRUETYPE_FONT, fontStream); loadedFonts[i] = temp.deriveFont(Float.valueOf(random(35, 40))); if (verboseLoad) { - Logger.println("Loaded font: " + loadedFonts[i].getFontName()); + Logger.println("Loaded font: " + + loadedFonts[i].getFontName()); } } catch (Exception e) { e.printStackTrace(); diff --git a/GameServer/src/org/moparscape/msc/gs/tools/DataConversions.java b/GameServer/src/org/moparscape/msc/gs/tools/DataConversions.java index 1c972f4..0e8a43a 100644 --- a/GameServer/src/org/moparscape/msc/gs/tools/DataConversions.java +++ b/GameServer/src/org/moparscape/msc/gs/tools/DataConversions.java @@ -14,392 +14,404 @@ import org.moparscape.msc.gs.core.GameEngine; import org.moparscape.msc.gs.model.Point; import org.moparscape.msc.gs.util.Logger; - import com.bombaydigital.vault.HexString; public final class DataConversions { - private static char characters[] = { ' ', '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', '$', '%', '"', '[', ']' }; - private static SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss dd-MM-yy"); - private static final BigInteger key = new BigInteger("730546719878348732291497161314617369560443701473303681965331739205703475535302276087891130348991033265134162275669215460061940182844329219743687403068279"); - private static MessageDigest md; - private static final BigInteger modulus = new BigInteger("1549611057746979844352781944553705273443228154042066840514290174539588436243191882510185738846985723357723362764835928526260868977814405651690121789896823"); - private static Random rand = new Random(); + private static char characters[] = { ' ', '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', '$', '%', + '"', '[', ']' }; + private static SimpleDateFormat formatter = new SimpleDateFormat( + "HH:mm:ss dd-MM-yy"); + private static final BigInteger key = new BigInteger( + "730546719878348732291497161314617369560443701473303681965331739205703475535302276087891130348991033265134162275669215460061940182844329219743687403068279"); + private static MessageDigest md; + private static final BigInteger modulus = new BigInteger( + "1549611057746979844352781944553705273443228154042066840514290174539588436243191882510185738846985723357723362764835928526260868977814405651690121789896823"); + private static Random rand = new Random(); - /** - * Creates an instance of the message digest used for creating md5 hashes - */ - static { - try { - md = MessageDigest.getInstance("MD5"); - } catch (Exception e) { - Logger.error(e); - } - } - - /** - * Calculates the average of all values in the array - */ - public static int average(int[] values) { - int total = 0; - for (int value : values) { - total += value; - } - return (int) (total / values.length); - } - - /** - * Decodes a byte array back into a string - */ - public static String byteToString(byte[] data, int offset, int length) { - char[] buffer = new char[100]; - try { - int k = 0; - int l = -1; - for (int i1 = 0; i1 < length; i1++) { - int j1 = data[offset++] & 0xff; - int k1 = j1 >> 4 & 0xf; - if (l == -1) { - if (k1 < 13) { - buffer[k++] = characters[k1]; - } else { - l = k1; - } - } else { - buffer[k++] = characters[((l << 4) + k1) - 195]; - l = -1; + /** + * Creates an instance of the message digest used for creating md5 hashes + */ + static { + try { + md = MessageDigest.getInstance("MD5"); + } catch (Exception e) { + Logger.error(e); } - k1 = j1 & 0xf; - if (l == -1) { - if (k1 < 13) { - buffer[k++] = characters[k1]; - } else { - l = k1; - } - } else { - buffer[k++] = characters[((l << 4) + k1) - 195]; - l = -1; + } + + /** + * Calculates the average of all values in the array + */ + public static int average(int[] values) { + int total = 0; + for (int value : values) { + total += value; } - } - boolean flag = true; - for (int l1 = 0; l1 < k; l1++) { - char c = buffer[l1]; - if (l1 > 4 && c == '@') { - buffer[l1] = ' '; + return (int) (total / values.length); + } + + /** + * Decodes a byte array back into a string + */ + public static String byteToString(byte[] data, int offset, int length) { + char[] buffer = new char[100]; + try { + int k = 0; + int l = -1; + for (int i1 = 0; i1 < length; i1++) { + int j1 = data[offset++] & 0xff; + int k1 = j1 >> 4 & 0xf; + if (l == -1) { + if (k1 < 13) { + buffer[k++] = characters[k1]; + } else { + l = k1; + } + } else { + buffer[k++] = characters[((l << 4) + k1) - 195]; + l = -1; + } + k1 = j1 & 0xf; + if (l == -1) { + if (k1 < 13) { + buffer[k++] = characters[k1]; + } else { + l = k1; + } + } else { + buffer[k++] = characters[((l << 4) + k1) - 195]; + l = -1; + } + } + boolean flag = true; + for (int l1 = 0; l1 < k; l1++) { + char c = buffer[l1]; + if (l1 > 4 && c == '@') { + buffer[l1] = ' '; + } + if (c == '%') { + buffer[l1] = ' '; + } + if (flag && c >= 'a' && c <= 'z') { + buffer[l1] += '\uFFE0'; + flag = false; + } + if (c == '.' || c == '!' || c == ':') { + flag = true; + } + } + return new String(buffer, 0, k); + } catch (Exception e) { + return "."; } - if (c == '%') { - buffer[l1] = ' '; + } + + /** + * Decrypts an RSA encrypted packet using our private key + */ + public static RSCPacket decryptRSA(byte[] pData) { + try { + BigInteger bigInteger = new BigInteger(pData); + pData = bigInteger.modPow(key, modulus).toByteArray(); + return new RSCPacket(null, 0, pData, true); + } catch (Exception e) { + return null; } - if (flag && c >= 'a' && c <= 'z') { - buffer[l1] += '\uFFE0'; - flag = false; + } + + /** + * returns the code used to represent the given character in our byte array + * encoding methods + */ + private static int getCharCode(char c) { + for (int x = 0; x < characters.length; x++) { + if (c == characters[x]) { + return x; + } } - if (c == '.' || c == '!' || c == ':') { - flag = true; + return 0; + } + + private static byte getMobCoordOffset(int coord1, int coord2) { + byte offset = (byte) (coord1 - coord2); + if (offset < 0) { + offset += 32; } - } - return new String(buffer, 0, k); - } catch (Exception e) { - return "."; - } - } - - /** - * Decrypts an RSA encrypted packet using our private key - */ - public static RSCPacket decryptRSA(byte[] pData) { - try { - BigInteger bigInteger = new BigInteger(pData); - pData = bigInteger.modPow(key, modulus).toByteArray(); - return new RSCPacket(null, 0, pData, true); - } catch (Exception e) { - return null; - } - } - - /** - * returns the code used to represent the given character in our byte array - * encoding methods - */ - private static int getCharCode(char c) { - for (int x = 0; x < characters.length; x++) { - if (c == characters[x]) { - return x; - } - } - return 0; - } - - private static byte getMobCoordOffset(int coord1, int coord2) { - byte offset = (byte) (coord1 - coord2); - if (offset < 0) { - offset += 32; - } - return offset; - } - - public static byte[] getMobPositionOffsets(Point p1, Point p2) { - byte[] rv = new byte[2]; - rv[0] = getMobCoordOffset(p1.getX(), p2.getX()); - rv[1] = getMobCoordOffset(p1.getY(), p2.getY()); - return rv; - } - - private static byte getObjectCoordOffset(int coord1, int coord2) { - return (byte) (coord1 - coord2); - } - - public static byte[] getObjectPositionOffsets(Point p1, Point p2) { - byte[] rv = new byte[2]; - rv[0] = getObjectCoordOffset(p1.getX(), p2.getX()); - rv[1] = getObjectCoordOffset(p1.getY(), p2.getY()); - return rv; - } - - /** - * Returns the random number generator - */ - public static Random getRandom() { - return rand; - } - - /** - * Converts a usernames hash back to the username - */ - public static String hashToUsername(long l) { - if (l < 0L) - return "invalid_name"; - String s = ""; - while (l != 0L) { - int i = (int) (l % 37L); - l /= 37L; - if (i == 0) - s = " " + s; - else if (i < 27) { - if (l % 37L == 0L) - s = (char) ((i + 65) - 1) + s; - else - s = (char) ((i + 97) - 1) + s; - } else { - s = (char) ((i + 48) - 27) + s; - } - } - return s; - } - - /** - * Checks if the given int is in the array - */ - public static boolean inArray(int[] haystack, int needle) { - for (int option : haystack) { - if (needle == option) { - return true; - } - } - return false; - } - /** - * Checks if the given point is in the array - */ - public static boolean inPointArray(Point[] haystack, Point needle) { - for (Point option : haystack) { - if (needle.getX() == option.getX() && needle.getY() == option.getY()) { - return true; - } - } - return false; - } - public static long IPToLong(String ip) { - String[] octets = ip.split("\\."); - long result = 0L; - for (int x = 0; x < 4; x++) { - result += Integer.parseInt(octets[x]) * Math.pow(256, 3 - x); - } - return result; - } - - public static String IPToString(long ip) { - String result = "0.0.0.0"; - for (int x = 0; x < 4; x++) { - int octet = (int) (ip / Math.pow(256, 3 - x)); - ip -= octet * Math.pow(256, 3 - x); - if (x == 0) { - result = String.valueOf(octet); - } else { - result += ("." + octet); - } - } - return result; - } - - public static void main(String[] argv) throws Exception { - if (argv[0].equals("encode")) - Logger.println(usernameToHash(argv[1])); - if (argv[0].equals("decode")) - Logger.println(hashToUsername(Long.parseLong(argv[1]))); - } - - /** - * returns the max of the 2 values - */ - public static int max(int i1, int i2) { - return i1 > i2 ? i1 : i2; - } - - /** - * returns the md5 hash of a string - */ - public static String md5(String s) { - md.reset(); - md.update(s.getBytes()); - return HexString.bufferToHex(md.digest()); - } - - /** - * Returns true percent% of the time - */ - public static boolean percentChance(int percent) { - return random(1, 100) <= percent; - } - - /** - * returns a random number within the given bounds - */ - public static double random(double low, double high) { - return high - (rand.nextDouble() * low); - } - - /** - * returns a random number within the given bounds - */ - public static int random(int low, int high) { - return low + rand.nextInt(high - low + 1); - } - - /** - * returns a random number within the given bounds, but allows for certain - * values to be weighted - */ - public static int randomWeighted(int low, int dip, int peak, int max) { - int total = 0; - int probability = 100; - int[] probArray = new int[max + 1]; - for (int x = 0; x < probArray.length; x++) { - total += probArray[x] = probability; - if (x < dip || x > peak) { - probability -= 3; - } else { - probability += 3; - } - } - int hit = random(0, total); - total = 0; - for (int x = 0; x < probArray.length; x++) { - if (hit >= total && hit < (total + probArray[x])) { - return x; - } - total += probArray[x]; - } - return 0; - } - - public static double round(double value, int decimalPlace) { - BigDecimal bd = new BigDecimal(value); - bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); - return (bd.doubleValue()); - } - - public static int roundUp(double val) { - return (int) Math.round(val + 0.5D); - } - - /** - * Returns a ByteBuffer containing everything available from the given - * InputStream - */ - public static final ByteBuffer streamToBuffer(BufferedInputStream in) throws IOException { - byte[] buffer = new byte[in.available()]; - in.read(buffer, 0, buffer.length); - return ByteBuffer.wrap(buffer); - } - - /** - * Encodes a string into a byte array - */ - public static byte[] stringToByteArray(String message) { - byte[] buffer = new byte[100]; - if (message.length() > 80) { - message = message.substring(0, 80); - } - message = message.toLowerCase(); - int length = 0; - int j = -1; - for (int k = 0; k < message.length(); k++) { - int code = getCharCode(message.charAt(k)); - if (code > 12) { - code += 195; - } - if (j == -1) { - if (code < 13) - j = code; - else - buffer[length++] = (byte) code; - } else if (code < 13) { - buffer[length++] = (byte) ((j << 4) + code); - j = -1; - } else { - buffer[length++] = (byte) ((j << 4) + (code >> 4)); - j = code & 0xf; - } - } - if (j != -1) { - buffer[length++] = (byte) (j << 4); - } - byte[] string = new byte[length]; - System.arraycopy(buffer, 0, string, 0, length); - return string; - } - - public static String timeFormat(long l) { - return formatter.format(l); - } - - public static String timeSince(long time) { - int seconds = (int) ((GameEngine.getTime() - time) / 1000); - int minutes = (int) (seconds / 60); - int hours = (int) (minutes / 60); - int days = (int) (hours / 24); - return days + " days " + (hours % 24) + " hours " + (minutes % 60) + " mins"; - } - - /** - * Converts a username to a unique hash - */ - public static long usernameToHash(String s) { - s = s.toLowerCase(); - String s1 = ""; - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (c >= 'a' && c <= 'z') - s1 = s1 + c; - else if (c >= '0' && c <= '9') - s1 = s1 + c; - else - s1 = s1 + ' '; + return offset; } - s1 = s1.trim(); - if (s1.length() > 12) - s1 = s1.substring(0, 12); - long l = 0L; - for (int j = 0; j < s1.length(); j++) { - char c1 = s1.charAt(j); - l *= 37L; - if (c1 >= 'a' && c1 <= 'z') - l += (1 + c1) - 97; - else if (c1 >= '0' && c1 <= '9') - l += (27 + c1) - 48; + public static byte[] getMobPositionOffsets(Point p1, Point p2) { + byte[] rv = new byte[2]; + rv[0] = getMobCoordOffset(p1.getX(), p2.getX()); + rv[1] = getMobCoordOffset(p1.getY(), p2.getY()); + return rv; + } + + private static byte getObjectCoordOffset(int coord1, int coord2) { + return (byte) (coord1 - coord2); + } + + public static byte[] getObjectPositionOffsets(Point p1, Point p2) { + byte[] rv = new byte[2]; + rv[0] = getObjectCoordOffset(p1.getX(), p2.getX()); + rv[1] = getObjectCoordOffset(p1.getY(), p2.getY()); + return rv; + } + + /** + * Returns the random number generator + */ + public static Random getRandom() { + return rand; + } + + /** + * Converts a usernames hash back to the username + */ + public static String hashToUsername(long l) { + if (l < 0L) + return "invalid_name"; + String s = ""; + while (l != 0L) { + int i = (int) (l % 37L); + l /= 37L; + if (i == 0) + s = " " + s; + else if (i < 27) { + if (l % 37L == 0L) + s = (char) ((i + 65) - 1) + s; + else + s = (char) ((i + 97) - 1) + s; + } else { + s = (char) ((i + 48) - 27) + s; + } + } + return s; + } + + /** + * Checks if the given int is in the array + */ + public static boolean inArray(int[] haystack, int needle) { + for (int option : haystack) { + if (needle == option) { + return true; + } + } + return false; + } + + /** + * Checks if the given point is in the array + */ + public static boolean inPointArray(Point[] haystack, Point needle) { + for (Point option : haystack) { + if (needle.getX() == option.getX() + && needle.getY() == option.getY()) { + return true; + } + } + return false; + } + + public static long IPToLong(String ip) { + String[] octets = ip.split("\\."); + long result = 0L; + for (int x = 0; x < 4; x++) { + result += Integer.parseInt(octets[x]) * Math.pow(256, 3 - x); + } + return result; + } + + public static String IPToString(long ip) { + String result = "0.0.0.0"; + for (int x = 0; x < 4; x++) { + int octet = (int) (ip / Math.pow(256, 3 - x)); + ip -= octet * Math.pow(256, 3 - x); + if (x == 0) { + result = String.valueOf(octet); + } else { + result += ("." + octet); + } + } + return result; + } + + public static void main(String[] argv) throws Exception { + if (argv[0].equals("encode")) + Logger.println(usernameToHash(argv[1])); + if (argv[0].equals("decode")) + Logger.println(hashToUsername(Long.parseLong(argv[1]))); + } + + /** + * returns the max of the 2 values + */ + public static int max(int i1, int i2) { + return i1 > i2 ? i1 : i2; + } + + /** + * returns the md5 hash of a string + */ + public static String md5(String s) { + md.reset(); + md.update(s.getBytes()); + return HexString.bufferToHex(md.digest()); + } + + /** + * Returns true percent% of the time + */ + public static boolean percentChance(int percent) { + return random(1, 100) <= percent; + } + + /** + * returns a random number within the given bounds + */ + public static double random(double low, double high) { + return high - (rand.nextDouble() * low); + } + + /** + * returns a random number within the given bounds + */ + public static int random(int low, int high) { + return low + rand.nextInt(high - low + 1); + } + + /** + * returns a random number within the given bounds, but allows for certain + * values to be weighted + */ + public static int randomWeighted(int low, int dip, int peak, int max) { + int total = 0; + int probability = 100; + int[] probArray = new int[max + 1]; + for (int x = 0; x < probArray.length; x++) { + total += probArray[x] = probability; + if (x < dip || x > peak) { + probability -= 3; + } else { + probability += 3; + } + } + int hit = random(0, total); + total = 0; + for (int x = 0; x < probArray.length; x++) { + if (hit >= total && hit < (total + probArray[x])) { + return x; + } + total += probArray[x]; + } + return 0; + } + + public static double round(double value, int decimalPlace) { + BigDecimal bd = new BigDecimal(value); + bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + return (bd.doubleValue()); + } + + public static int roundUp(double val) { + return (int) Math.round(val + 0.5D); + } + + /** + * Returns a ByteBuffer containing everything available from the given + * InputStream + */ + public static final ByteBuffer streamToBuffer(BufferedInputStream in) + throws IOException { + byte[] buffer = new byte[in.available()]; + in.read(buffer, 0, buffer.length); + return ByteBuffer.wrap(buffer); + } + + /** + * Encodes a string into a byte array + */ + public static byte[] stringToByteArray(String message) { + byte[] buffer = new byte[100]; + if (message.length() > 80) { + message = message.substring(0, 80); + } + message = message.toLowerCase(); + int length = 0; + int j = -1; + for (int k = 0; k < message.length(); k++) { + int code = getCharCode(message.charAt(k)); + if (code > 12) { + code += 195; + } + if (j == -1) { + if (code < 13) + j = code; + else + buffer[length++] = (byte) code; + } else if (code < 13) { + buffer[length++] = (byte) ((j << 4) + code); + j = -1; + } else { + buffer[length++] = (byte) ((j << 4) + (code >> 4)); + j = code & 0xf; + } + } + if (j != -1) { + buffer[length++] = (byte) (j << 4); + } + byte[] string = new byte[length]; + System.arraycopy(buffer, 0, string, 0, length); + return string; + } + + public static String timeFormat(long l) { + return formatter.format(l); + } + + public static String timeSince(long time) { + int seconds = (int) ((GameEngine.getTime() - time) / 1000); + int minutes = (int) (seconds / 60); + int hours = (int) (minutes / 60); + int days = (int) (hours / 24); + return days + " days " + (hours % 24) + " hours " + (minutes % 60) + + " mins"; + } + + /** + * Converts a username to a unique hash + */ + public static long usernameToHash(String s) { + s = s.toLowerCase(); + String s1 = ""; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (c >= 'a' && c <= 'z') + s1 = s1 + c; + else if (c >= '0' && c <= '9') + s1 = s1 + c; + else + s1 = s1 + ' '; + } + + s1 = s1.trim(); + if (s1.length() > 12) + s1 = s1.substring(0, 12); + long l = 0L; + for (int j = 0; j < s1.length(); j++) { + char c1 = s1.charAt(j); + l *= 37L; + if (c1 >= 'a' && c1 <= 'z') + l += (1 + c1) - 97; + else if (c1 >= '0' && c1 <= '9') + l += (27 + c1) - 48; + } + return l; } - return l; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/tools/PaintCaptcha.java b/GameServer/src/org/moparscape/msc/gs/tools/PaintCaptcha.java index 81494e3..eeebeca 100644 --- a/GameServer/src/org/moparscape/msc/gs/tools/PaintCaptcha.java +++ b/GameServer/src/org/moparscape/msc/gs/tools/PaintCaptcha.java @@ -16,119 +16,125 @@ import javax.swing.ImageIcon; public class PaintCaptcha { - private final static boolean GRAPH = true; - private final static Color GRAPH_COLOR = Color.GRAY; - private final static int LINES = 10; - /** - * @author xEnt - * @info Paints over an Image(Captcha) to make it more secure, with Lines, - * Squares and a Graph. - */ + private final static boolean GRAPH = true; + private final static Color GRAPH_COLOR = Color.GRAY; + private final static int LINES = 10; + /** + * @author xEnt + * @info Paints over an Image(Captcha) to make it more secure, with Lines, + * Squares and a Graph. + */ - private final static int SQUARES_MAX = 25; - private final static int SQUARES_MIN = 10; + private final static int SQUARES_MAX = 25; + private final static int SQUARES_MIN = 10; - /* - * public static void main(String [] args) throws Exception { Image img = - * Toolkit.getDefaultToolkit().getImage("C:\\heh.png"); - * ImageIO.write(Img.toBufferedImage(secure(img)), "png", new - * File("C:\\roflrofl.png")); } - */ + /* + * public static void main(String [] args) throws Exception { Image img = + * Toolkit.getDefaultToolkit().getImage("C:\\heh.png"); + * ImageIO.write(Img.toBufferedImage(secure(img)), "png", new + * File("C:\\roflrofl.png")); } + */ - public static long randomNumber(int min, int max) { - return Math.round((Math.random() * (max - min)) + min); - } + public static long randomNumber(int min, int max) { + return Math.round((Math.random() * (max - min)) + min); + } - public static BufferedImage secure(BufferedImage b) { - try { + public static BufferedImage secure(BufferedImage b) { + try { - // BufferedImage b = toBufferedImage(img); - Graphics2D gfx = b.createGraphics(); - gfx.setPaintMode(); + // BufferedImage b = toBufferedImage(img); + Graphics2D gfx = b.createGraphics(); + gfx.setPaintMode(); - // Draw the Squares. - Random random = new Random(); - for (int i = 0; i < (int) randomNumber(SQUARES_MIN, SQUARES_MAX); i++) { - Color randomColor = Color.getHSBColor(random.nextFloat(), 1.0F, 1.0F); - gfx.setColor(randomColor); - gfx.drawRect((int) randomNumber(0, b.getWidth() - 80), (int) randomNumber(0, b.getHeight()), 3, 3); - } + // Draw the Squares. + Random random = new Random(); + for (int i = 0; i < (int) randomNumber(SQUARES_MIN, SQUARES_MAX); i++) { + Color randomColor = Color.getHSBColor(random.nextFloat(), 1.0F, + 1.0F); + gfx.setColor(randomColor); + gfx.drawRect((int) randomNumber(0, b.getWidth() - 80), + (int) randomNumber(0, b.getHeight()), 3, 3); + } - // Draw the Lines. - gfx.setColor(Color.ORANGE); - for (int i = 0; i < LINES; i++) { - int x = (int) randomNumber(0, b.getWidth() - 80); - int y = (int) randomNumber(0, b.getHeight()); - gfx.drawLine(x, y, x + (int) randomNumber(0, 30), y - (int) randomNumber(0, 30)); - } + // Draw the Lines. + gfx.setColor(Color.ORANGE); + for (int i = 0; i < LINES; i++) { + int x = (int) randomNumber(0, b.getWidth() - 80); + int y = (int) randomNumber(0, b.getHeight()); + gfx.drawLine(x, y, x + (int) randomNumber(0, 30), y + - (int) randomNumber(0, 30)); + } - if (GRAPH) { - // Graph, Lines from Top to Bottom. - gfx.setColor(GRAPH_COLOR); - for (int i = 0; i < 17; i++) { - gfx.drawLine(5 + i * 15, b.getHeight(), 5 + i * 15, 0); + if (GRAPH) { + // Graph, Lines from Top to Bottom. + gfx.setColor(GRAPH_COLOR); + for (int i = 0; i < 17; i++) { + gfx.drawLine(5 + i * 15, b.getHeight(), 5 + i * 15, 0); + } + for (int i = 0; i < 3; i++) { + gfx.drawLine(b.getWidth(), i * 14, 0, i * 14); + } + } + + gfx.dispose(); + return b; + + } catch (Exception e) { + return null; } - for (int i = 0; i < 3; i++) { - gfx.drawLine(b.getWidth(), i * 14, 0, i * 14); + } + + public static BufferedImage toBufferedImage(Image image) { + if (image instanceof BufferedImage) { + return (BufferedImage) image; } - } - gfx.dispose(); - return b; + // This code ensures that all the pixels in the image are loaded + image = new ImageIcon(image).getImage(); - } catch (Exception e) { - return null; + // Determine if the image has transparent pixels; for this method's + // implementation, see e661 Determining If an Image Has Transparent + // Pixels + boolean hasAlpha = false; + + // Create a buffered image with a format that's compatible with the + // screen + BufferedImage bimage = null; + GraphicsEnvironment ge = GraphicsEnvironment + .getLocalGraphicsEnvironment(); + try { + // Determine the type of transparency of the new buffered image + int transparency = Transparency.OPAQUE; + if (hasAlpha) { + transparency = Transparency.BITMASK; + } + + // Create the buffered image + GraphicsDevice gs = ge.getDefaultScreenDevice(); + GraphicsConfiguration gc = gs.getDefaultConfiguration(); + bimage = gc.createCompatibleImage(image.getWidth(null), + image.getHeight(null), transparency); + } catch (HeadlessException e) { + // The system does not have a screen + } + + if (bimage == null) { + // Create a buffered image using the default color model + int type = BufferedImage.TYPE_INT_RGB; + if (hasAlpha) { + type = BufferedImage.TYPE_INT_ARGB; + } + bimage = new BufferedImage(image.getWidth(null), + image.getHeight(null), type); + } + + // Copy image to buffered image + Graphics g = bimage.createGraphics(); + + // Paint the image onto the buffered image + g.drawImage(image, 0, 0, null); + g.dispose(); + + return bimage; } - } - - public static BufferedImage toBufferedImage(Image image) { - if (image instanceof BufferedImage) { - return (BufferedImage) image; - } - - // This code ensures that all the pixels in the image are loaded - image = new ImageIcon(image).getImage(); - - // Determine if the image has transparent pixels; for this method's - // implementation, see e661 Determining If an Image Has Transparent - // Pixels - boolean hasAlpha = false; - - // Create a buffered image with a format that's compatible with the - // screen - BufferedImage bimage = null; - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - try { - // Determine the type of transparency of the new buffered image - int transparency = Transparency.OPAQUE; - if (hasAlpha) { - transparency = Transparency.BITMASK; - } - - // Create the buffered image - GraphicsDevice gs = ge.getDefaultScreenDevice(); - GraphicsConfiguration gc = gs.getDefaultConfiguration(); - bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency); - } catch (HeadlessException e) { - // The system does not have a screen - } - - if (bimage == null) { - // Create a buffered image using the default color model - int type = BufferedImage.TYPE_INT_RGB; - if (hasAlpha) { - type = BufferedImage.TYPE_INT_ARGB; - } - bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type); - } - - // Copy image to buffered image - Graphics g = bimage.createGraphics(); - - // Paint the image onto the buffered image - g.drawImage(image, 0, 0, null); - g.dispose(); - - return bimage; - } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/Cache.java b/GameServer/src/org/moparscape/msc/gs/util/Cache.java index 698928c..0ee1f98 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/Cache.java +++ b/GameServer/src/org/moparscape/msc/gs/util/Cache.java @@ -13,12 +13,13 @@ import org.apache.commons.collections.map.LRUMap; public class Cache { private final Map cache; - + public Cache() { this(100); } - @SuppressWarnings("unchecked") // Commons and their failure to support generics... + @SuppressWarnings("unchecked") + // Commons and their failure to support generics... public Cache(int maxSize) { cache = new LRUMap(maxSize); } diff --git a/GameServer/src/org/moparscape/msc/gs/util/DefCompressor.java b/GameServer/src/org/moparscape/msc/gs/util/DefCompressor.java index ca85b2e..9ef9b1c 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/DefCompressor.java +++ b/GameServer/src/org/moparscape/msc/gs/util/DefCompressor.java @@ -9,46 +9,50 @@ import java.util.zip.GZIPOutputStream; public class DefCompressor { - public static void compressFile(File f) throws IOException { - File target = new File(f.toString() + ".gz"); - System.out.print("Compressing: " + f.getName() + ".. "); - long initialSize = f.length(); - FileInputStream fis = new FileInputStream(f); - GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(target)); - byte[] buf = new byte[1024]; - int read; - while ((read = fis.read(buf)) != -1) { - out.write(buf, 0, read); + public static void compressFile(File f) throws IOException { + File target = new File(f.toString() + ".gz"); + System.out.print("Compressing: " + f.getName() + ".. "); + long initialSize = f.length(); + FileInputStream fis = new FileInputStream(f); + GZIPOutputStream out = new GZIPOutputStream( + new FileOutputStream(target)); + byte[] buf = new byte[1024]; + int read; + while ((read = fis.read(buf)) != -1) { + out.write(buf, 0, read); + } + Logger.println("Done."); + fis.close(); + out.close(); + long endSize = target.length(); + Logger.println("Initial size: " + initialSize + "; Compressed size: " + + endSize); } - Logger.println("Done."); - fis.close(); - out.close(); - long endSize = target.length(); - Logger.println("Initial size: " + initialSize + "; Compressed size: " + endSize); - } - public static void decompressFile(File f) throws IOException { - File target = new File(f.toString().substring(0, f.toString().length() - 3)); - System.out.print("Decompressing: " + f.getName() + ".. "); - long initialSize = f.length(); - GZIPInputStream in = new GZIPInputStream(new FileInputStream(f)); - FileOutputStream fos = new FileOutputStream(target); - byte[] buf = new byte[1024]; - int read; - while ((read = in.read(buf)) != -1) { - fos.write(buf, 0, read); + public static void decompressFile(File f) throws IOException { + File target = new File(f.toString().substring(0, + f.toString().length() - 3)); + System.out.print("Decompressing: " + f.getName() + ".. "); + long initialSize = f.length(); + GZIPInputStream in = new GZIPInputStream(new FileInputStream(f)); + FileOutputStream fos = new FileOutputStream(target); + byte[] buf = new byte[1024]; + int read; + while ((read = in.read(buf)) != -1) { + fos.write(buf, 0, read); + } + Logger.println("Done."); + fos.close(); + in.close(); + long endSize = target.length(); + Logger.println("Initial size: " + initialSize + "; Decompressed size: " + + endSize); } - Logger.println("Done."); - fos.close(); - in.close(); - long endSize = target.length(); - Logger.println("Initial size: " + initialSize + "; Decompressed size: " + endSize); - } - public static void main(String[] argv) throws Exception { - if (argv[0].equals("compress")) - compressFile(new File(argv[1])); - if (argv[0].equals("decompress")) - decompressFile(new File(argv[1])); - } + public static void main(String[] argv) throws Exception { + if (argv[0].equals("compress")) + compressFile(new File(argv[1])); + if (argv[0].equals("decompress")) + decompressFile(new File(argv[1])); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/DelayMonitor.java b/GameServer/src/org/moparscape/msc/gs/util/DelayMonitor.java index f054ed6..131e26a 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/DelayMonitor.java +++ b/GameServer/src/org/moparscape/msc/gs/util/DelayMonitor.java @@ -3,21 +3,47 @@ package org.moparscape.msc.gs.util; import java.text.DecimalFormat; public class DelayMonitor { - private static final DecimalFormat formatter = new DecimalFormat("###,###.###"); + private static final DecimalFormat formatter = new DecimalFormat( + "###,###.###"); private long t, t1, t2; private int totalItemsUpdated; private int numRepeats; - - public void startMeasuring() { t1 = System.nanoTime(); } - public void setItemsUpdated(int i) { totalItemsUpdated += i; } - public void endMeasuring() { t2 = System.nanoTime(); processMeasurements(); } - public double getAvgDelay() { return (t / numRepeats) / 1e6; } - public double getAvgItemsPerRepeat() { return (totalItemsUpdated / numRepeats); } - public int getRepeatCount() { return numRepeats; } - public void reset() { t = t1 = t2 = numRepeats = totalItemsUpdated = 0; } + + public void startMeasuring() { + t1 = System.nanoTime(); + } + + public void setItemsUpdated(int i) { + totalItemsUpdated += i; + } + + public void endMeasuring() { + t2 = System.nanoTime(); + processMeasurements(); + } + + public double getAvgDelay() { + return (t / numRepeats) / 1e6; + } + + public double getAvgItemsPerRepeat() { + return (totalItemsUpdated / numRepeats); + } + + public int getRepeatCount() { + return numRepeats; + } + + public void reset() { + t = t1 = t2 = numRepeats = totalItemsUpdated = 0; + } + private void processMeasurements() { t += (t2 - t1); numRepeats++; } - public static String toString(double d) { return formatter.format(d); } + + public static String toString(double d) { + return formatter.format(d); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/DuelLog.java b/GameServer/src/org/moparscape/msc/gs/util/DuelLog.java index e18f198..cc37896 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/DuelLog.java +++ b/GameServer/src/org/moparscape/msc/gs/util/DuelLog.java @@ -5,10 +5,12 @@ import org.moparscape.msc.gs.builders.ls.MiscPacketBuilder; import org.moparscape.msc.gs.model.World; public class DuelLog { - public static final World world = Instance.getWorld(); + public static final World world = Instance.getWorld(); - public static void sendlog(final long from, final long to, final int item, final long amount, final int x, final int y, final int type) { - MiscPacketBuilder loginServer = Instance.getServer().getLoginConnector().getActionSender(); - loginServer.tradeLog(to, from, item, amount, x, y, type); - } + public static void sendlog(final long from, final long to, final int item, + final long amount, final int x, final int y, final int type) { + MiscPacketBuilder loginServer = Instance.getServer() + .getLoginConnector().getActionSender(); + loginServer.tradeLog(to, from, item, amount, x, y, type); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/EntityList.java b/GameServer/src/org/moparscape/msc/gs/util/EntityList.java index b69d0c7..4c6a8ba 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/EntityList.java +++ b/GameServer/src/org/moparscape/msc/gs/util/EntityList.java @@ -7,84 +7,85 @@ import java.util.Set; import org.moparscape.msc.gs.model.Entity; - public class EntityList extends AbstractCollection { - /** - * The Default capacity of an EntityList - */ - public static final int DEFAULT_CAPACITY = 2000; - protected int capacity; - protected int curIndex = 0; - protected Object[] entities; - protected Set indicies = new HashSet(); + /** + * The Default capacity of an EntityList + */ + public static final int DEFAULT_CAPACITY = 2000; + protected int capacity; + protected int curIndex = 0; + protected Object[] entities; + protected Set indicies = new HashSet(); - public EntityList() { - this(DEFAULT_CAPACITY); - } - - public EntityList(int capacity) { - entities = new Object[capacity]; - this.capacity = capacity; - } - - public boolean add(T entity) { - if (entities[curIndex] != null) { - increaseIndex(); - add(entity); - } else { - entities[curIndex] = entity; - entity.setIndex(curIndex); - indicies.add(curIndex); - increaseIndex(); + public EntityList() { + this(DEFAULT_CAPACITY); } - return true; - } - public boolean contains(T entity) { - return indexOf(entity) > -1; - } - - public int count() { - return indicies.size(); - } - - public T get(int index) { - return (T) entities[index]; - } - - public void increaseIndex() { - curIndex++; - if (curIndex >= capacity) { - curIndex = 0; + public EntityList(int capacity) { + entities = new Object[capacity]; + this.capacity = capacity; } - } - public int indexOf(T entity) { - for (int index : indicies) { - if (entities[index].equals(entity)) { - return index; - } + public boolean add(T entity) { + if (entities[curIndex] != null) { + increaseIndex(); + add(entity); + } else { + entities[curIndex] = entity; + entity.setIndex(curIndex); + indicies.add(curIndex); + increaseIndex(); + } + return true; } - return -1; - } - public Iterator iterator() { - return new EntityListIterator(entities, indicies, this); - } + public boolean contains(T entity) { + return indexOf(entity) > -1; + } - public T remove(int index) { - Object temp = entities[index]; - entities[index] = null; - indicies.remove(index); - return (T) temp; - } + public int count() { + return indicies.size(); + } - public void remove(T entity) { - entities[entity.getIndex()] = null; - indicies.remove(entity.getIndex()); - } + @SuppressWarnings("unchecked") + public T get(int index) { + return (T) entities[index]; + } - public int size() { - return indicies.size(); - } + public void increaseIndex() { + curIndex++; + if (curIndex >= capacity) { + curIndex = 0; + } + } + + public int indexOf(T entity) { + for (int index : indicies) { + if (entities[index].equals(entity)) { + return index; + } + } + return -1; + } + + public Iterator iterator() { + return new EntityListIterator(entities, indicies, this); + } + + @SuppressWarnings("unchecked") + public T remove(int index) { + Object temp = entities[index]; + entities[index] = null; + indicies.remove(index); + return (T) temp; + } + + public void remove(T entity) { + entities[entity.getIndex()] = null; + indicies.remove(entity.getIndex()); + } + + public int size() { + return indicies.size(); + } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/EntityListIterator.java b/GameServer/src/org/moparscape/msc/gs/util/EntityListIterator.java index 1d8a9cd..4686fae 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/EntityListIterator.java +++ b/GameServer/src/org/moparscape/msc/gs/util/EntityListIterator.java @@ -5,33 +5,34 @@ import java.util.Set; import org.moparscape.msc.gs.model.Entity; - public class EntityListIterator implements Iterator { - private int curIndex = 0; - private Object[] entities; - private EntityList entityList; - private Integer[] indicies; + private int curIndex = 0; + private Object[] entities; + private EntityList entityList; + private Integer[] indicies; - public EntityListIterator(Object[] entities, Set indicies, EntityList entityList) { - this.entities = entities; - this.indicies = indicies.toArray(new Integer[0]); - this.entityList = entityList; - } - - public boolean hasNext() { - return indicies.length != curIndex; - } - - public E next() { - Object temp = entities[indicies[curIndex]]; - curIndex++; - return (E) temp; - } - - public void remove() { - if (curIndex >= 1) { - entityList.remove(indicies[curIndex - 1]); + public EntityListIterator(Object[] entities, Set indicies, + EntityList entityList) { + this.entities = entities; + this.indicies = indicies.toArray(new Integer[0]); + this.entityList = entityList; + } + + public boolean hasNext() { + return indicies.length != curIndex; + } + + @SuppressWarnings("unchecked") + public E next() { + Object temp = entities[indicies[curIndex]]; + curIndex++; + return (E) temp; + } + + public void remove() { + if (curIndex >= 1) { + entityList.remove(indicies[curIndex - 1]); + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/MapGenerator.java b/GameServer/src/org/moparscape/msc/gs/util/MapGenerator.java index 3d66b85..4b888e7 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/MapGenerator.java +++ b/GameServer/src/org/moparscape/msc/gs/util/MapGenerator.java @@ -13,130 +13,130 @@ import org.moparscape.msc.gs.model.ActiveTile; import org.moparscape.msc.gs.model.TileValue; import org.moparscape.msc.gs.model.World; - public class MapGenerator { - private static final int BLACK = new Color(0, 0, 0).getRGB(); - private static final int BLUE = new Color(0, 0, 255).getRGB(); - private static final int HEIGHT = World.MAX_HEIGHT * 2; - private static final String[] labels = { "Ground", "Level-1", "Level-2", "Underground" }; + private static final int BLACK = new Color(0, 0, 0).getRGB(); + private static final int BLUE = new Color(0, 0, 255).getRGB(); + private static final int HEIGHT = World.MAX_HEIGHT * 2; + private static final String[] labels = { "Ground", "Level-1", "Level-2", + "Underground" }; - private static final int PURPLE = new Color(150, 0, 255).getRGB(); - private static final int RED = new Color(255, 0, 0).getRGB(); - private static final int WIDTH = World.MAX_WIDTH * 2; - private static final World world = Instance.getWorld(); + private static final int PURPLE = new Color(150, 0, 255).getRGB(); + private static final int RED = new Color(255, 0, 0).getRGB(); + private static final int WIDTH = World.MAX_WIDTH * 2; + private static final World world = Instance.getWorld(); - public static void main(String[] args) throws Exception { - if (args.length < 1) { - Logger.println("Invalid args"); - return; - } - String configFile = "conf/server/Conf.xml"; - if (args.length > 1) { - File f = new File(args[1]); - if (f.exists()) { - configFile = f.getName(); - } - } - Config.initConfig(configFile); - MapGenerator mapGen = new MapGenerator(); - mapGen.generate(); - mapGen.save(args[0]); - } - - private Graphics gfx; - - private BufferedImage image; - - public MapGenerator() { - image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB); - gfx = image.getGraphics(); - } - - private void drawDot(int xCoord, int yCoord, int colour) { - image.setRGB(WIDTH - xCoord - 1, yCoord, colour); - } - - private void fillTile(int xCoord, int yCoord, int colour) { - for (int xOff = 0; xOff < 2; xOff++) { - for (int yOff = 0; yOff < 2; yOff++) { - drawDot(xCoord + xOff, yCoord + yOff, colour); - } - } - } - - public void generate() { - gfx.fillRect(0, 0, WIDTH, HEIGHT); - int label = 0; - for (int x = 0; x < WIDTH; x += 2) { - for (int y = 0; y < HEIGHT; y += 2) { - if (y % 1888 == 0) { - if (x == 0) { - gfx.setColor(Color.GREEN); - gfx.drawLine(0, y, WIDTH, y); - gfx.drawLine(0, y + 1, WIDTH, y + 1); - gfx.drawString(labels[label++], x + 10, y + 20); - } - continue; + public static void main(String[] args) throws Exception { + if (args.length < 1) { + Logger.println("Invalid args"); + return; } - handleTile(x, y, world.getTileValue(x / 2, y / 2)); - ActiveTile t = world.tiles[x / 2][y / 2]; - if (t != null) { - if (t.hasNpcs()) { - fillTile(x, y, RED); - } - if (t.hasItems()) { - fillTile(x, y, PURPLE); - } - if (t.hasGameObject()) { - fillTile(x, y, BLACK); - } + String configFile = "conf/server/Conf.xml"; + if (args.length > 1) { + File f = new File(args[1]); + if (f.exists()) { + configFile = f.getName(); + } } - } + Config.initConfig(configFile); + MapGenerator mapGen = new MapGenerator(); + mapGen.generate(); + mapGen.save(args[0]); } - } - private void handleTile(int xImg, int yImg, byte type) { - if ((type & 1) != 0) { // Top Wall - drawDot(xImg, yImg, BLACK); - drawDot(xImg + 1, yImg, BLACK); - } - if ((type & 2) != 0) { // Right wall - drawDot(xImg, yImg, BLACK); - drawDot(xImg, yImg + 1, BLACK); - } - if ((type & 4) != 0) { // Bottom Wall - drawDot(xImg, yImg + 1, BLACK); - drawDot(xImg + 1, yImg + 1, BLACK); - } - if ((type & 8) != 0) { // Left Wall - drawDot(xImg + 1, yImg, BLACK); - drawDot(xImg + 1, yImg + 1, BLACK); - } - if ((type & 16) != 0) { // Diagonal Wall \ - drawDot(xImg + 1, yImg, BLACK); - drawDot(xImg, yImg + 1, BLACK); - } - if ((type & 32) != 0) { // Diagonal Wall / - drawDot(xImg, yImg, BLACK); - drawDot(xImg + 1, yImg + 1, BLACK); - } - if ((type & 64) != 0) { // Unwalkable/Object - fillTile(xImg, yImg, BLUE); - } - } + private Graphics gfx; - private void handleTile(int xImg, int yImg, TileValue tile) { - handleTile(xImg, yImg, tile.mapValue); - handleTile(xImg, yImg, tile.objectValue); - } + private BufferedImage image; - public boolean save(String filename) { - try { - File file = new File(filename); - ImageIO.write(image, "png", file); - return true; - } catch (Exception e) { - return false; + public MapGenerator() { + image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB); + gfx = image.getGraphics(); + } + + private void drawDot(int xCoord, int yCoord, int colour) { + image.setRGB(WIDTH - xCoord - 1, yCoord, colour); + } + + private void fillTile(int xCoord, int yCoord, int colour) { + for (int xOff = 0; xOff < 2; xOff++) { + for (int yOff = 0; yOff < 2; yOff++) { + drawDot(xCoord + xOff, yCoord + yOff, colour); + } + } + } + + public void generate() { + gfx.fillRect(0, 0, WIDTH, HEIGHT); + int label = 0; + for (int x = 0; x < WIDTH; x += 2) { + for (int y = 0; y < HEIGHT; y += 2) { + if (y % 1888 == 0) { + if (x == 0) { + gfx.setColor(Color.GREEN); + gfx.drawLine(0, y, WIDTH, y); + gfx.drawLine(0, y + 1, WIDTH, y + 1); + gfx.drawString(labels[label++], x + 10, y + 20); + } + continue; + } + handleTile(x, y, world.getTileValue(x / 2, y / 2)); + ActiveTile t = world.tiles[x / 2][y / 2]; + if (t != null) { + if (t.hasNpcs()) { + fillTile(x, y, RED); + } + if (t.hasItems()) { + fillTile(x, y, PURPLE); + } + if (t.hasGameObject()) { + fillTile(x, y, BLACK); + } + } + } + } + } + + private void handleTile(int xImg, int yImg, byte type) { + if ((type & 1) != 0) { // Top Wall + drawDot(xImg, yImg, BLACK); + drawDot(xImg + 1, yImg, BLACK); + } + if ((type & 2) != 0) { // Right wall + drawDot(xImg, yImg, BLACK); + drawDot(xImg, yImg + 1, BLACK); + } + if ((type & 4) != 0) { // Bottom Wall + drawDot(xImg, yImg + 1, BLACK); + drawDot(xImg + 1, yImg + 1, BLACK); + } + if ((type & 8) != 0) { // Left Wall + drawDot(xImg + 1, yImg, BLACK); + drawDot(xImg + 1, yImg + 1, BLACK); + } + if ((type & 16) != 0) { // Diagonal Wall \ + drawDot(xImg + 1, yImg, BLACK); + drawDot(xImg, yImg + 1, BLACK); + } + if ((type & 32) != 0) { // Diagonal Wall / + drawDot(xImg, yImg, BLACK); + drawDot(xImg + 1, yImg + 1, BLACK); + } + if ((type & 64) != 0) { // Unwalkable/Object + fillTile(xImg, yImg, BLUE); + } + } + + private void handleTile(int xImg, int yImg, TileValue tile) { + handleTile(xImg, yImg, tile.mapValue); + handleTile(xImg, yImg, tile.objectValue); + } + + public boolean save(String filename) { + try { + File file = new File(filename); + ImageIO.write(image, "png", file); + return true; + } catch (Exception e) { + return false; + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/ObjectLoader.java b/GameServer/src/org/moparscape/msc/gs/util/ObjectLoader.java index 8a9789b..36c8be9 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/ObjectLoader.java +++ b/GameServer/src/org/moparscape/msc/gs/util/ObjectLoader.java @@ -7,17 +7,18 @@ import java.util.zip.GZIPInputStream; import org.moparscape.msc.config.Config; - public class ObjectLoader { - public static Object loadObject(String file) { - try { - ObjectInputStream in = new ObjectInputStream(new GZIPInputStream(new FileInputStream(new File(Config.CONF_DIR, "data/ground.gz")))); - Object temp = in.readObject(); - in.close(); - return temp; - } catch (Exception e) { - Logger.error(e); - return null; + public static Object loadObject(String file) { + try { + ObjectInputStream in = new ObjectInputStream(new GZIPInputStream( + new FileInputStream(new File(Config.CONF_DIR, + "data/ground.gz")))); + Object temp = in.readObject(); + in.close(); + return temp; + } catch (Exception e) { + Logger.error(e); + return null; + } } - } } \ No newline at end of file diff --git a/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java b/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java index 6ddcbb2..b1048fe 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java +++ b/GameServer/src/org/moparscape/msc/gs/util/PersistenceManager.java @@ -13,54 +13,57 @@ import java.util.zip.GZIPOutputStream; import org.moparscape.msc.config.Config; - import com.thoughtworks.xstream.XStream; public class PersistenceManager { - private static final XStream xstream = new XStream(); + private static final XStream xstream = new XStream(); - static { - setupAliases(); - } - - public static Object load(String filename) { - try { - InputStream is = new FileInputStream(new File(Config.CONF_DIR, filename)); - if (filename.endsWith(".gz")) { - is = new GZIPInputStream(is); - } - Object rv = xstream.fromXML(is); - return rv; - } catch (IOException ioe) { - Logger.error(ioe); + static { + setupAliases(); } - return null; - } - public static void setupAliases() { - try { - Properties aliases = new Properties(); - FileInputStream fis = new FileInputStream(new File(Config.CONF_DIR, "aliases.xml")); - aliases.loadFromXML(fis); - for (Enumeration e = aliases.propertyNames(); e.hasMoreElements();) { - String alias = (String) e.nextElement(); - Class c = Class.forName((String) aliases.get(alias)); - xstream.alias(alias, c); - } - } catch (Exception ioe) { - Logger.error(ioe); + public static Object load(String filename) { + try { + InputStream is = new FileInputStream(new File(Config.CONF_DIR, + filename)); + if (filename.endsWith(".gz")) { + is = new GZIPInputStream(is); + } + Object rv = xstream.fromXML(is); + return rv; + } catch (IOException ioe) { + Logger.error(ioe); + } + return null; } - } - public static void write(String filename, Object o) { - try { - OutputStream os = new FileOutputStream(new File(Config.CONF_DIR, filename)); - if (filename.endsWith(".gz")) { - os = new GZIPOutputStream(os); - } - xstream.toXML(o, os); - } catch (IOException ioe) { - Logger.error(ioe); + public static void setupAliases() { + try { + Properties aliases = new Properties(); + FileInputStream fis = new FileInputStream(new File(Config.CONF_DIR, + "aliases.xml")); + aliases.loadFromXML(fis); + for (Enumeration e = aliases.propertyNames(); e + .hasMoreElements();) { + String alias = (String) e.nextElement(); + Class c = Class.forName((String) aliases.get(alias)); + xstream.alias(alias, c); + } + } catch (Exception ioe) { + Logger.error(ioe); + } + } + + public static void write(String filename, Object o) { + try { + OutputStream os = new FileOutputStream(new File(Config.CONF_DIR, + filename)); + if (filename.endsWith(".gz")) { + os = new GZIPOutputStream(os); + } + xstream.toXML(o, os); + } catch (IOException ioe) { + Logger.error(ioe); + } } - } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/RSA.java b/GameServer/src/org/moparscape/msc/gs/util/RSA.java index 5faaef7..e2ed4d0 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/RSA.java +++ b/GameServer/src/org/moparscape/msc/gs/util/RSA.java @@ -38,69 +38,82 @@ import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; - public class RSA { private static KeyFactory keyFactory; private static PublicKey pubKey; - private static PrivateKey privKey; + private static PrivateKey privKey; static { try { keyFactory = KeyFactory.getInstance("RSA"); - pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(new BigInteger("258483531987721813854435365666199783121097212864526576114955744050873252978581213214062885665119329089273296913884093898593877564098511382732309048889240854054459372263273672334107564088395710980478911359605768175143527864461996266529749955416370971506195317045377519645018157466830930794446490944537605962330090699836840861268493872513762630835769942133970804813091619416385064187784658945").toByteArray())); - privKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(new BigInteger("126389230230897930352385109045517175528919326976939639978192012327670621489047580094424093866394604083620710942258641479882605306217705080633073206358002116577711775977035174649355992840385149147227804978220431329886904749249047207172981994234190017310148273188617548379533657419013879671232142718169518429371391936849151606245205570182197305333898616362563500262673852314745836689909720746451418490347388427381974609081779036643692442896601636017446393710362921966444628494554137329105609231821252714960402427087902143625637826354987050179190296311361184976459578647089802255916487029562372894817902016349527418080110572755696829671001527629662007011502494795321796989748708894483748787746164007093796775322700601606206239680220934740393355136437625692864876018489463040975412867784876767858234777778613227623572162881295529316433265197827292214481807179049611685053128209907494051691218003161010138655935539925662842276881932027193524730598562717449099166747466602094321757382874332291191770626601705016723177033286335759178872988144726412991304849553921854275796353460611722080118921976660955130059428940619614317969278356912087565839497213220194655672243883744862866647835331423918525974671607339058850826043973690788036967549648769172496014048685165109400959786151179359607410101378890865847238149636112094448917842512853709764865360978231071734030322981843223939320472985117985802975969976688950242865772248639234517663026594659960052526081995926396802458422109485608674299402862528020107837865224663685601410678473927829").toByteArray())); + pubKey = keyFactory + .generatePublic(new X509EncodedKeySpec( + new BigInteger( + "258483531987721813854435365666199783121097212864526576114955744050873252978581213214062885665119329089273296913884093898593877564098511382732309048889240854054459372263273672334107564088395710980478911359605768175143527864461996266529749955416370971506195317045377519645018157466830930794446490944537605962330090699836840861268493872513762630835769942133970804813091619416385064187784658945") + .toByteArray())); + privKey = keyFactory + .generatePrivate(new PKCS8EncodedKeySpec( + new BigInteger( + "126389230230897930352385109045517175528919326976939639978192012327670621489047580094424093866394604083620710942258641479882605306217705080633073206358002116577711775977035174649355992840385149147227804978220431329886904749249047207172981994234190017310148273188617548379533657419013879671232142718169518429371391936849151606245205570182197305333898616362563500262673852314745836689909720746451418490347388427381974609081779036643692442896601636017446393710362921966444628494554137329105609231821252714960402427087902143625637826354987050179190296311361184976459578647089802255916487029562372894817902016349527418080110572755696829671001527629662007011502494795321796989748708894483748787746164007093796775322700601606206239680220934740393355136437625692864876018489463040975412867784876767858234777778613227623572162881295529316433265197827292214481807179049611685053128209907494051691218003161010138655935539925662842276881932027193524730598562717449099166747466602094321757382874332291191770626601705016723177033286335759178872988144726412991304849553921854275796353460611722080118921976660955130059428940619614317969278356912087565839497213220194655672243883744862866647835331423918525974671607339058850826043973690788036967549648769172496014048685165109400959786151179359607410101378890865847238149636112094448917842512853709764865360978231071734030322981843223939320472985117985802975969976688950242865772248639234517663026594659960052526081995926396802458422109485608674299402862528020107837865224663685601410678473927829") + .toByteArray())); + } catch (Exception e) { } - catch(Exception e) {} } - /** - * Decrypt text using private key - * @param text The encrypted text - * @param key The private key - * @return The unencrypted text - * @throws java.lang.Exception - */ - - public static byte[] decrypt(byte[] text) throws Exception - { - byte[] dectyptedText = null; - Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - cipher.init(Cipher.DECRYPT_MODE, privKey); - dectyptedText = cipher.doFinal(text); - return dectyptedText; + /** + * Decrypt text using private key + * + * @param text + * The encrypted text + * @param key + * The private key + * @return The unencrypted text + * @throws java.lang.Exception + */ + + public static byte[] decrypt(byte[] text) throws Exception { + + byte[] dectyptedText = null; + Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); + cipher.init(Cipher.DECRYPT_MODE, privKey); + dectyptedText = cipher.doFinal(text); + return dectyptedText; } - /** - * Encrypt a text using public key. - * @param text The original unencrypted text - * @param key The public key - * @return Encrypted text - * @throws java.lang.Exception - */ - public static byte[] encrypt(byte[] text) throws Exception - { - byte[] cipherText = null; - Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - cipher.init(Cipher.ENCRYPT_MODE, pubKey); - cipherText = cipher.doFinal(text); - return cipherText; + /** + * Encrypt a text using public key. + * + * @param text + * The original unencrypted text + * @param key + * The public key + * @return Encrypted text + * @throws java.lang.Exception + */ + public static byte[] encrypt(byte[] text) throws Exception { + + byte[] cipherText = null; + Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); + cipher.init(Cipher.ENCRYPT_MODE, pubKey); + cipherText = cipher.doFinal(text); + return cipherText; } - /** - * Generate key which contains a pair of privae and public key using 1024 bytes - * @return key pair - * @throws NoSuchAlgorithmException - */ - public static KeyPair generateKey() throws NoSuchAlgorithmException - { - KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); - keyGen.initialize(1024); - KeyPair key = keyGen.generateKeyPair(); - return key; + /** + * Generate key which contains a pair of privae and public key using 1024 + * bytes + * + * @return key pair + * @throws NoSuchAlgorithmException + */ + public static KeyPair generateKey() throws NoSuchAlgorithmException { + + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(1024); + KeyPair key = keyGen.generateKeyPair(); + return key; } } - - diff --git a/GameServer/src/org/moparscape/msc/gs/util/StatefulEntityCollection.java b/GameServer/src/org/moparscape/msc/gs/util/StatefulEntityCollection.java index 360348d..c8fb486 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/StatefulEntityCollection.java +++ b/GameServer/src/org/moparscape/msc/gs/util/StatefulEntityCollection.java @@ -6,7 +6,6 @@ import java.util.Set; import org.moparscape.msc.gs.model.Entity; - /** * This class is a collection which is backed by 3 seperate Sets. * @@ -25,61 +24,61 @@ import org.moparscape.msc.gs.model.Entity; public class StatefulEntityCollection { - private Set entitiesToRemove = new HashSet(); - private Set knownEntities = new HashSet(); - private Set newEntities = new HashSet(); + private Set entitiesToRemove = new HashSet(); + private Set knownEntities = new HashSet(); + private Set newEntities = new HashSet(); - // We need to keep these in the order they logged in, currently it doesn't - // seem to? + // We need to keep these in the order they logged in, currently it doesn't + // seem to? - public void add(Collection entities) { - newEntities.addAll(entities); - } + public void add(Collection entities) { + newEntities.addAll(entities); + } - public void add(T entity) { - newEntities.add(entity); - } + public void add(T entity) { + newEntities.add(entity); + } - public boolean changed() { - return !entitiesToRemove.isEmpty() || !newEntities.isEmpty(); - } + public boolean changed() { + return !entitiesToRemove.isEmpty() || !newEntities.isEmpty(); + } - public boolean contains(T entity) { - return newEntities.contains(entity) || knownEntities.contains(entity); - } + public boolean contains(T entity) { + return newEntities.contains(entity) || knownEntities.contains(entity); + } - public Collection getAllEntities() { - Set temp = new HashSet(); - temp.addAll(newEntities); - temp.addAll(knownEntities); - return temp; - } + public Collection getAllEntities() { + Set temp = new HashSet(); + temp.addAll(newEntities); + temp.addAll(knownEntities); + return temp; + } - public Collection getKnownEntities() { - return knownEntities; - } + public Collection getKnownEntities() { + return knownEntities; + } - public Collection getNewEntities() { - return newEntities; - } + public Collection getNewEntities() { + return newEntities; + } - public Collection getRemovingEntities() { - return entitiesToRemove; - } + public Collection getRemovingEntities() { + return entitiesToRemove; + } - public boolean isRemoving(T entity) { - return entitiesToRemove.contains(entity); - } + public boolean isRemoving(T entity) { + return entitiesToRemove.contains(entity); + } - public void remove(T entity) { - entitiesToRemove.add(entity); - } + public void remove(T entity) { + entitiesToRemove.add(entity); + } - public void update() { + public void update() { knownEntities.removeAll(entitiesToRemove); knownEntities.addAll(newEntities); newEntities.clear(); entitiesToRemove.clear(); - } + } } diff --git a/GameServer/src/org/moparscape/msc/gs/util/WorkGroup.java b/GameServer/src/org/moparscape/msc/gs/util/WorkGroup.java index 75903f3..9afcbf7 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/WorkGroup.java +++ b/GameServer/src/org/moparscape/msc/gs/util/WorkGroup.java @@ -9,23 +9,22 @@ import java.util.concurrent.BlockingQueue; import org.moparscape.msc.gs.core.ClientUpdater; import org.moparscape.msc.gs.model.Player; - /** * This class manages a set of Workers. */ public class WorkGroup { private List uncaughtExceptions; - private Worker[] workers; + private Worker[] workers; private Thread[] workerThreads; private BlockingQueue workload = null; private Processor processor; + public WorkGroup(Processor p) { this(p, Runtime.getRuntime().availableProcessors() + 1); } - + /** - * Start the workgroup. - * All threads are initiated into a sleeping state. + * Start the workgroup. All threads are initiated into a sleeping state. */ public WorkGroup(Processor p, int numWorkers) { this.workload = new ArrayBlockingQueue(1000); @@ -33,41 +32,44 @@ public class WorkGroup { this.workers = new Worker[numWorkers]; this.uncaughtExceptions = new ArrayList(); workerThreads = new Thread[workers.length]; - for(int i=0; i(this, workload, processor); - workerThreads[i] = new Thread(workers[i], "-"+i); + workerThreads[i] = new Thread(workers[i], "-" + i); workerThreads[i].start(); } } - - public void processWorkload(Collection players) throws InterruptedException { + + public void processWorkload(Collection players) + throws InterruptedException { uncaughtExceptions.clear(); setWorkload(players); waitFor(); } + public boolean shouldProcess() { - return !((ClientUpdater)processor).updatingCollections; + return !((ClientUpdater) processor).updatingCollections; } + private void waitFor() throws InterruptedException { - while(!workload.isEmpty()) + while (!workload.isEmpty()) Thread.sleep(10); - - ((ClientUpdater)processor).updateCollections(); + + ((ClientUpdater) processor).updateCollections(); } - + public int remainingJobs() { return workload.size(); } - - public int getNumWorkers() { - return workers.length; + + public int getNumWorkers() { + return workers.length; } - + public void addUncaughtException(Throwable t) { t.printStackTrace(); uncaughtExceptions.add(t); } - + public void setWorkload(Collection c) { workload.clear(); workload.addAll(c); diff --git a/GameServer/src/org/moparscape/msc/gs/util/Worker.java b/GameServer/src/org/moparscape/msc/gs/util/Worker.java index f812e52..1af4425 100644 --- a/GameServer/src/org/moparscape/msc/gs/util/Worker.java +++ b/GameServer/src/org/moparscape/msc/gs/util/Worker.java @@ -1,42 +1,41 @@ package org.moparscape.msc.gs.util; -import java.util.concurrent.*; +import java.util.concurrent.BlockingQueue; import org.moparscape.msc.gs.model.Player; - /** * The Worker class is a runnable class that can be used for splitting up a - * workload into multiple Workers. - * This class should only ever be used through a WorkGroup. + * workload into multiple Workers. This class should only ever be used through a + * WorkGroup. */ public class Worker implements Runnable { - private WorkGroup parent; + private WorkGroup parent; private BlockingQueue workload; private Processor processor; private boolean running = true; - - public Worker(WorkGroup wg, BlockingQueue workload, Processor p) { + + public Worker(WorkGroup wg, BlockingQueue workload, Processor p) { this.parent = wg; this.workload = workload; this.processor = p; } - - public void stop() { + + public void stop() { running = false; } - + public void run() { - while(running) { + while (running) { try { - if(parent.shouldProcess()) { + if (parent.shouldProcess()) { Player element = workload.take(); processor.process(element); } - } catch(InterruptedException ie) { - //thread has been asked to stop + } catch (InterruptedException ie) { + // thread has been asked to stop running = false; - } catch(Exception e) { + } catch (Exception e) { parent.addUncaughtException(e); } } diff --git a/LoginServer/src/org/moparscape/msc/ls/LoginEngine.java b/LoginServer/src/org/moparscape/msc/ls/LoginEngine.java index 0e26a06..d88127d 100644 --- a/LoginServer/src/org/moparscape/msc/ls/LoginEngine.java +++ b/LoginServer/src/org/moparscape/msc/ls/LoginEngine.java @@ -65,7 +65,7 @@ public class LoginEngine extends Thread { for (PacketHandlerDef handlerDef : handlerDefs) { try { String className = handlerDef.getClassName(); - Class c = Class.forName(className); + Class c = Class.forName(className); if (c != null) { PacketHandler handler = (PacketHandler) c.newInstance(); for (int packetID : handlerDef.getAssociatedPackets()) { @@ -81,7 +81,7 @@ public class LoginEngine extends Thread { for (PacketHandlerDef handlerDef : handlerDefs) { try { String className = handlerDef.getClassName(); - Class c = Class.forName(className); + Class c = Class.forName(className); if (c != null) { PacketHandler handler = (PacketHandler) c.newInstance(); for (int packetID : handlerDef.getAssociatedPackets()) { diff --git a/LoginServer/src/org/moparscape/msc/ls/model/PlayerSave.java b/LoginServer/src/org/moparscape/msc/ls/model/PlayerSave.java index f3ba96f..186c9ea 100644 --- a/LoginServer/src/org/moparscape/msc/ls/model/PlayerSave.java +++ b/LoginServer/src/org/moparscape/msc/ls/model/PlayerSave.java @@ -25,7 +25,9 @@ public class PlayerSave { } long eventcd = result.getLong("eventcd"); - int subexp = result.getInt("subexp"); + @SuppressWarnings("unused") + int subexp = result.getInt("subexp"); + @SuppressWarnings("unused") long now = System.currentTimeMillis() / 1000; int sowner = result.getInt("owner"); if (result.getInt("gid") == 8) { diff --git a/LoginServer/src/org/moparscape/msc/ls/net/PacketQueue.java b/LoginServer/src/org/moparscape/msc/ls/net/PacketQueue.java index ed4ee6d..fa41932 100644 --- a/LoginServer/src/org/moparscape/msc/ls/net/PacketQueue.java +++ b/LoginServer/src/org/moparscape/msc/ls/net/PacketQueue.java @@ -7,37 +7,38 @@ import java.util.List; * Synchronized packet queue */ public class PacketQueue { - /** - * The list of packets in the queue - */ - private ArrayList packets = new ArrayList(); + /** + * The list of packets in the queue + */ + private ArrayList packets = new ArrayList(); - /** - * Adds a packet to the queue - */ - public void add(T p) { - synchronized (packets) { - packets.add(p); + /** + * Adds a packet to the queue + */ + public void add(T p) { + synchronized (packets) { + packets.add(p); + } } - } - /** - * Returns the packets currently in the list and removes them from the - * backing store - */ - public List getPackets() { - List tmpList; - synchronized (packets) { - tmpList = (List) packets.clone(); - packets.clear(); + /** + * Returns the packets currently in the list and removes them from the + * backing store + */ + @SuppressWarnings("unchecked") + public List getPackets() { + List tmpList; + synchronized (packets) { + tmpList = (List) packets.clone(); + packets.clear(); + } + return tmpList; } - return tmpList; - } - /** - * Returns if there is packets to process - */ - public boolean hasPackets() { - return !packets.isEmpty(); - } + /** + * Returns if there is packets to process + */ + public boolean hasPackets() { + return !packets.isEmpty(); + } } diff --git a/LoginServer/src/org/moparscape/msc/ls/packethandler/frontend/AuctionHouse.java b/LoginServer/src/org/moparscape/msc/ls/packethandler/frontend/AuctionHouse.java index 96a922b..f61ebd1 100644 --- a/LoginServer/src/org/moparscape/msc/ls/packethandler/frontend/AuctionHouse.java +++ b/LoginServer/src/org/moparscape/msc/ls/packethandler/frontend/AuctionHouse.java @@ -1,7 +1,6 @@ package org.moparscape.msc.ls.packethandler.frontend; import java.util.ArrayList; -import java.io.DataInput; import org.apache.mina.common.IoSession; import org.moparscape.msc.ls.Server; diff --git a/LoginServer/src/org/moparscape/msc/ls/util/PersistenceManager.java b/LoginServer/src/org/moparscape/msc/ls/util/PersistenceManager.java index a0de85a..daa556a 100644 --- a/LoginServer/src/org/moparscape/msc/ls/util/PersistenceManager.java +++ b/LoginServer/src/org/moparscape/msc/ls/util/PersistenceManager.java @@ -42,9 +42,9 @@ public class PersistenceManager { Properties aliases = new Properties(); FileInputStream fis = new FileInputStream(new File(Config.CONF_DIR, "aliases.xml")); aliases.loadFromXML(fis); - for (Enumeration e = aliases.propertyNames(); e.hasMoreElements();) { + for (Enumeration e = aliases.propertyNames(); e.hasMoreElements();) { String alias = (String) e.nextElement(); - Class c = Class.forName((String) aliases.get(alias)); + Class c = Class.forName((String) aliases.get(alias)); xstream.alias(alias, c); } } catch (Exception ioe) {