private void changeObject(WorldObject worldObject) {
		    if (worldObject != null) {
			    worldObject.setSecondForm(true);
			    foreach(Player p in Server.getPlayerList()) {
				    if (p != null) {
					    if (p.getLocation().withinDistance(worldObject.getLocation(), 60)) {
						    if (!worldObject.isFire()) {
							    p.getPackets().removeObject(worldObject.getLocation(), worldObject.getFace(), worldObject.getType());
							    p.getPackets().createObject(worldObject.getSecondaryId(), worldObject.getLocation(), worldObject.getFace(), worldObject.getType());
						    } else {
							    p.getPackets().createObject(worldObject.getOriginalId(), worldObject.getLocation(), worldObject.getFace(), worldObject.getType());
						    }
					    }
				    }
			    }
			    int delay = worldObject.isFire() ? (60000 + misc.random(90000)) : worldObject.getRestoreDelay(); 
                Event restoreObjectEvent = new Event(delay);
                restoreObjectEvent.setAction(() => {
					    restoreObject(worldObject);
					    restoreObjectEvent.stop();
			    });
                Server.registerEvent(restoreObjectEvent);
		    }
	    }
	    public void loadSpawnedObjects() {
		    string line = "";
		    string token = "";
		    string token2 = "";
		    string token2_2 = "";
		    string[] token3 = new string[10];

            if(!File.Exists(misc.getServerPath() + @"\data\spawnedObjects.cfg")) {
                misc.WriteError(@"Missing data\spawnedObjects.cfg");
                return;
            }
            try
            {
                StreamReader sr = File.OpenText(misc.getServerPath() + @"\data\spawnedObjects.cfg");
                int amount = 0;
                while ((line = sr.ReadLine()) != null)
                {
                    line = line.Trim();
                    int spot = line.IndexOf("=");

                    if (spot > -1)
                    {
                        token = line.Substring(0, spot);
                        token = token.Trim();
                        token2 = line.Substring(spot + 1);
                        token2 = token2.Trim();
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token3 = token2_2.Split('\t');
                        if (token.Equals("object"))
                        {
                            amount++;
                            ushort id = ushort.Parse(token3[0]);
                            Location location = new Location(int.Parse(token3[1]), int.Parse(token3[2]), int.Parse(token3[3]));
                            int face = int.Parse(token3[4]);
                            int type = int.Parse(token3[5]);
                            WorldObject worldObject = new WorldObject(id, location, face, type, true);

                            // these 3 methods are to set variables for spawned rocks, trees etc.
                            worldObject.setRestore(getRestore(id));
                            worldObject.setObjectHealth(getHealth(id));
                            worldObject.setSecondaryId(getSecondaryId(id));

                            objects.Add(worldObject);
                            add(worldObject); // we KNOW this object is legit..since we spawned it.
                        }
                    }
                    else
                    {
                        if (line.Equals("[ENDOFLIST]"))
                        {
                            Console.WriteLine("Loaded " + amount + " custom objects.");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error loading spawnedObjects.cfg msg=" + e.Message);
                Console.ReadLine();
            }
	    }
        private void loadObjects()
        {
            string line = "";
            string token = "";
            string token2 = "";
            string token2_2 = "";
            string[] token3 = new string[10];

            if (!File.Exists(misc.getServerPath() + @"\data\objectLocations.cfg"))
            {
                misc.WriteError(@"Missing data\objectLocations.cfg");
                return;
            }
            try
            {
                StreamReader sr = File.OpenText(misc.getServerPath() + @"\data\objectLocations.cfg");

                while ((line = sr.ReadLine()) != null)
                {
                    line = line.Trim();
                    int spot = line.IndexOf("=");

                    if (spot > -1)
                    {
                        token = line.Substring(0, spot);
                        token = token.Trim();
                        token2 = line.Substring(spot + 1);
                        token2 = token2.Trim();
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token3 = token2_2.Split('\t');
                        if (token.Equals("o"))
                        {
                            int x = int.Parse(token3[0]);
                            int y = int.Parse(token3[1]);
                            ushort id = ushort.Parse(token3[2]);
                            int face = int.Parse(token3[3]);
                            int type = 10;
                            WorldObject worldObject = new WorldObject(id, new Location(x, y, 0), face, type);
                            objects.Add(worldObject);
                        }
                    }
                    else
                    {
                        if (line.Equals("[ENDOFLIST]"))
                        {
                            Console.WriteLine("Loaded " + objects.Count + " object definitions.");
                            return;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error loading objectLocations.cfg msg=" + e.Message);
                Console.ReadLine();
            }
        }
	    private int getType(WorldObject worldObject) {
            switch (worldObject.getOriginalId())
            {
			    case 733: // Wilderness web
                    if (worldObject.getOriginalId() == 733)
                    {
					    Location web1Location = new Location(3092, 3957, 0); // Eastern mage bank web
					    Location web2Location = new Location(3095, 3957, 0); // Western mage bank web
                        if (worldObject.getLocation().Equals(web1Location) || worldObject.getLocation().Equals(web2Location))
                        {
						    return 0;
					    }
				    }
				    break;
		    }
		    return 10;
	    }
	    public void newFire(Player p, ushort fireId, Location location) {
		    WorldObject worldObject = new WorldObject(fireId, location, FIRE);
		    lock(objects) {
			    objects.Add(worldObject);
		    }
		    worldObject.setOwner(p);
		    changeObject(worldObject);
	    }
	    public void remove(WorldObject worldObject) {
		    lock(objects) {
			    objects.Remove(worldObject);
		    }
	    }
	    public void add(WorldObject worldObject) {
		    lock(objects) {
			    objects.Add(worldObject);
		    }
	    }
        private void addObjectToList(ushort originalId, Location location)
        {
		    WorldObject worldObject = new WorldObject(originalId, getSecondaryId(originalId), getFace(originalId, location), location, getRestore(originalId), getHealth(originalId));
		    worldObject.setType(getType(worldObject));
		    lock(objects) {
			    objects.Add(worldObject);
		    }
	    }
	    public void restoreObject(WorldObject worldObject) {
		    if (worldObject != null) {
			    foreach(Player p in Server.getPlayerList()) {
				    if (p != null) {
					    if (p.getLocation().withinDistance(worldObject.getLocation(), 60)) {
						    if (!worldObject.isFire()) {
							    p.getPackets().createObject(worldObject.getOriginalId(), worldObject.getLocation(), worldObject.getFace(), worldObject.getType());
						    } else {
							    p.getPackets().removeObject(worldObject.getLocation(), worldObject.getFace(), worldObject.getType());
						    }
					    }
				    }
			    }
			    if (worldObject.isFire()) {
				    GroundItem item = new GroundItem(592, 1, worldObject.getLocation(), worldObject.getOwner());
				    Server.getGroundItems().newWorldItem(item);
			    }
		    }
		    lock(objects) {
			    objects.Remove(worldObject);
		    }
	    }
	    public void loadDeletedObjects() {
            string line = "";
		    string token = "";
		    string token2 = "";
		    string token2_2 = "";
		    string[] token3 = new string[10];

            if(!File.Exists(misc.getServerPath() + @"\data\deletedObjects.cfg")) {
                misc.WriteError(@"Missing data\deletedObjects.cfg");
                return;
            }
            try
            {
                StreamReader sr = File.OpenText(misc.getServerPath() + @"\data\deletedObjects.cfg");
                int amount = 0;
                while ((line = sr.ReadLine()) != null)
                {
                    line = line.Trim();
                    int spot = line.IndexOf("=");

                    if (spot > -1)
                    {
                        token = line.Substring(0, spot);
                        token = token.Trim();
                        token2 = line.Substring(spot + 1);
                        token2 = token2.Trim();
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token2_2 = token2.Replace("\t\t", "\t");
                        token3 = token2_2.Split('\t');
                        if (token.Equals("object"))
                        {
                            amount++;
                            Location loc = new Location(int.Parse(token3[0]), int.Parse(token3[1]), int.Parse(token3[2]));
                            int face = int.Parse(token3[3]);
                            int type = int.Parse(token3[4]);
                            WorldObject deletedObject = new WorldObject(loc, face, type, true);
                            objects.Add(deletedObject);
                        }
                    }
                    else
                    {
                        if (line.Equals("[ENDOFLIST]"))
                        {
                            Console.WriteLine("Loaded " + amount + " deleted objects.");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error loading deletedObjects.cfg msg=" + e.Message);
                Console.ReadLine();
            }
	    }