Old Wiki:User Aknor Jaden
Who Am I
[[File_AknorJaden.html|[[File:../images/thumb/5/57/AknorJaden.jpg/200px-AknorJaden.jpg|200x200px|AknorJaden.jpg]]]]
Hello, this is the personal page of EVEmu contributor Aknor Jaden.
I actively and addictively played EvE Online for almost 9 months, then quit due to the cost and seeming obligations from the other people playing in corps and alliances.
Now, I just play eve live now and then as a simple grunt. I enjoy PvP in small and medium sized gangs and will join the rare large scale warfare CTAs. I also enjoy various PvE in null sec regions.
I joined development of EVEmu and started drinking through the firehose on Sept. 24, 2010.
What I am working on
ONGOING DOCUMENTATION - Continuing to work on documenting pieces, technologies, and facts about the evemu server, the EvE tables, the client, and anything else related to evemu in order to enable newcomers to come up to speed learning all this stuff more quickly and help with development and testing. FEATURE TESTING / BUG REPORTING - I've been using my knowledge of the game to work on all kinds of testing of features involving every aspect of the game including those that involve multiple characters interacting in some way. Bugs, errors, and working features are all documented as I and others find them on this page.
[DONE] - SQL File fixup for Almamu's Account Ban Patch forum post forum announcement on sql db mod Modify evemu_static-dump.sql in the /sql directory with the following query: ALTER TABLE `account` ADD COLUMN `banned` tinyint(1) NOT NULL AFTER `online`; [DONE] - SQL File fixup for Aknor's Bookmark Patch [ forum post] Modify evemu_static-dump.sql in the /sql directory with the following query: ALTER TABLE bookmarks MODIFY created BIGINT; [DONE] - Improving EVEmu Debugging Slash Commands: - Add the following line to the end of the SlashService?.cpp SlashService::Handle_SlashCmd() function but just before the return sLog.Debug( "SlashService::Handle_SlashCmd()", "Slash command called: '%s'", arg.arg.c_str() ); Selected Item Window - We want to make this work somehow because currently when an object is clicked in the overview, the icon for the object appears in the Selected Item Window, however, none of the shortcut buttons do and the window continues to state NO ITEMS SELECTED and the client issues an exception as noted in the forum post. [WAITING] - Try substituting DBResultToCRowset for the DBResultToRowset in the return of the ConfigDB.cpp ConfigDB::GetMapObjects?() function. Target Manager [WAITING] - Time To Lock Target function needs Attribute Rewrite merge in order to get actual ship's Scan Resolution attribute and target ship's Signature Radius attribute [WAITING] - Maximum Locked Target check in AddTarget?() function needs Attribute Rewrite merge in order to check the maximum allowed locked targets attribute of the ship. Targeting skill(s) and any targeting modules need to be checked to modify this value. [WAITING] - Maximum Targeting Range check in AddTarget?() function needs Attribute Rewrite merge in order to check the maximum targeting range attribute of the ship. Targeting skill(s) and any targeting modules need to be checked to modify this value. Ship Service / Beyonce Manager / Destiny Manager [IN PROGRESS] - ShipService?.cpp: ShipBound::Handle_Jettison() - I want to finally enable and properly handle the jettison action for ships to dump cargo into space be they cargo containers themselves or items that get placed into a new temporary cargo container. 1) DONE - Modify function code to properly handle two types of items being jettisoned: secure/audit cargo containers and non-cargo container items. Handle one-time temporary cargo container creation upon encountering the first non-cargo container item in the call args list of items being jettisoned. 2) DONE - Properly handle the creation of the temporary cargo container. Consider code in these two places /eve-server/admin/GMCommands.cpp: Command_spawn() and /eve-server/mining/MiningCommands.cpp: SpawnAsteroid?() where the SystemManager? is accessed to either call SystemManager::AddNPC() (in Command_spawn) or SystemManager::AddEntity?() (in SpawnAsteroid?) 3) DONE: Successfully spawned a cargo container in space - Properly spawn the temporary cargo container, if one was created, in the Destiny system so that it shows up in space 4) DONE: Items verified in database to have proper locationID == container's itemID - Properly place any non-cargo container items into the newly spawned temporary cargo container moving them from the ship's cargo. Verify items' new locationID in 'entity' table is now the itemID of the cargo container 5) Need to ensure that items in the following categories are NOT allowed to be jettisoned: Structure (23) 6) Ensure that "jettisoning" secure or audit log containers from cargo has the same effect as "launch for self" in that the container is moved from ship's cargo and placed into space with a new DynamicSystemEntity? object to track it in space and which references the container's InventoryItem? object that tracks the contents. a) Need to implement /inventory/InvBrokerService.cpp: InvBrokerBound::Handle_AssembleCargoContainer call in order to be able to jettison a usable cargo container. [IN QUEUE] - /inventory/InvBrokerService.cpp: InvBrokerBound::Handle_GetInventoryFromId - I want to be able to open up the temporary cargo containers made when jettisoning items into space to view the contents and remove and add items 1) Be able to open a cargo window of a cargo container in space to view its contents 2) Be able to add items to the cargo container once its cargo window is open. Verify these newly added items' new locationID in the 'entity' table is now the itemID of the cargo container 3) Be able to remove items from the cargo container to another location (for now, just test another cargo container and ship's cargo). Verify these newly removed items' new locationID in the 'entity' table is now the itemID of the destination location [WORKING] - SystemManager?.cpp: SystemManager::BootSystem?() - Properly query the entity table in the database using the system's locationID to get a list of all dynamic objects in space that need to be loaded on system boot 1) SystemManager::_LoadSystemDynamics(): a) DONE - Ensure that the SystemDB::LoadSystemDynamicEntities?() call is correctly querying the entity table to get the full list of items/ships/cargo containers/etc for the system in question and populating the returned std::vector list b) Fully implement SystemManager?.cpp: DynamicEntityFactory::BuildEntity?() to handle these entity categories: 1. DONE Asteroids 2. DONE Ships, but only those with ownerID == 1, i.e. no pilots inside, meaning they were ejected from and left in space a. DONE Use Client::Killed() function as inspiration on how to spawn ships in space b. It seems that only the Client and NPC classes are children of the DynamicSystemEntity? abstract class, so it seems that we need more objects that are children of either this class or some other child of SystemEntity?, such as one of those abstract children in SystemEntities?.h for things like the following space objects: (1) DONE Asteroids (2) DONE Ships in space (a) needs its own module manager so fitted modules stay in place (b) should contain a ShipRef? member variable that points to a Ship object created with item_factory (ShipRef? ship = item_factory.Load<Ship>( shipID )) (3) DONE Drones (4) DONE Cargo containers (jet cans and non-expiring secure/audit log) (5) DONE Deployables (Warp Distruptor bubbles) (6) DONE Structures (POS stuff) (7) Wrecks (inanimate) (also need cargo for dropped modules after ship died) (8) Cosmic Anomalies and Signatures (9) Complexes (all the stations, walls, etc) (10) Acceleration gates 3. DONE Celestials, but only cargo containers of all types 4. DONE Drones 5. DONE Deployables, all warp disruptor bubbles 6. DONE Structures, all POS towers, modules, and equipment c) DONE Check code inside the for() loop that uses DynamicEntityFactory::BuildEntity?() to make the SystemEntity? object for each item and the code that spawns the object in space via the BubbleManager::Add() call. Perhaps this code needs to be more like what was used to fix the ShipBound::Handle_Jettison() call which was code from the GMCommands.cpp spawn() call d) DONE Verify objects are being correctly spawned in space [IN QUEUE] - ShipService?.cpp: ShipBound::Handle_Drop() - I want to fix this so that pilots can successfully Launch for Self and Launch for Corp things like secure/audit containers, warp disruptor bubbles, Drones, and POS equipment. This does not mean that the Anchoring and Onlining of the latter things mentioned will be fixed here, just the successful launch of them into space and the correct spawning of these items in space so they can be seen and appear on the Overview in the client. 1) Add comments that this function is supposed to implement the Launch for Self and Launch for Corp functions for containers, warp disruptors, Drones, and POS equipment 2) COMPLETED: New Call_Drop3 packet created and decoding performed inside the function - Research the packet received by the Handle_Drop() call and modify the xmlp definition or make a new one. 3) Properly decode and extract all items to be "dropped" or "launched" into space. 4) Implement and Check a new Launch Timer to determine if it has expired and thus allows the pilot to launch something else. 4) Loop through all items to be "dropped" and execute the correct code that spawns them in space with calls the SystemManager? and DestinyManager?, then remove them from the ship's cargo. 5) Determine packet structure of the return packet sent back to the client once everything that can be launched is launched and what cannot be launched failed to launch. [WAITING] - Spawning Asteroids Asteroid spawning was fixed in SystemManager?.cpp: DynamicEntityFactory::BuildEntity?() by simply setting the InventoryItemRef?->radius value to something non-zero, such as the value 600, which is the same value hard-coded for all asteroids in the MiningCommands?.cpp: Command_spawnbelt() function. Setting this radius value to 600 now allows asteroids to load and appear in space. Improvements are needed: 1) Attributes for radius (162), mass, volume, capacity, or whatever "stores" the amount of ore that can be extracted from each asteroid, these all need to be stored in 'entity_attributes' table when the asteroids are spawned, then they need to be loaded from that table when the solar systems boot. [WAITING] - BeyonceService?.cpp: BeyonceBound::WarpToStuff?() - Sounds like that when a warp to 0m is targeting a station, it should be 1km off the station's coordinates 1) I need to verify that a warp to 0m on EVE live drops the ship at 1km off a station 2) Implement any changes needed [IN QUEUE] - BeyonceService?.cpp: BeyonceBound::Handle_WarpToStuff() - I want to fix the problem of warping too close to the graphics perimeter of stars, moons, and planets. I think the distance value calculated in this function needs to have 100km subtracted from it so as to drop the ship out of warp that much farther away from any of these objects. [WAITING] - BeyonceService?.cpp: BeyonceBound::Handle_Dock() - I want to fix the enforcement of denying docking permission if the client's ship is outside the docking perimeter 1) CONFIRMED: Docking Perimeter = 500m - I need to re-verify that the station docking perimeter is 500m or something different, so get on a trial EVE account and verify. 2) PACKETS CAPTURED: Pending Decoding - Use Logserver to capture packets during docking procedures for both inside and outside the perimeter to determine what packets need to be sent by the server in these cases 3) Implement any packets that don't yet exist and use them in the BeyonceBound::Handle_Dock() procedure, then implement the docking perimeter check for the correct value [WAITING] - ShipService?.cpp: ShipBound::Handle_Undock() - I want to fix the things in this function so that it is complete and working properly 1) PACKETS CAPTURED: Pending Decoding - Use Logserver to capture packets during undocking procedures to determine what packets need to be sent by the server 2) Implement any packets that don't yet exist and use them in the ShipBound::Handle_Undock() procedure 3) Figure out how to calculate a GVector for the direction of travel 180 degrees from the undock point of the current station, then set the ship traveling along that vector at 100% full speed 4) UPDATE: No error is reported in Logserver on Undock that leads to automatic ship stopping, so I have no idea how to stop this - Do whatever needs to be done to PREVENT the automatic STOP Ship call that the Client is now calling on the server Attribute Rewrite Merge into Experimental Branch [WAITING] - I need someone to commit a bunch of patches to the Experimental branch before I attempt the merge. Module Manager [WAITING] - I need to finish the Attribute Rewrite merge into Experimental branch before I start looking at this.
(Date TBD) - Private chats between characters: Most of this doesn't work at all, so hopefully it'll be small enough that I can take a crack at it. First steps are to try the various features of chatting and capture evemu server log data when it fails. RESEARCH TO BE DONE: Use EvE live to capture logserver logs for these items: Joining a password-protected chat channel: capture packet sent by server to query password, capture packet sent to server with password Find out what the channelMods and channelTypes tables are used for WHAT NEEDS DONE: Create a LSCDB class function that queries the database to verify that the character wanting to make changes via Configure is allowed to do so, i.e. they are either the owner or an operator There also needs to be a service call for Access Control that does something for, ahem, Access Control for chat channels ON HOLD: [WAITING] - Figure out how to create a packet sent by server to a character invited to either a private convo chat or a user-created chat. I need help learning how to format and send a packet to a specific client or set of clients. WHAT IS DONE: [2010-11-28] - Fixed Character and Corporation auto-linking in chat windows: LSCDB::LookupOwners?() needed a major rework of the mySQL query. this works now [2010-11-25] - Save the new settings from a Configure call on a chat channel to the channels table entry for this channel [2010-11-19] - Created a service call for Configure that allows a channel owner to make changes to a channel's settings. Implementation is not 100% as I do not know how to force password query on a character wanting to join a password protected chat channel. [2010-11-15] - Created channels are now saved to the database in both the channels table and the channelChars table [2010-11-12] - Fixed creation and joining of Rookie and Help channels so that chat titles are correct and these channels are not automatically joined after the character is more than 30 days old [2010-10-25] - User-created chat channels are properly loaded from the database if they are already in the channels table and the channelchars table [2010-11-06] - Chats now properly broadcast in user-created chat channels. Got this for free with above fix: Make chats in user-created chat channels go through and be broadcast to all other characters in that channel [2010-11-08] - nextFreeChannelID needs to be updated as channels are loaded from when the first character logs in so that when users create a new channel, it uses a bona fide unused ID. The problem is that when channels are created, then destroyed, the list of IDs starting at the first value starts to become fragmented, like a hard drive would when files are created, created, created, then destroyed randomly. The trick is to, when a new channel is created, we need a procedure that starts searching linearly from the first value allowed for a new channel when there are none until it finds a value that isn't used. Perhaps the quickest way would be to query the channels table in the Database just for the channelID field, sorted, of course, and then search until there is a gap. THE WHOLE ENCHILADA OF WHAT NEEDS DONE: - This is the structure of everything that needs to happen to create channels when they aren't active yet, join channels that are active, and save subscribed channels by character ID: Server starts up, no chat channels exist until the first character logs in A Character Logs in: [DONE] Local chat for current solar system is created (if it has not already been created) and joined for this character [DONE] Likewise for region and constellation, if subscribed [DONE] All private chat channels that this character is subscribed to are queried from the channelchars table and created (if they do not yet exist) and joined for this character While a Character is Logged in: Character wants to join an existing private chat channel: [DONE] Check database for this channel [TBD] Verify password, if any, for this channel before allowing access - I don't know how to send the right packet to the target client to ask for a channel password [DONE] Query list of existing channels in the cache and create it if it doesn't exist yet [DONE] Create channel in cache using info from channels table in database [DONE] Assuming all goes well with password joining and cache creation, then save new subscription for this channel for this character in channelChars table [DONE] Character creates a new private chat channel: [DONE] A new chat channel is created in the server cache [DONE] A new entry in the channels table is created for this channel [DONE] A new entry in the channelChars table is created for this character subscribed to this new channel [DONE] This character is joined to the new chat channel [DONE] Any character's chat text submitted to the server is broadcast to the clients of all other subscribed characters Character configures an existing chat channel [Working] Update the settings for this chat channel in the channels table from the received Configure packet [In-Progress] Save the new settings for this chat channel to the channels table entry for this channel Character Leaves an already subscribed chat channel: [DONE] The entry for this character's subscription to this channel is deleted from the channelChars database and this character is removed from the chat channel in the server cache [TBD] Character creates a new Private Conversation chat channel with another player: [TBD] An invitation is broadcast to the other character's client - I don't know how to send the right packet to the target client (character being invited) to invite to the private channel IF the invitation is accepted, THEN a new chat channel is created in the server and both players are joined to the chat channel IF the invitation is declined, THEN no new chat channel is created and the originator's client is informed of the declined invitation [DONE] Any character's chat text submitted to the server is broadcast to the clients of all other subscribed characters - this comes for free once the two characters are joined to the chat channel that is created by the invitor [TBD] Character invites another character to an already created Private Conversation or private chat channel - I don't know how to send the right packet to the target client (character being invited) to invite to the private channel IF the invitation is accepted, THEN the other character is joined to the existing private conversation or private chat channel IF the invitation is declined, THEN the originator's client is informed of the declined invitation [DONE] Any character's chat text submitted to the server is broadcast to the clients of all other subscribed characters - this comes for free once the two characters are joined to the chat channel that is created by the invitor [ON HOLD] Character joins or creates a Fleet - Creating a Fleet currently is not functional, so this work cannot start. Creating a fleet A new chat channel with name Fleet is created in the server cache (nothing is stored into database) Character is joined to this new channel Joining an existing fleet Search for the channel ID for this fleet and join the character to that channel A Character Logs off: Nothing to be done. (2010-10-22) - DB Editor - Add this code from PaLL3 to fix character faulty skills: PaLL3 select 09:18 PaLL3 count(itemID) as count, 09:18 PaLL3 itemID 09:18 PaLL3 from entity_attributes 09:18 PaLL3 where attributeID in (276,280) 09:18 PaLL3 group by itemID 09:18 PaLL3 having count <2 09:19 PaLL3 thats the query 09:19 AknorJaden ok 09:19 AknorJaden then what? 09:19 PaLL3 delete from entity_attributes where itemID in ($test) 09:19 PaLL3 that deletes what it finds 09:19 AknorJaden ok 09:20 milofaq please who can give my db with market 09:20 PaLL3 $dsn = 'mysql:dbname=DBNAME;host=localhost'; 09:20 PaLL3 $dbUser = 'DBUSER'; 09:20 PaLL3 $dbPassword = 'DBPASS'; 09:20 PaLL3 $dbh = new PDO($dsn, $dbUser, $dbPassword); 09:20 PaLL3 $res = $dbh->prepare 09:20 PaLL3 ('select 09:20 PaLL3 count(itemID) as count, 09:20 PaLL3 itemID 09:20 PaLL3 from entity_attributes 09:20 PaLL3 where attributeID in (276,280) 09:20 PaLL3 group by itemID 09:20 PaLL3 having count <2 '); 09:20 PaLL3 $res->execute(); 09:20 PaLL3 $result = $res->fetchAll(PDO::FETCH_COLUMN, 1); 09:20 PaLL3 $test = implode(' ',$result); 09:20 PaLL3 //print_r($test); 09:20 PaLL3 $count = $dbh->exec("delete from entity_attributes where itemID in ($test)"); 09:20 PaLL3 if ($count>=1){ 09:20 PaLL3 print("Deleted $count faulty skills.\n"); 09:20 PaLL3 }else{ 09:20 PaLL3 print("There were no faulty skills.\n"); 09:20 PaLL3 } 09:21 PaLL3 $dbh = null; 09:21 PaLL3 complete php (2010-10-18) - DONE - DB Editor - Fix Seed Market tab and add controls to provide ability to thin down the mysql query so that the query execution time is drastically reduced when trying to seed a very large group of item types to a large region or regions. (2010-10-05) - DONE: Beast fixed this, too. - Started looking into why pods don't appear when ejecting from ships in space, why those ships don't persist in space after logging out then back in. After ejecting from a ship, no pod appears and the only option is to log out. When logging back in, no toon appears in the character login screen. Here's what I found in the evemu database: in the character_ table, the stationID held the value that the solarSystemID once held, the solarSystemID held the value that the constellationID once held, the constellationID held the value that the regionID once held, and the regionID value held a some other value from some other field, perhaps ancestryID. Looking at these places for causes of the shift in assigned values observed in the character_ table shown above: CharacterDB.cpp line 88, Character.cpp line 879, ShipService?.cpp line 425, Client.cpp line 375, Client.cpp line 411 (2010-09-26) - DONE: Beast fixed this. - Started work on Skills Manager handling adding skills to the queue using the "apply" button in the client. So far, I'm just learning, but what I've seen is this: most skills added to the queue using the "Training Queue" window in the client will, when the "apply" button is pressed, say "COMPLETION IMMINENT" in the queue, and, of course, NEVER complete. This is incorrect. For some reason, the queue does not retain the time to completion for the skill just added, which, for all skills, is NOT ZERO. Anyway, behavior by the client sending messages to the server seems to be a bit different between when the skill is added to the queue from the Character window's skill browser and when the skill is added to the queue from the "Training Queue" window. Specifically, the Character::GetEndOfTraining?() function is called during the later action, which I am wondering might be somehow involved with screwing up the client's impression of what the actual training time remaining really is. I don't know what kind of status returned to the client would cause the client to report "COMPLETION IMMINENT" in the training queue. What I need to learn - besides everything Get familiar with the evemu Bound Object system Get familiar with the evemu memory management system Learn about singletons, template classes, massive amounts of inheritance PyRef? casserts
Makefiles
Other Interesting Tidbits of Information CCP's EVE Online Developer Network
MySQL Cluster Memory Based Database
CCP changed formats of client textures: http://www.eveonline.com/devblog.asp?a=blog&bid=732 Another dude's eve online "mod": http://www.positech.co.uk/forums/phpBB3/viewtopic.php?f=23&t=5175 OLD EVEmu Information
Slightly newer, but still old EVEmu Forums Original EVEmu Forum/wiki DevLiveArch - discusses nodes and such
OTHER EVE Emulator Projects
EVERLAST - dead project
Links for Learning Things
The C++ Resources Network - tutorials, references, etc Programming Tutorials: C++ Made Easy Learn Basic HTML
Sansha Supercarrier from Incursion in Apocrypha
INSERT into the 'eveGraphics' table the following new entry: 10000 | res:/Model/ship/dtb/sanshacarrier/sca1.red | sanshacarrier | sanshacarrier | 1 | 0 INSERT into the 'invTypes' table a new type entry with itemID = 32305 and a graphicID = 10000 INSERT into the 'invShipTypes' table the following new entry: 32305 | NULL | NULL | 3341 LAST STEP: Clear both your Client cache AND your Server cache before restarting server and client