As a part of the Incursion 1.1 expansion in January we are including quite a lot of improvements to the aging Contracts system. There are a lot of things in this system that could be done better, and over the years we have gotten quite a lot of suggestions from players on how to improve the search part of Contracts.
The reason that we are doing this now primarily stems from backend performance issues. Today contract searching is done on the database level and contract management (looking up contracts for example) is done on the location node where the contract was created.
The reasons for doing this were that it provided natural load balancing into the system and it used the database for what it's very good at. However, in real life this is not giving us an advantage because of the fact that by far the majority of contracts are created in the Jita system and the majority of contracts searches are likewise done from the Jita system. So in actuality most of the searches and lookups are being done on a node that's already busy handling the most crowded solar system in EVE because of the massive congregation of people there with the singular purpose of being good little consumers.
This, coupled with the fact that the contracts searches are extremely taxing on the database caused us to take a good hard look at the system. In this push, The backend Contracts system is being completely re-architectured and searching has been moved from the database to the sol node layer onto a dedicated Contracts node. In addition, all contracts live on that specific node (instead of 90% of them living on the Jita node).
The end result is that, with the new system, your location node will have nothing whatsoever to do with contracts, except at the step when items are moved into or out of a contract. This frees up the location node and should make contracts much faster in places like Jita and, even in extremely heavy traffic systems, searching Contracts for an exotic dancer for that special someone should be relatively quick.
This type of work continues on the Character Nodes load balancing work and moves more of the workload off the location node into its own segregated part of the cluster.
Because of this work, we have been able to add a whole host of features that the old architecture didn't support. You know you're doing something right when you can make the cluster happier at the same time as you're adding new shiny features. :-)
Let's delve into the new features in more details below.
Experimental Contracts search
The new Contract search feature is Experimental, which means that it will be in a Beta phase for a few months while we iron out the kinks and make sure it performs well enough. That means that you can continue to use the old contracts search and you can provide us with feedback through the forum thread associated with this blog. Then, a few patches later, we will tear off the Experimental band-aid and let the feature out into the wild. In its experimental state the feature should be completely usable though, and you should feel free to use it as much as you want to when it hits Tranquility.
The new Contracts search and the new Neocom are the first features to get this new 'experimental' treatment. This new way of pushing out features is something we are trying out as a thinner way to deploy things that we want to try out a bit before making the leap to the mainstream. Hopefully this goes over well with the players and gives us good feedback on continued development of the features.
Keep in mind that this is a BETA feature and as such there might be some issues with it, and it might be turned off without warning if it turns out the servers are melting.
You can stop reading and go to the Singularity Test Server right now to play around with this feature but if you're still here let me tell you about some of the features of the new contracts search.
Go to the Contracts start page to enable the feature:
Once the new Public Contracts Search has been enabled you should have access to this tab:
OMG, there is some cool stuff there. Now, on to the list of goodies!
Sorting done on the server
One of the biggest gripes of contractors has been the fact that the entire contract list is sorted by newest-first and you can then apply your own sorting just on each page of 100 entries. This makes searching very difficult since there might be thousands of contracts to choose from and unless you refine your search way down it is a big headache to go through the results in any sane manner.
The new architecture allowed us to change that. Now sorting is done on the server on the entire result set before it is sent down to the client. You are therefore able to sort all the returned contracts by the following sort conditions both up and down:
- Date Created
- Time Left
- Price (Auction and Item Exchange)
- Reward (Courier)
- Collateral (Courier)
- Volume (Courier)
I am sorry to say that we cannot add sorting by distance since that is a user-specific pathfinding search that is simply too expensive for the server. You can still sort each page by distance.
The new contract search will return a maximum of 1000 contracts, or 10 pages worth. These contracts are though properly sorted against the entire pool of contracts so there is no invisible implicit sorting going on.
More information in the list
The old search didn't have a lot of information in the search results. The reason for this was that you could search for multiple unrelated contract types at once and therefore the entries needed to be very general and much too general to be very useful. For example, results for a courier contract search look something like this:
We have revamped this in the new search window and put the focus on searching for one contract type at a time (you will also be able to search for auction and item exchange at the same time, just with less information). This allows us to have the result set type-specific and add relevant columns for each search type that you can then sort by.
As you can see from this example of the courier contracts you can sort the page by drop off location, volume, route length, etc. If you search through auction contracts you get a different set of columns relevant to that contract type.
As you may also notice, the list contains information about the region name if the contract is outside your own region and also shows the security level of the systems in question. The list also tells you at a glance whether your autopilot will allow you to reach the destination.
Location search options
You can search by an exciting array of locations. You can pick your own station, solar system or region as before, but you can also pick your constellation, or another solar system, constellation or region.
This allows you to conduct very versatile searches. Let's say that you found the module that you're interested in somewhere. Now you can search the constellation where the module was sold in to see if you can find something else of interest close by.
You now have access to a "Find Related Contracts" menu both in the contracts search results and in the contract menu in the contract details window. This menu allows you to search for contracts from the same issuer, from the same solar system/constellation/region or in the case of courier contracts, to the same solar system/constellation/region.
This is simple but a very powerful productivity tool allowing you for example to quickly gather together all the courier contracts heading into a particular region of space.
For auction and item exchange contracts with a single item you can use this function to find the same item type, group or category.
Courier search options
When searching for courier contracts you can now specify the range or reward, collateral and volume. You can also pick where the contract should be delivered to. Like before, this can be a solar system, constellation or region.
Some things we cannot search for on the server, but the client can it quite effectively. Therefore we added page filters which allow you to filter each page of your result set. When these filters are set the number of contracts per page is reduced accordingly.
Some of the things that you can set are:
- Exclude unreachable
- Exclude ignored issuers
- Max jumps
- Max route length (courier only)
Partial Type search
A big gripe for people that are using the system extensively is the fact that when looking for specific types you can only search for a single type at once. The new architecture allowed us to change that.
You can now enter a partial name into the 'types' field and the search is done on all the types that match that partial string. You can also specify a category or group as well as a partial type name to further refine your search.
By the way. You can drag items into this field to search for them and you can drag people from your people and places or chat into the 'issuers' field which can be very convenient (not on Sisi yet).
Filtering out the scammers
You can exclude contracts with multiple item types and the Want To Buy and Want To Trade contracts in your searches as well as exclude systems and stations that are unreachable. This should make your browsing a bit safer and less annoying.
UI is still under construction
The User Interface to the new contracts search is undergoing revision as we speak. You should expect this to change and improve over the next few weeks as CCP Karkur works her magic. If you have usability suggestions, let us know!
Uh, oh. It's only for public contracts
The new contracts search does not search through private contracts, only the public ones.
The reason for this is that there aren't that many contracts assigned to each alliance, corporation or character so all the features of the new search aren't as important for these private contracts. Since the searchable contracts cache does cost quite a bit of server resources and the number of private contracts overall is pretty great we have opted for using the old contracts search for these types of contracts.
If you would like to extend the new contracts search to cover the private contracts as well please let us know since we haven't seen the reason to do so.
A fat pile of features
In addition to the new contracts search we have added a bunch of new features and usability tweaks to contracts, most of which were requested from players on the forums and by the CSM. Thank you for all the great ideas, I think we've got most of them in by now.
You can now "copy" a contract that you have created from the contract details context menu. This will open up the "Create Contract" wizard with parameters from the copied contract prefilled in.
This is especially useful if you want to create several identical contracts and should reduce the clickfest by an order of magnitude or so.
Insured ships that are put into a Courier contract will no longer have their insurance voided. Contracting insured ships should be more consistent.
When you log in you are now notified if there are any contracts assigned to you and you can easily jump into the contract in question. Contracts that require attention are similarly highlighted so you should have a clear overview of your contracts status when you log in.
This uses the same notification mechanism as skill training complete.
A new "Volume" column has been added in the "Select Items" step of the Create Contract Wizard. Also, when creating a Courier contract the volume of selected items is summed up when they are selected. This should make Courier contracts much easier to create.
Damaged items can now be put into all contracts. If an item is damaged it is displayed in the Contract Details window. This applies to all items and all contract types. No more hassle with contracting ships containing T2 crystals!
Solar System Information
We are now showing a lot more information about the solar systems a contract is in to give you a better picture of whether its safe to go there.
Contract details will now show the security level of the systems in question and will also show if any system in the route to the system is of another security level than the current system. You will also be able to see if a station is player owned and therefore potentially unreachable or if the system is unreachable with your current autopilot settings.
Find Contract for plastic wraps
Added a "Find Contracts" context menu option for plastic wrap containers to allow you to bring up the contract which the container belongs to.
Find in Contracts
You can now right click on any item or item type and click 'Find in contracts' to search for the type in the public contracts (providing you have the new contracts search enabled)
When you contract a ship with loaded charges the charges are now removed into the ship's cargohold rather than into the hangar. I'm sure this will make a lot of people happy.
Contracts with ships in them show a 'fitted' tag on each item in the ship if it is fitted on the ship rather than being in a cargo hold. This is especially useful for seeing if a rig is fitted or not, since they cannot be removed from the ship.
- Added a "show info" context menu option for search results containing one item.
- Create contract wizard has been simplified a bit.
- Item Exchange Contracts now have a different icon. We repurposed the "freeform" contract icon for this type of contract.
- If you accept any type of contract you should be correctly notified if the station(s) are player-owned and not reachable.
- Metalevels of items should now be correctly displayed everywhere in contracts.
- You can now preview items from the contracts details window.
- Contracts should now open up more quickly than before. No more 'shuffling through the pile'.
- A bunch of other small fixes have been added here and there.
On the horizon
We have a few contracts feature requests on our list such as saving contract search conditions (quicksearch), bookmarking contracts, contracts API and more usability tweaks. We will hopefully be able to add some more features over the next few months.
If you have suggestions for improvements by all means let us know on the feedback thread. We would love to hear from you.
EVE Online, CCP Games