The latest version of UOAI and the changelist are now maintained in another thread.
In this thread I'll stick to the todo list.
ToDo:
This todo will be updated regulary, the order of things might change, some new things might be added now and then, some ideas might get removed in time...
- Next v0.4 version
- fixing the enumerators: foreach(UOItem curitem in Player.Backpack) {curitem.Drag...} would fail with the current version cause the contents of the backpack is not allowed to change while enumerating it... so you need to dump the contents into a list or array and then enumerate that array. This is not really a bug, try enumerating some datastructures in .NET and removing the item you currently got from the enumerator; several of the datastructures will throw an exception. The only solution for this is the trick of dumping everything into a second list and enumerating from there; so the only fix i can provide is to do this in the background and transparantly return an enumerator for that list instead of one for the original datastructure.
- Finditem calls are relatively slow, cause they perform linear searches. This basically requires rebuilding the event system and allowing for synchronized packet handling. Most changes are located in the injected UOClientDll.dll and were already done while working on the next .NET library; so it makes sense to rewrite the COM library to start using this new version of the injected dll.
- By switching to this new UOClientDll.dll i would also be able to join the >=v7.0.0.0 and <v7.0.0.0 version. (it would work for now, but still the callibration part requires some major updates)
- Since i'm switching to another dll, i might also look at switching to another dll-injection method, which will be required to compile a 64bit version of the COM library; probably i'll switch from windows hooks to the code-injection/setThreadContext method, unless someone knows a better method? (thing that annoys me with code-injection is that i have to allocate a whole memory-page on the client, of which i will only use a few bytes to perform the loadlibrary call and restore the original EIP)
- Self-Registration functionality should finally be implemented correctly, to allow for easier distribution.
- Add .loggedin checks. A lot of methods can not be executed succesfully on clients that are not logged in... currenlty however no .loggedin checks are present.
- UOAI v0.5.0
- Finish an include/header-file for C/C++ developers with some usage-info.
- Website and documentation require major updates. At least a bug-reporting system, that will allow you to specifiy bugs specific to certain client- and UOAI-versions; and a versioning system, allowing seperation of a stable UOAI version vs experimental updates, should be available before moving on to UOAI v0.5.
- Access to the clients main window handle. (Maybe also a client.BringToTop and a client.TitelBar member...)
- Client.Close() function?
- ShowMessage should allow specifying the color + a function to display speech above a mobile or item should be (re)added.
- Some way to get hold of an attacker/killer?
- Add access to the game/loginserver host/port.
- Item.MultiType for multi-items. I originally planned to get all multi-components accessible through Item.Contents first (for items with Item.IsMulti=true)... but, even though i have access to those component-items from the multi-item, they are not in the main-itemlist, which complicates validation and synchronization-locking from UOAI. The changes required are therefore more complicated and will be delayed until a later v0.5 version. Instead, i'll add this .MultiType variable, which should allow lookup of the multi in the client's multi-mul-file.
- Lookup-function for localized messages.
- DropInto should allow a user to specify coordinates within a container.
- statusinfo: Mobile.Race, Mobile.TitchingPoints should be added
- Consider adding a UOClient.onNewItemProperties event.
- Add PacketQueue.onQueue event. (actually this is kindof useless, given that packetqueues are to be used for asynchronous packet access, where as the packevents take care of synchronous packetevents.. there is little advantage to implementing a packetqueue.onqueue event if the .onPacketReceive/Sent events are already present.)
- Add packetbased UOMobile.Follow() and .StopFollowing() functions.
- Vendor buy/sell handling.
- onSecureTrade event.
- Add UOMobileList and implement UOClient.Party as such a UOMobileList. (party-info calibrations are already present, so this shouldn’t take too long).
- Property/name parsing : removing the html formatting from .Name and .Properties and creating an enumerable list of properties, rather than one string with all of them.
- Fix some problems when using FindClientByPID feature.
- Changes to .Login : .Login(server,port,username,password) will return a "UOLoginObject" (or other name). That UOLoginObject then allows you to step through the login-procedure. A UOLoginObject.serverlist contains a list of servers. You will be able to choose your server using "UOLoginObject.serverlist(serverindex).Select()". This will then update the login-object. Its UOLoginObject.characterlist will contain a list of all characters, and again .Select() allows you to select one. Features to get the ping to a specific server, or to create/delete characters might be added too.
- Multis. Was planned for 0.4 version, but now moved down. I will first add a .MultiType (see above). Later on Multi-components will be made accessible through UOItem.contents for multi-items (check with UOItem.isMulti?). This was already added, but is not functioning properly.
- Some future version (= either a lot of work, or not completely clear yet how i will implement this) :
- GumpEvents (only .onClose is implemented right now). : problem is that different gumps are handled differently… I’m thinking about adding different interfaces for different types of gumps, allowing events to be implemented based on the gumptype.
- Context Menu Handling. (still a lot of work to do on this one)
- Try to move UOAI to a Single-Threaded Appartment, which should result in easier usage from windows forms applications.
- I will add a UOClient.UOMacros object, similar to the one available in the wrapper, with enumerations for all types of parameters.
- Mapfile-access, Anim.mul access
- Custom Gumps? (creation of custom UOGump objects that can be displayed on the client)
- Long distance pathfinder
- Access to the clients window titlebar?
- Runuo protocol extensions.
- Mobile.followers-list? If possible. Currently you could just loop all mobiles and check if they are renameable.
- Add support for requested client version(s). (adding support for older client versions is a major task, and therefore you should not expect that to be done any time soon)
Greetz,
Artaxerxes
