예제 #1
0
        public void addFriend(long name)
        {
            Player friend = null;

            if (friends.Count >= 200)
            {
                player.getPackets().sendMessage("Your friends list is full.");
                return;
            }
            if (friends.Contains((long)name))
            {
                player.getPackets().sendMessage(misc.formatPlayerNameForDisplay(misc.longToPlayerName(name)) + " is already on your friends list.");
                return;
            }
            friends.Add((long)name);
            foreach (Player p in Server.getPlayerList())
            {
                if (p != null)
                {
                    if (p.getLoginDetails().getLongName() == name)
                    {
                        friend = p;
                    }
                }
            }
            if (friend != null)
            {
                if (privateStatus != STATUS.OFF)
                {
                    friend.getFriends().registered(player);
                }
                Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
                if (clan != null)
                {
                    clan.getOwnerFriends().Add(name);
                    if (clan.getUser(friend) != null)
                    {
                        if (clan.getUser(friend).getClanRights() == Clan.ClanRank.NO_RANK)
                        {
                            clan.getUser(friend).setClanRights(Clan.ClanRank.FRIEND);
                            Server.getClanManager().updateClan(clan);
                        }
                    }
                }
                if (friend.getFriends().getPrivateStatus() == STATUS.OFF || (friend.getFriends().getPrivateStatus() == STATUS.FRIENDS && !friend.getFriends().isFriend(player)))
                {
                    return;
                }
                player.getPackets().sendFriend(name, getWorld(name));
            }
        }
예제 #2
0
	    public Clan(Player p, string name, string owner) {
		    this.name = name;
		    this.owner = owner;
		    this.own = p;
		    this.users = new List<ClanUser>(100);
		    this.ownerFriends = p.getFriends().getFriendsList();
		    this.usersWithRank = new Dictionary<string, ClanRank>(250);
		    this.kickRights = ClanRank.OWNER;
		    this.enterRights = ClanRank.NO_RANK;
		    this.talkRights = ClanRank.NO_RANK;
	    }
예제 #3
0
        public void removeFriend(long name)
        {
            Player friend = null;

            foreach (Player p in Server.getPlayerList())
            {
                if (p != null)
                {
                    if (p.getLoginDetails().getLongName() == name)
                    {
                        friend = p;
                    }
                }
            }
            if (friend == null)
            {
                return;
            }
            if (privateStatus == STATUS.FRIENDS)
            {
                friend.getFriends().unregistered(player);
            }
            Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());

            if (clan != null)
            {
                clan.getOwnerFriends().Remove(name);
                if (clan.getUser(friend) != null)
                {
                    if (clan.getUser(friend).getClanRights() == Clan.ClanRank.FRIEND)
                    {
                        clan.getUser(friend).setClanRights(Clan.ClanRank.NO_RANK);
                        Server.getClanManager().updateClan(clan);
                    }
                }
            }
            friends.Remove((long)name);
        }
	    private void handleDeleteFriend(Player player, Packet packet) {
		    long name = packet.readLong();
		    if (name > 0) {
			    player.getFriends().removeFriend(name);
		    }
	    }
	    private void handlePrivacySettings(Player player, Packet packet) {
		    int publicStatus = packet.readByte();
		    int privateStatus = packet.readByte();
		    int tradeStatus = packet.readByte();
		    player.getFriends().setPrivacyOption((Friends.STATUS)publicStatus, (Friends.STATUS)privateStatus, (Friends.STATUS)tradeStatus);
	    }
	    private void handleSendPm(Player player, Packet packet) {
		    long name = packet.readLong();
		    byte[] privateMsgPacked = packet.getRemainingData();
            string privateMsg = misc.textUnpack(privateMsgPacked);
		    if (privateMsg != null && name > 0) {
                player.getFriends().sendMessage(name, privateMsg, privateMsgPacked);
		    }
	    }
	    private void handleAddIgnore(Player player, Packet packet) {
		    long name = packet.readLong();
		    if (name > 0) {
			    player.getFriends().addIgnore(name);
		    }
	    }
	    private void handleActionButton(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
            ushort buttonId = packet.readUShort();
            ushort buttonId2 = 0;
		    if(packet.getLength() >= 6) {
                buttonId2 = packet.readUShort();
		    }
		    if(buttonId2 == 65535) {
			    buttonId2 = 0;
		    }
		    Console.WriteLine("button = " + interfaceId + " " +buttonId + " " +buttonId2);
		    switch(interfaceId) {
			    case 751: 
                    switch(buttonId) {
                        case 27: // Report Abuse button click
                            //This is just a test. (you need to code a Static Handler for ReportAbuse.
                            player.getPackets().displayInterface(553); //Opens Report Abuse box
				            break;
                    }
                    break;
			    case 374: // Tzhaar fight pits viewing orb
				    Server.getMinigames().getFightPits().useOrb(player, buttonId);
				    break;

                case 389: // GE Item Search "X" for closing it.
                    player.getPackets().sendInterface(0, 752, 6, 137); // Removes the item search
                    break;

			    case 107: // GE Sell inventory.
				    if (player.getGESession() == null) {
					    break;
				    }
				    switch(buttonId) {
					    case 18: // Offer
						    player.getGESession().offerSellItem(buttonId2);
						    break;
				    }
				    break;
			
			    case 105: // GE interface
				    if (player.getGESession() == null) {
					    break;
				    }
				    switch(buttonId) {
					    case 209: // Collect-notes
						    player.getGESession().collectSlot1(true);
						    break;
				
					    case 203: // Abort offer
						    player.getGESession().abortOffer();
						    break;
						
					    case 31: // Sell, box 1
						    player.getGESession().newSellOffer(0);
						    break;
				
					    case 30: // Buy, box 1
						    player.getGESession().newBuyOffer(0);
						    break;
						
					    case 18: // Check status, box 1
						    player.getGESession().checkOffer(0);
						    break;
						
					    case 46: // Buy, box 2
						    player.getGESession().newBuyOffer(1);
						    break;
						
					    case 47: // Sell, box 2
						    player.getGESession().newSellOffer(1);
						    break;
						
					    case 34: // Check status, box 2
						    player.getGESession().checkOffer(1);
						    break;
						
					    case 62: // Buy, box 3
						    player.getGESession().newBuyOffer(2);
						    break;
						
					    case 63: // Sell, box 3
						    player.getGESession().newSellOffer(2);
						    break;
						
					    case 50: // Check status, box 3
						    player.getGESession().checkOffer(2);
						    break;
						
					    case 81: // Buy, box 4
						    player.getGESession().newBuyOffer(3);
						    break;
						
					    case 82: // Sell, box 4
						    player.getGESession().newSellOffer(3);
						    break;
						
					    case 69: // Check status, box 4
						    player.getGESession().checkOffer(3);
						    break;
						
					    case 100: // Buy, box 5
						    player.getGESession().newBuyOffer(4);
						    break;
						
					    case 101: // Sell, box 5
						    player.getGESession().newSellOffer(4);
						    break;
						
					    case 88: // Check status, box 5
						    player.getGESession().checkOffer(4);
						    break;
						
					    case 119: // Buy, box 6
						    player.getGESession().newBuyOffer(5);
						    break;
						
					    case 120: // Sell, box 6
						    player.getGESession().newSellOffer(5);
						    break;
						
					    case 107: // Check status, box 6
						    player.getGESession().checkOffer(5);
						    break;
						
					    case 127: // The "back" button
                            player.getGESession().goBackToGrandExchange();
						    break;
						
					    case 194: // Search for item
						    player.getGESession().openItemSearch();
						    break;
						
					    case 159: // Increment amount by 1
						    player.getGESession().incrementAmount(1, false);
						    break;
						
					    case 157: // Decrease amount by 1
						    player.getGESession().decreaseAmount(1);
						    break;
						
					    case 162: // Increase amount by +1
                            player.getGESession().incrementAmount(1, true);
						    break;
						
					    case 164: // Increase amount by +10
                            player.getGESession().incrementAmount(10, true);
						    break;
						
					    case 166: // Increase amount by +100
                            player.getGESession().incrementAmount(100, true);
						    break;
						
					    case 168: // Increase amount by +1k (or All if selling)
						    player.getGESession().incrementAmount(1000, true);
						    break;
						case 170: //custom enter quantity
                            player.getPackets().displayEnterAmount();
                            player.setTemporaryAttribute("interfaceVariable", new EnterVariable(105, 0));
                            break;
                        case 185: //custom enter per price
                            player.getPackets().displayEnterAmount();
                            player.setTemporaryAttribute("interfaceVariable", new EnterVariable(105, 1));
                            break;

					    case 177: // Set price to minimum
						    player.getGESession().setPrice(0);
						    break;
						
					    case 180: // Set price to medium
						    player.getGESession().setPrice(1);
						    break;
						
					    case 183: // Set price to maximum
						    player.getGESession().setPrice(2);
						    break;
						
					    case 171: // Set price -1
						    player.getGESession().setPrice(3);
						    break;
						
					    case 173: // Set price +1
						    player.getGESession().setPrice(4);
						    break;
						
					    case 190: // Confirm offer
						    player.getGESession().confirmOffer();
						    break;
				    }
				    break;
			
			    case 161: // Slayer points interfaces
			    case 163:
			    case 164:
				    Slayer.handlePointsInterface(player, interfaceId, buttonId);
				    break;
			
		
			    case 675: // Craft jewellery:
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(675, buttonId));
				    break;
		
			    case 154: // Craft normal leather.
				    Leather.craftNormalLeather(player, buttonId, 1, true);
				    break;
				
			    case 542: // Craft glass.
				    switch (buttonId) {
					    case 40: // Make 1 beer glass.
						    Glass.craftGlass(player, 1, 0, true);
						    break;
						
					    case 41: // Make 1 candle lantern.
						    Glass.craftGlass(player, 1, 1, true);
						    break;
						
					    case 42: // Make 1 oil lamp.
						    Glass.craftGlass(player, 1, 2, true);
						    break;
						
					    case 38: // Make 1 vial.
						    Glass.craftGlass(player, 1, 3, true);
						    break;
						
					    case 44: // Make 1 Fishbowl
						    Glass.craftGlass(player, 1, 4, true);
						    break;
						
					    case 39: // Make 1 orb.
						    Glass.craftGlass(player, 1, 5, true);
						    break;
						
					    case 43: // Make 1 lantern lens
						    Glass.craftGlass(player, 1, 6, true);
						    break;
						
					    case 45: // Make 1 dorgeshuun light orb.
						    Glass.craftGlass(player, 1, 7, true);
						    break;
				    }
				    break;
			
			    case 271 : // Prayer tab.
				    if (!Prayer.canUsePrayer(player, buttonId)) {
					    Prayer.deactivateAllPrayers(player);
					    break;
				    }
				    switch(buttonId) {
					    case 5: // Thick skin.
						    Prayer.togglePrayer(player, PrayerData.Prayer.THICK_SKIN);
						    break;
						
					    case 15: // Rock skin.
                            Prayer.togglePrayer(player, PrayerData.Prayer.ROCK_SKIN);
						    break;
						
					    case 31: // Steel skin.
                            Prayer.togglePrayer(player, PrayerData.Prayer.STEEL_SKIN);
						    break;
						
					    case 7: // Burst of strength.
                            Prayer.togglePrayer(player, PrayerData.Prayer.BURST_OF_STRENGTH);
						    break;
						
					    case 17: // Superhuman strength.
                            Prayer.togglePrayer(player, PrayerData.Prayer.SUPERHUMAN_STRENGTH);
						    break;
						
					    case 33: // Ultimate strength.
                            Prayer.togglePrayer(player, PrayerData.Prayer.ULTIMATE_STRENGTH);
						    break;
						
					    case 9: // Clarity of thought.
                            Prayer.togglePrayer(player, PrayerData.Prayer.CLARITY_OF_THOUGHT);
						    break;
						
					    case 19: // Improved reflexes.
                            Prayer.togglePrayer(player, PrayerData.Prayer.IMPROVED_REFLEXES);
						    break;
						
					    case 35: // Incredible reflexes.
						    Prayer.togglePrayer(player, PrayerData.Prayer.INCREDIBLE_REFLEXES);
						    break;
						
					    case 37: // Magic protect.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_FROM_MAGIC);
						    break;
						
					    case 39: // Ranged protect.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_FROM_RANGED);
						    break;
						
					    case 41: // Melee protect.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_FROM_MELEE);
						    break;
						
					    case 47: // Retribution.
                            Prayer.togglePrayer(player, PrayerData.Prayer.RETRIBUTION);
						    break;
						
					    case 49: // Redemption.
                            Prayer.togglePrayer(player, PrayerData.Prayer.REDEMPTION);
						    break;
						
					    case 51: // Smite.
                            Prayer.togglePrayer(player, PrayerData.Prayer.SMITE);
						    break;
						
					    case 55: // Chivalry.
                            Prayer.togglePrayer(player, PrayerData.Prayer.CHIVALRY);
						    break;
						
					    case 57: // Piety.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PIETY);
						    break;
						
					    case 25: // Protect item.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_ITEM);
						    break;
						
					    case 21: // Rapid restore
                            Prayer.togglePrayer(player, PrayerData.Prayer.RAPID_RESTORE);
						    break;
						
					    case 23: // Rapid heal.
                            Prayer.togglePrayer(player, PrayerData.Prayer.RAPID_HEAL);
						    break;
						
					    case 11: // Sharp eye.
                            Prayer.togglePrayer(player, PrayerData.Prayer.SHARP_EYE);
						    break;
						
					    case 27: // Hawk Eye.
                            Prayer.togglePrayer(player, PrayerData.Prayer.HAWK_EYE);
						    break;
						
					    case 43: // Eagle Eye.
                            Prayer.togglePrayer(player, PrayerData.Prayer.EAGLE_EYE);
						    break;
						
					    case 13: // Mystic will.
                            Prayer.togglePrayer(player, PrayerData.Prayer.MYSTIC_WILL);
						    break;
						
					    case 29: // Mystic Lore.
                            Prayer.togglePrayer(player, PrayerData.Prayer.MYSTIC_LORE);
						    break;
						
					    case 45: // Mystic Might.
                            Prayer.togglePrayer(player, PrayerData.Prayer.MYSTIC_MIGHT);
						    break;
				    }
				    break;
				
			    case 90: // Staff attack interface.
				    switch(buttonId) {
					    case 5: // Select spell (Magic XP)
						    MagicData.configureSelectSpellInterface(player);
						    break;
						
					    case 9: // Auto retaliate.
						    player.toggleAutoRetaliate();
						    break;
						
 					    default:
 						    MagicData.cancelAutoCast(player, true);
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
				    }
				    break;
				
			    case 388: // Ancient magic autocast select spell.
				    switch(buttonId) {
					    case 0: // Smoke rush.
						    MagicData.setAutoCastSpell(player, 16, 8, true);
						    break;
						
					    case 1: // Shadow rush.
						    MagicData.setAutoCastSpell(player, 17, 12, true);
						    break;
						
					    case 2: // Blood rush.
						    MagicData.setAutoCastSpell(player, 18, 4, true);
						    break;
						
					    case 3: // Ice rush.
						    MagicData.setAutoCastSpell(player, 19, 0, true);
						    break;
											
					    case 4: // Smoke burst.
						    MagicData.setAutoCastSpell(player, 20, 10, true);
						    break;
						
					    case 5: // Shadow burst.
						    MagicData.setAutoCastSpell(player, 21, 14, true);
						    break;
						
					    case 6: // Blood burst.
						    MagicData.setAutoCastSpell(player, 22, 6, true);
						    break;
						
					    case 7: // Ice burst.
						    MagicData.setAutoCastSpell(player, 23, 2, true);
						    break;
						
					    case 8: // Smoke blitz.
						    MagicData.setAutoCastSpell(player, 24, 9, true);
						    break;
						
					    case 9: // Shadow blitz.
						    MagicData.setAutoCastSpell(player, 25, 13, true);
						    break;
						
					    case 10: // Blood blitz.
						    MagicData.setAutoCastSpell(player, 26, 5, true);
						    break;
						
					    case 11: // Ice blitz.
						    MagicData.setAutoCastSpell(player, 27, 1, true);
						    break;

					    case 12: // Smoke barrage.
						    MagicData.setAutoCastSpell(player, 28, 11, true);
						    break;
						
					    case 13: // Shadow barrage.
						    MagicData.setAutoCastSpell(player, 29, 15, true);
						    break;
						
					    case 14: // Blood barrage.
						    MagicData.setAutoCastSpell(player, 30, 7, true);
						    break;
						
					    case 15: // Ice barrage.
						    MagicData.setAutoCastSpell(player, 31, 3, true);
						    break;

					    case 16: // Cancel.
                            MagicData.cancelAutoCast(player, false);
						    break;
				    }
				    break;
				
			    case 406: // Void knight mace autocast select spell.
				    switch(buttonId) {
					    case 0: // Crumble undead.
						    MagicData.setAutoCastSpell(player, 32, 22, false);
						    break;
						
					    case 1: // Guthix claws.
						    MagicData.setAutoCastSpell(player, 34, 42, false);
						    break;
						
					    case 2: // Wind wave.
						    MagicData.setAutoCastSpell(player, 12, 45, false);
						    break;
						
					    case 3: // Water wave.
						    MagicData.setAutoCastSpell(player, 13, 48, false);
						    break;
						
					    case 4: // Earth wave.
						    MagicData.setAutoCastSpell(player, 14, 52, false);
						    break;
						
					    case 5: // Fire wave.
						    MagicData.setAutoCastSpell(player, 15, 55, false);
						    break;
					
					    case 6: // Cancel.
						    MagicData.cancelAutoCast(player, false);
						    break;
			    }
			    break;
				
			    case 310: // Slayer staff autocast select spell.
				    switch(buttonId) {
					    case 0: // Crumble undead.
						    MagicData.setAutoCastSpell(player, 32, 22, false);
						    break;
						
					    case 1: // Slayer dart.
						    MagicData.setAutoCastSpell(player, 33, 31, false);
						    break;
						
					    case 2: // Wind wave.
                            MagicData.setAutoCastSpell(player, 12, 45, false);
						    break;
						
					    case 3: // Water wave.
                            MagicData.setAutoCastSpell(player, 13, 48, false);
						    break;
						
					    case 4: // Earth wave.
                            MagicData.setAutoCastSpell(player, 14, 52, false);
						    break;
						
					    case 5: // Fire wave.
                            MagicData.setAutoCastSpell(player, 15, 55, false);
						    break;
					
					    case 6: // Cancel.
                            MagicData.cancelAutoCast(player, false);
						    break;
				    }
				    break;
				
			    case 319: // Normal magic autocast select spell.
				    switch(buttonId) {
					    case 0: // Wind strike.
                            MagicData.setAutoCastSpell(player, 0, 1, false);
						    break;
						
					    case 1: // Water strike.
                            MagicData.setAutoCastSpell(player, 1, 4, false);
						    break;
						
					    case 2: // Earth strike.
                            MagicData.setAutoCastSpell(player, 2, 6, false);
						    break;
						
					    case 3: // Fire strike.
                            MagicData.setAutoCastSpell(player, 3, 8, false);
						    break;
						
					    case 4: // Wind bolt.
                            MagicData.setAutoCastSpell(player, 4, 10, false);
						    break;
						
					    case 5: // Water bolt.
                            MagicData.setAutoCastSpell(player, 5, 14, false);
						    break;
						
					    case 6: // Earth bolt.
                            MagicData.setAutoCastSpell(player, 6, 17, false);
						    break;
						
					    case 7: // Fire bolt.
                            MagicData.setAutoCastSpell(player, 7, 20, false);
						    break;
						
					    case 8: // Wind blast.
                            MagicData.setAutoCastSpell(player, 8, 24, false);
						    break;
						
					    case 9: // Water blast.
                            MagicData.setAutoCastSpell(player, 9, 27, false);
						    break;
						
					    case 10: // Earth blast.
                            MagicData.setAutoCastSpell(player, 10, 33, false);
						    break;
						
					    case 11: // Fire blast.
                            MagicData.setAutoCastSpell(player, 11, 38, false);
						    break;

					    case 12: // Wind wave.
                            MagicData.setAutoCastSpell(player, 12, 45, false);
						    break;
						
					    case 13: // Water wave.
                            MagicData.setAutoCastSpell(player, 13, 48, false);
						    break;
						
					    case 14: // Earth wave.
                            MagicData.setAutoCastSpell(player, 14, 52, false);
						    break;
						
					    case 15: // Fire wave.
                            MagicData.setAutoCastSpell(player, 15, 55, false);
						    break;
						
					    case 16: // Cancel.
                            MagicData.cancelAutoCast(player, false);
						    break;
				    }
				    break;
		
			    case 182: // Logout tab.
				    player.getPackets().logout();
				    break;
			
			    case 261: // Settings tab.
				    switch(buttonId) {
					    case 16: // Display settings.
						    player.getPackets().displayInterface(742);
						    break;
						
					    case 18: // Audio settings.
						    player.getPackets().displayInterface(743);
						    break;
		
					    case 3: // Run toggle.
						    if(!player.getWalkingQueue().isRunToggled()) {
							    player.getWalkingQueue().setRunToggled(true);
							    player.getPackets().sendConfig(173, 1);
						    } else {
							    player.getWalkingQueue().setRunToggled(false);
							    player.getPackets().sendConfig(173, 0);
						    }
						    break;
						
					    case 4: // Chat effect toggle.
						    if(!player.isChatEffectsEnabled()) {
							    player.setChatEffectsEnabled(true);
							    player.getPackets().sendConfig(171, 0);
						    } else {
							    player.setChatEffectsEnabled(false);
							    player.getPackets().sendConfig(171, 1);
						    }
						    break;
						
					    case 5: // Split private chat toggle.
						    if(!player.isPrivateChatSplit()) {
							    player.setPrivateChatSplit(true);
							    player.getPackets().sendConfig(287, 1);
						    } else {
							    player.setPrivateChatSplit(false);
							    player.getPackets().sendConfig(287, 0);
						    }
						    break;
						
					    case 7: // Accept aid toggle.
						    if(!player.isAcceptAidEnabled()) {
							    player.setAcceptAidEnabled(true);
							    player.getPackets().sendConfig(427, 1);
						    } else {
							    player.setAcceptAidEnabled(false);
							    player.getPackets().sendConfig(427, 0);
						    }
						    break;
						
					    case 6: // Mouse buttons toggle.
						    if(!player.isMouseTwoButtons()) {
							    player.setMouseTwoButtons(true);
							    player.getPackets().sendConfig(170, 0);
						    } else {
							    player.setMouseTwoButtons(false);
							    player.getPackets().sendConfig(170, 1);
						    }
						    break;
				    }
				    break;
				
			    case 589: // Clan chat 
				    if (buttonId == 9) {
					    foreach(long friend in player.getFriends().getFriendsList()) {
						    player.getPackets().sendFriend(friend, player.getFriends().getWorld(friend));
					    }
					    Server.getClanManager().openClanSetup(player);
					    break;
				    }
				    break;
				
			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    break;
				    }
				    switch(buttonId) {
					    case 22: // Clan name
						    player.getPackets().displayEnterText("Enter clan name :");
						    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(590, 0));
						    break;
						
	 				    case 23: // "Who can enter chat" - anyone.
                            clan.setEnterRights(Clan.ClanRank.NO_RANK);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - anyone.
                            clan.setTalkRights(Clan.ClanRank.NO_RANK);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - anyone.
                            clan.setLootRights(Clan.ClanRank.NO_RANK);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
				    }
				    break;
				
			    case 763: // Bank inventory
				    switch(buttonId) {
					    case 0: // Deposit 1.
						    player.getBank().deposit(buttonId2, 1);
						    player.getBank().refreshBank();
						    break;
				    }
				    break;
				
			    case 762: // Bank
				    switch(buttonId) {		
					    case 73: // withdraw 1.
						    player.getBank().withdraw(buttonId2, 1);
						    player.getBank().refreshBank();
						    break;
						
					    case 16: // Note item.
						    player.getBank().asNote();
						    break;
						
					    case 41: // first (main) bank tab
						    player.getBank().setCurrentTab(10);
						    break;
						
					    case 39: // first bank tab
						    player.getBank().setCurrentTab(2);
						    break;
						
					    case 37: // second bank tab
						    player.getBank().setCurrentTab(3);
						    break;
						
					    case 35: // third bank tab
						    player.getBank().setCurrentTab(4);
						    break;
						
					    case 33: // fourth bank tab
						    player.getBank().setCurrentTab(5);
						    break;
						
					    case 31: // fifth bank tab
						    player.getBank().setCurrentTab(6);
						    break;
						
					    case 29: // sixth bank tab
						    player.getBank().setCurrentTab(7);
						    break;
						
					    case 27: // seventh bank tab
						    player.getBank().setCurrentTab(8);
						    break;
						
					    case 25: // eighth bank tab
						    player.getBank().setCurrentTab(9);
						    break;
				    }
				    break;
				
			    case 626: // Stake duel confirmation interface.
				    if (buttonId == 53) {
					    if (player.getDuel() != null) {
						    player.getDuel().acceptDuel();
						    break;
					    }
				    }
				    break;
				
			    case 631: // Stake duel first interface.
				    if (player.getDuel() != null) {
					    if (buttonId == 103) {
						    player.getDuel().removeItem(buttonId2, 1);
						    break;
					    } else {
						    player.getDuel().toggleDuelRules(buttonId);
						    break;
					    }
				    }
				    break;
				
			    case 387: // Equipment tab. 
				    switch(buttonId) {
					    case 55: // Character display.
						    player.getEquipment().displayEquipmentScreen();
						    break;
						
					    case 52: // Items kept on death.
						    ProtectedItems.displayItemsInterface(player);
						    break;
				    }
				    break;
				
			    case 274: // Quest tab.
				    switch(buttonId) {
					    case 3: // Achievment diary toggle.
						    player.getPackets().sendTab(85, 259);
						    player.setAchievementDiaryTab(true);
						    break;
				    }
				    break;
				
			    case 259: // Achievment diary tab.
				    switch(buttonId) {
					    case 8: // Quest tab toggle.
						    player.getPackets().sendTab(85, 274);
						    player.setAchievementDiaryTab(false);
						    break;
				    }
				    break;
				
			    case 620: // Shop interface.
				    if (player.getShopSession() == null) {
					    return;
				    }
				    switch(buttonId) {
					    case 26: // Player stock tab.
						    player.getShopSession().openPlayerShop();
						    break;
						
					    case 25: // Main stock tab.
						    player.getShopSession().openMainShop();
						    break;
						
					    case 23: // Value (main stock)	
					    case 24: // Value (player stock)
						    player.getShopSession().valueItem(buttonId2, false);
						    break;
				    }
				    break;
				
			    case 621: // Shop inventory.
				    if (player.getShopSession() == null) {
					    return;
				    }
				    switch(buttonId) {
					    case 0: // Value (player stock)
						    player.getShopSession().valueItem(buttonId2, true);
						    break;
				    }
				    break;
				
			    case 192: // Normal Magic tab.
				    switch(buttonId) {
					    case 0: // Home Teleport.
						    Teleport.homeTeleport(player);
						    break;
						
					    case 15: // Varrock teleport.
						    Teleport.teleport(player, 0);
						    break;
						
					    case 18: // Lumbridge teleport.
						    Teleport.teleport(player, 1);
						    break;
						
					    case 21: // Falador teleport.
						    Teleport.teleport(player, 2);
						    break;
						
					    case 23: // POH teleport.
						    player.getPackets().sendMessage("This teleport is unavailable.");
						    break;
						
					    case 26: // Camelot teleport.
						    Teleport.teleport(player, 3);
						    break;
						
					    case 32: // Ardougne teleport.
						    Teleport.teleport(player, 4);
						    break;
						
					    case 37: // Watchtower teleport.
						    player.getPackets().sendMessage("This teleport is unavailable.");
						    //Teleport.teleport(player, 5);
						    break;
						
					    case 44: // Trollheim teleport.
						    Teleport.teleport(player, 6);
						    break;
						
					    case 47: // Ape Atoll teleport.
						    player.getPackets().sendMessage("This teleport is unavailable.");
						    break;
						
					    case 58: // Charge.
						    MagicCombat.castCharge(player);
						    break;
				    }
				    break;
				
			    case 193: // Ancient magic tab.
				    switch(buttonId) {
					    case 20: // Paddewwa teleport.
						    Teleport.teleport(player, 7);
						    break;
						
					    case 21: // Senntisten teleport.
						    Teleport.teleport(player, 8);
						    break;
						
					    case 22: // Kharyrll teleport.
						    Teleport.teleport(player, 9);
						    break;
						
					    case 23: // Lassar teleport.
						    Teleport.teleport(player, 10);
						    break;
						
					    case 24: // Dareeyak teleport.
						    Teleport.teleport(player, 11);
						    break;
						
					    case 25: // Carrallanger teleport.
						    Teleport.teleport(player, 12);
						    break;
						
					    case 27: // Ghorrock teleport.
						    Teleport.teleport(player, 14);
						    break;
						
					    case 26: // Annakarl teleport.
						    Teleport.teleport(player, 13);
						    break;
						
					    case 28: // Ancients Home teleport.
						    Teleport.homeTeleport(player);
						    break;
				    }
				    break;
				
			    case 13: // Bank pin buttons.
				    if (buttonId == 29) {
					    player.getBank().forgotPin();
					    break;
				    }
				    player.getBank().handleEnterPin(buttonId);
				    break;
				
			    case 14: // Bank pin settings.
				    switch(buttonId) {
					    case 60: // Set new bank pin.
						    player.getBank().displayFirstConfirmation();
						    break;
					
					    case 61: // Change recovery delay.
						    player.getBank().changePinDelay();
						    break;
						
					    case 91: // "No, I might forget it!".
						    if (player.getBank().isPinPending()) {
							    player.getBank().cancelPendingPin();
							    break;
						    }
						    player.getBank().openPinSettings(2);
						    break;
						
					    case 89: // Yes i want to set a pin.
						    if (player.getBank().isPinPending()) {
							    player.getBank().verifyPin(true);
							    break;
						    }
						    player.getBank().openEnterPin();
						    break;
						
					    case 65: // Cancel pin that's pending.
						    player.getBank().openPinSettings(4);
						    break;
						
					    case 62: // Change pin.
						    player.getBank().changePin();
						    break;
						
					    case 63: // Delete pin.
						    player.getBank().deletePin();
						    break;
				    }
				    break;
				
			    case 464: // Emote tab.
				    Emotes.emote(player, buttonId);
				    break;
				
 			    case 320: // Skills Tab.
				    SkillMenu.display(player, buttonId);
				    break;
				
 			    case 499: // Skill menu side menu.
 				    SkillMenu.subMenu(player, buttonId);
 				    break;

 			    case 336: // Trade/duel inventory - trade 1.
 				    if (player.getTrade() != null) {
 					    player.getTrade().tradeItem(buttonId2, 1);
 					    break;
 				    }
 				    if (player.getDuel() != null) {
 					    player.getDuel().stakeItem(buttonId2, 1);
 					    break;
 				    }
 				    break;
 				
 			    case 335: // Trade interface.
 				    if (player.getTrade() == null) {
 					    break;
 				    }
				    switch(buttonId) {
					    case 16: // Accept trade.
						    player.getTrade().accept();
						    break;
						
					    case 18: // Decline trade.
						    player.getTrade().decline();
						    break;
						
					    case 30: // Offer 1
						    player.getTrade().removeItem(buttonId2, 1);
						    break;
				    }
 				    break;
 				
 			    case 334: // Trade confirmation.
 				    if (player.getTrade() == null) {
 					    break;
 				    }
 				    switch(buttonId) {
	 				    case 21: // Decline trade.
	 					    player.getTrade().decline();
						    break;
						
	 				    case 20: // Accept trade.
	 					    player.getTrade().accept();
	 					    break;
	 			    }
 				    break;
 				
 			    case 750: // Run button
				    if(!player.getWalkingQueue().isRunToggled()) {
					    player.getWalkingQueue().setRunToggled(true);
					    player.getPackets().sendConfig(173, 1);
				    } else {
					    player.getWalkingQueue().setRunToggled(false);
					    player.getPackets().sendConfig(173, 0);
				    }
				    break;
				
 			    case 667: // Equipment/bonuses interface.
 				    if (buttonId == 14) {
                        player.getEquipment().unequipItem((ItemData.EQUIP)buttonId2);
 					    break;
 				    }
 				    break;
				
 			    case 771: // Character design interface.
 				    ConfigureAppearance.sortButton(player, buttonId);
 				    break;
 				
 			    case 311: // Smelt interface.
 				    Smelting.smeltOre(player, buttonId, true, -1);
 				    break;
 				
 			    case 300: // Bar smithing interface.
 				    Smithing.smithItem(player, buttonId, 1, true);
 				    break;
 				
 			    case 92: // Unarmed attack interface.
 				    switch(buttonId) {			
 					    case 24: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 85: // Spear attack interface.
 				    switch(buttonId) {
					    case 8: // Special attack.
						    player.getSpecialAttack().toggleSpecBar();
						    break;
						
					    case 24: // Auto retaliate.
						    player.toggleAutoRetaliate();
						    break;
						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 93: // Whip attack interface.
 				    switch(buttonId) {
 					    case 8: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 24: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 89: // Dagger attack interface.
 				    switch(buttonId) {					
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 82: // Longsword/scimitar attack interface.
 				    switch(buttonId) {					
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 78: // Claw attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 81: // Godsword attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 88: // Mace attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 76: // Granite maul attack interface.
 				    switch(buttonId) {
 					    case 8: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 24: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 77: // Bow attack interface.
 				    switch(buttonId) {					
 					    case 11: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 27: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 75: // Battleaxe attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    player.getSpecialAttack().dragonBattleaxe();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 91: // Thrown weapon
 				    switch(buttonId) {
					    case 24: // Auto retaliate.
						    player.toggleAutoRetaliate();
						    break;
						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
				    }
 				    break;
 				
 			    case 430: // Lunar interface
 				    switch(buttonId) {	
	 				    case 14: // Vengeance
	 					    Lunar.castLunarSpell(player, buttonId);
	 					    break;
 				    }
 				    break;
 				
 			    case 102: // Items on death interface
 				    if (buttonId == 18)
 					    player.getPackets().sendMessage("You will keep this item if you should you die.");
 				    else
 					    player.getPackets().sendMessage("You will lose this item if you should you die.");
 				    break;
 				
			    default:
				    if (interfaceId != 548 && interfaceId != 751) {
					    Console.WriteLine("Unhandled ActionButton : " + interfaceId + " " + buttonId + " " + buttonId2);
				    }
				    break;
		    }
	    }
예제 #9
0
        /**
         * Unregister a player.
         * @param p as Player
         */
        public static void unregister(Player p)
        {
            if (p.getTrade() != null)
            {
                p.getTrade().decline();
                p.setTrade(null);
            }
            minigames.getFightPits().removeWaitingPlayer(p);
            minigames.getFightPits().removePlayingPlayer(p);
            if (p.getTemporaryAttribute("cantDoAnything") != null && Location.inFightPits(p.getLocation()))
            {
                minigames.getFightPits().useOrb(p, 5);
                return;
            }
            if (Location.inFightPits(p.getLocation()))
            {
                Server.getMinigames().getFightPits().teleportToWaitingRoom(p, false);
                return;
            }
            if (p.getFightCave() != null)
            {
                if (!p.getFightCave().isGamePaused())
                {
                    p.getFightCave().teleFromCave(true);
                    return;
                }
                else
                {
                    p.setLocation(new Location(2439, 5169, 0));
                }
            }
            if (!Combat.isXSecondsSinceCombat(p, p.getLastAttacked(), 10000) || p.isDead() || p.getTemporaryAttribute("unmovable") != null)
            {
                return;
            }
            if (p.getDuel() != null)
            {
                if (p.getDuel().getStatus() == 8)
                {
                    if (p.getDuel().getWinner().Equals(p))
                    {
                        p.getDuel().recieveWinnings(p);
                    }
                }
                else
                {
                    if (p.getDuel().getStatus() == 5 || p.getDuel().getStatus() == 6)
                    {
                        p.getDuel().finishDuel(true, true);
                    }
                }
            }
            removeAllPlayersNPCs(p);

           
            foreach(Player p2 in players) {
                if(p == p2) continue;
                //Remove me from anyone who has Seen me.. or attempting to see me (new players).
                if (p2.getLocalEnvironment().getSeenPlayers().Contains(p) || p2.getLocalEnvironment().getNewPlayers().Contains(p))
                    p2.getLocalEnvironment().getRemovedPlayers().Add(p);
            }

            clanManager.leaveChannel(p);
            loginHandler.addSavePlayer(p);
            players.Remove(p);
            p.getFriends().unregistered();
            Console.WriteLine("Unregistered " + p.getLoginDetails().getUsername() + " [online = " + players.Count + "]");
        }
        public bool savePlayer(Player p)
        {
            if (p == null) return false;
            try
            {
                string username = p.getLoginDetails().getUsername().ToLower();

                /* Character saving code goes here */
                XmlTextWriter writer = new XmlTextWriter(misc.getServerPath() + @"\accounts\" + username + ".xml", null);
                writer.Formatting = Formatting.Indented;
                writer.WriteStartElement("Player");
                    writer.WriteStartElement("Login"); 
                        writer.WriteElementString("Password", p.getLoginDetails().getPassword());
                        writer.WriteElementString("Rights", p.getRights().ToString());
                        writer.WriteElementString("BankPin", p.getBank().getBankPin());
                    writer.WriteEndElement();

                    writer.WriteStartElement("Position");
                        writer.WriteElementString("X", p.getLocation().getX().ToString());
                        writer.WriteElementString("Y", p.getLocation().getY().ToString());
                        writer.WriteElementString("Z", p.getLocation().getZ().ToString());
                    writer.WriteEndElement();

                    writer.WriteStartElement("Settings");
                        writer.WriteElementString("RunEnergy", p.getRunEnergy().ToString());
                        writer.WriteStartElement("PrivacySettings"); 
                            writer.WriteElementString("Public", p.getFriends().getPrivacyOption(0).ToString());
                            writer.WriteElementString("Private", p.getFriends().getPrivacyOption(1).ToString());
                            writer.WriteElementString("Trade", p.getFriends().getPrivacyOption(2).ToString());
                        writer.WriteEndElement();
                    writer.WriteEndElement();

                    writer.WriteStartElement("Friends");
                        foreach(long friend in p.getFriends().getFriendsList())
                            writer.WriteElementString("Friend", friend.ToString());
                    writer.WriteEndElement();

                    writer.WriteStartElement("Ignores");
                        foreach (long ignore in p.getFriends().getIgnoresList())
                            writer.WriteElementString("Ignore", ignore.ToString());
                    writer.WriteEndElement();

                    writer.WriteStartElement("Stats");
                        foreach (Skills.SKILL skill in Enum.GetValues(typeof(Skills.SKILL))) {
                             writer.WriteStartElement(skill.ToString()); //skill name.
                                writer.WriteElementString("CurrentLevel", p.getSkills().getCurLevel(skill).ToString());
                                writer.WriteElementString("XP", p.getSkills().getXp(skill).ToString());
                            writer.WriteEndElement();
                        }
                    writer.WriteEndElement();

                    Item item;
                    writer.WriteStartElement("EquipmentItems");
                    foreach (ItemData.EQUIP equip in Enum.GetValues(typeof(ItemData.EQUIP))) {
                        if (equip == ItemData.EQUIP.NOTHING) continue;
                        item = p.getEquipment().getSlot(equip);
                        if (item.getItemId() == -1) continue; //empty slot.

                        writer.WriteStartElement(equip.ToString());
                            writer.WriteElementString("Id", item.getItemId().ToString());
                            writer.WriteElementString("Amount", item.getItemAmount().ToString());
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();

                    writer.WriteStartElement("InventoryItems");
                        for (int i = 0; i < Inventory.MAX_INVENTORY_SLOTS; i++) {
                            item = p.getInventory().getSlot(i);
                            if (item.getItemId() == -1) continue; //empty slot.

                            writer.WriteStartElement("Item");
                                writer.WriteElementString("Slot", i.ToString());
                                writer.WriteElementString("Id", item.getItemId().ToString());
                                writer.WriteElementString("Amount", item.getItemAmount().ToString());
                            writer.WriteEndElement();
                        }
                    writer.WriteEndElement();

                    writer.WriteStartElement("BankItems");
                    for (int i = 0; i < Bank.MAX_BANK_SLOTS; i++)
                    {
                        item = p.getBank().getSlot(i);
                        if (item.getItemId() == -1) continue; //empty slot.

                        writer.WriteStartElement("Item");
                            writer.WriteElementString("Slot", i.ToString());
                            writer.WriteElementString("Id", item.getItemId().ToString());
                            writer.WriteElementString("Amount", item.getItemAmount().ToString());
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();
                writer.WriteEndElement();
                //Write the XML to file and close the writer    
                writer.Close();
            }
            catch (Exception)
            {
                return false;
            }
 
            return true;
        }
        public ReturnCode loadPlayer(Connection connection)
        {

            if (connection == null)
                return ReturnCode.COULD_NOT_COMPLETE;
            LoginDetails loginDetails = connection.getLoginDetails();
            if (loginDetails == null || loginDetails.getUsername() == "" || loginDetails.getLongName() == 0)
                return ReturnCode.INVALID_PASSWORD;//ReturnCode.INVALID_PASSWORD;

            foreach (char c in loginDetails.getUsername().ToCharArray())
            {
                if (!char.IsLetterOrDigit(c) && !char.IsWhiteSpace(c))
                    return ReturnCode.INVALID_PASSWORD;
            }
            Player createdPlayer = new Player(connection);
            connection.setPlayer(createdPlayer); //player finally created.
            createdPlayer.setLoginDetails(loginDetails);

            if (!File.Exists(misc.getServerPath() + @"\accounts\" +  loginDetails.getUsername() + ".xml")) {

                createdPlayer.setRights(2); //all new users admins atm (change later).
                createdPlayer.setLocation(new Location(2323, 3174, 0));
                return ReturnCode.LOGIN_OK; //new user.
            }
            //Yeah reading XML files is a bit h**o.
            try
            {
                int temp;
                long lTemp;
                double dTemp;
                string username = createdPlayer.getLoginDetails().getUsername().ToLower();
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(misc.getServerPath() + @"\accounts\" + username + ".xml");

                XmlNode xmlNode = xmlDocument.SelectSingleNode("/Player/Login/Password");
                if (xmlNode == null) return ReturnCode.INVALID_PASSWORD; //no password node.
                if (createdPlayer.getLoginDetails().getPassword() != xmlNode.InnerText)
                    return ReturnCode.INVALID_PASSWORD;

                XmlNode loginElement = xmlDocument.SelectSingleNode("/Player/Login");
                if(loginElement != null && loginElement.HasChildNodes) {
                    XmlNodeList childs = loginElement.ChildNodes;

                    foreach (XmlElement element in childs)
                    {
                        switch (element.Name)
                        {
                            case "Rights":
                                if (!int.TryParse(element.InnerText, out temp))
                                    temp = 0;
                                createdPlayer.setRights(temp);
                                break;
                            case "BankPin":
                                if (element.InnerText == "") continue;
                                createdPlayer.getBank().setBankPin(element.InnerText);
                                break;
                        }
                    }
                }

                loginElement = xmlDocument.SelectSingleNode("/Player/Position");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    XmlNodeList childs = loginElement.ChildNodes;
                    Location location = new Location();
                    foreach (XmlElement element in childs)
                    {
                        switch (element.Name)
                        {
                            case "X":
                                if (!int.TryParse(element.InnerText, out temp)) {
                                    createdPlayer.setLocation(Constants.HOME_SPAWN_LOCATION.randomSpawn());
                                    break;
                                }
                                location.setX(temp);
                                break;
                            case "Y":
                                if (!int.TryParse(element.InnerText, out temp)) {
                                    createdPlayer.setLocation(Constants.HOME_SPAWN_LOCATION.randomSpawn());
                                    break;
                                }
                                location.setY(temp);
                                break;
                            case "Z":
                                if (!int.TryParse(element.InnerText, out temp))
                                    temp = 0;
                                location.setZ(temp);
                                break;
                        }
                    }
                    createdPlayer.setLocation(location);
                    if (Location.atDuelArena(createdPlayer.getLocation()))
                        DuelSession.teleportDuelArenaHome(createdPlayer);
                }

                xmlNode = xmlDocument.SelectSingleNode("/Player/Settings/RunEnergy");
                if (xmlNode == null)
                {
                    temp = 100;
                } else {
                    if (!int.TryParse(xmlNode.InnerText, out temp))
                        temp = 100;
                }
                createdPlayer.setRunEnergyLoad(temp);

                loginElement = xmlDocument.SelectSingleNode("/Player/Settings/PrivacySettings");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    XmlNodeList childs = loginElement.ChildNodes;
                    Friends.STATUS publicStatus = Friends.STATUS.ON, privateStatus = Friends.STATUS.ON, tradeStatus = Friends.STATUS.ON;

                    foreach (XmlElement element in childs)
                    {
                        switch (element.Name)
                        {
                            case "Public":
                                publicStatus = (Friends.STATUS)Enum.Parse(typeof(Friends.STATUS), element.InnerText, true);
                                break;
                            case "Private":
                                privateStatus = (Friends.STATUS)Enum.Parse(typeof(Friends.STATUS), element.InnerText, true);
                                break;
                            case "Trade":
                                tradeStatus = (Friends.STATUS) Enum.Parse(typeof(Friends.STATUS), element.InnerText, true);
                                break;
                        }
                    }
                    createdPlayer.getFriends().setPrivacyOptions(publicStatus, privateStatus, tradeStatus);
                }

                loginElement = xmlDocument.SelectSingleNode("/Player/Friends");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    XmlNodeList childs = loginElement.ChildNodes; //number of Friends

                    foreach (XmlElement element in childs)
                    {
                        if(element.Name == "Friend") {
                            if(long.TryParse(element.InnerText, out lTemp))
                                createdPlayer.getFriends().getFriendsList().Add(lTemp);
                        }
                    }
                }

                loginElement = xmlDocument.SelectSingleNode("/Player/Ignores");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    XmlNodeList childs = loginElement.ChildNodes; //number of Friends

                    foreach (XmlElement element in childs)
                    {
                        if (element.Name == "Ignore") {
                            if (long.TryParse(element.InnerText, out lTemp))
                                createdPlayer.getFriends().getIgnoresList().Add(lTemp);
                        }
                    }
                }

                loginElement = xmlDocument.SelectSingleNode("/Player/Stats");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    XmlNode skillNode;
                    foreach (Skills.SKILL skill in Enum.GetValues(typeof(Skills.SKILL)))
                    {
                        skillNode = loginElement.SelectSingleNode("/Player/Stats/" + skill.ToString());

                        foreach (XmlElement element in skillNode.ChildNodes)
                        { //CurrentLevel/XP
                            switch (element.Name)
                            {
                                case "CurrentLevel":
                                    if (!int.TryParse(element.InnerText, out temp))
                                    {
                                        if (skill != Skills.SKILL.HITPOINTS)
                                            createdPlayer.getSkills().setCurLevel(skill, 1);
                                        else
                                            createdPlayer.getSkills().setCurLevel(skill, 10);
                                        break;
                                    }
                                    createdPlayer.getSkills().setCurLevel(skill, temp);
                                    break;
                                case "XP":
                                    if (!Double.TryParse(element.InnerText, out dTemp))
                                    {
                                        if (skill != Skills.SKILL.HITPOINTS)
                                            createdPlayer.getSkills().setXp(skill, 0);
                                        else
                                            createdPlayer.getSkills().setXp(skill, 1184);
                                        break;
                                    }
                                    createdPlayer.getSkills().setXp(skill, dTemp);
                                    break;
                            }
                        }
                    }
                }

                loginElement = xmlDocument.SelectSingleNode("/Player/EquipmentItems");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    XmlNode skillNode;

                    foreach (ItemData.EQUIP equip in Enum.GetValues(typeof(ItemData.EQUIP))) {
                        if (equip == ItemData.EQUIP.NOTHING) continue;
                        skillNode = loginElement.SelectSingleNode("/Player/EquipmentItems/" + equip.ToString());
                        if (skillNode == null) continue;
                        int id = -1, amount = 0;
                        foreach (XmlElement element in skillNode.ChildNodes)
                        {
                            switch (element.Name)
                            {
                                case "Id":
                                    if (!int.TryParse(element.InnerText, out id))
                                        id = -1;
                                    break;
                                case "Amount":
                                    if (!int.TryParse(element.InnerText, out amount))
                                        amount = 0;
                                    break;
                            }
                        }
                        if (id != -1) {
                            createdPlayer.getEquipment().getEquipment()[(int)equip].setItemId(id);
                            createdPlayer.getEquipment().getEquipment()[(int)equip].setItemAmount(amount);
                        }
                    }
                }

                loginElement = xmlDocument.SelectSingleNode("/Player/InventoryItems");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    int slot = -1, id = 0, amount = 0;
                    foreach (XmlElement itemElement in loginElement.ChildNodes) //each item.
                    {
                        foreach (XmlElement itemDef in itemElement.ChildNodes) //each item.
                        {
                            switch (itemDef.Name)
                            {
                                case "Slot":
                                    if (!int.TryParse(itemDef.InnerText, out slot))
                                        slot = -1;
                                    if (slot < 0 || slot > Inventory.MAX_INVENTORY_SLOTS) slot = -1;
                                    break;
                                case "Id":
                                    if (!int.TryParse(itemDef.InnerText, out id))
                                        slot = -1;
                                    break;
                                case "Amount":
                                    if (!int.TryParse(itemDef.InnerText, out amount))
                                        slot = -1;
                                    break;
                            }
                        }
                        if (slot != -1) {
                            createdPlayer.getInventory().getItems()[slot].setItemId(id);
                            createdPlayer.getInventory().getItems()[slot].setItemAmount(amount);
                        }
                    }

                }

                loginElement = xmlDocument.SelectSingleNode("/Player/BankItems");
                if (loginElement != null && loginElement.HasChildNodes)
                {
                    int slot = -1, id = 0, amount = 0;
                    foreach (XmlElement itemElement in loginElement.ChildNodes) //each item.
                    {
                        foreach (XmlElement itemDef in itemElement.ChildNodes) //each item.
                        {
                            switch (itemDef.Name)
                            {
                                case "Slot":
                                    if (!int.TryParse(itemDef.InnerText, out slot))
                                        slot = -1;
                                    if (slot < 0 || slot > Inventory.MAX_INVENTORY_SLOTS) slot = -1;
                                    break;
                                case "Id":
                                    if (!int.TryParse(itemDef.InnerText, out id))
                                        slot = -1;
                                    break;
                                case "Amount":
                                    if (!int.TryParse(itemDef.InnerText, out amount))
                                        slot = -1;
                                    break;
                            }
                        }
                        if (slot != -1)
                        {
                            createdPlayer.getBank().getBank()[slot].setItemId(id);
                            createdPlayer.getBank().getBank()[slot].setItemAmount(amount);
                        }
                    }
                }

                return ReturnCode.LOGIN_OK; //new user.
            }
            catch (Exception e)
            {
                misc.WriteError(e.Message);
                return ReturnCode.COULD_NOT_COMPLETE;
            }
        }