EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=590)
-   -   Starting Work on SoF Opcodes/Structs (https://www.eqemulator.org/forums/showthread.php?t=26939)

cavedude 02-12-2009 02:03 PM

Quote:

Originally Posted by trevius (Post 164400)
I will post the SQL to update/add them all if Cavedude hasn't already gotten them all added yet. His would probably be much better than mine anyway. I am just using 1 example and copying it for all zones, so they all have the same fog settings and what-not.

Please post them. I have for the past week been trying to get some world building done with SoF, but I keep getting sidetracked with other projects or requests. :(

KLS 02-13-2009 01:37 AM

The size of the item packet is not the same as the live from june sadly. I don't know if it's too long or too short just that it doesn't align. I also have a feeling there's an option somewhere that dictates how data is displayed cause my first thought was to look at the stats in the item window and see if I could find where they were in relation but it's not making sense compared to the packet im making. =(

Hooray spending hours adjusting the size up and down by bits at a time ><

trevius 02-13-2009 03:30 AM

Here is the SQL to get all of the new zones (after Titanium) working with SoF. This is just a basic setup to give a usable safe point and have the zone display correctly. I am sure that each one could use tweaking (fog, min/max clips, etc), but this is definitely better than what I started with :P

Code:

INSERT INTO `zone` VALUES ('arcstone', null, 'Arcstone', '0', '0', '550', '0', '0', '80', '369', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('ashengate', null, 'Ashengate, Reliquary of the Scale', '0', '26', '3.1', '0', '0', '80', '406', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('atiiki', null, 'Jewel of Atiiki', '0', '0', '-76', '0', '0', '80', '418', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('barren', null, 'Barren Coast', '800', '335', '33', '0', '0', '80', '422', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('befallenb', null, 'Befallen', '0', '0', '0', '0', '0', '80', '411', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('blacksail', null, 'Blacksail Folly', '4500', '1600', '309', '0', '0', '80', '428', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('bloodmoon', '', 'Bloodmoon Keep', '100', '100', '4', '0', '0', '0', '445', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('buriedsea', null, 'The Buried Sea', '1225', '0', '310', '0', '0', '80', '423', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('commonlands', null, 'Commonlands', '0', '0', '24.2', '0', '0', '80', '408', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('crescent', null, 'Crescent Reach', '-550', '-430', '80', '0', '0', '80', '394', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('cryptofshade', '', 'Crypt of Shade', '985', '-445', '-39', '0', '0', '0', '449', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('crystallos', '', 'Crystallos, Lair of the Awakened', '0', '0', '0', '0', '0', '0', '446', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('deadbone', null, 'Deadbone Reef', '2500', '-3500', '544', '0', '0', '80', '427', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('devastationa', null, 'The Seething Wall', '200', '250', '4', '0', '0', '80', '373', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('devastion', null, 'The Devastation', '650', '800', '100', '0', '0', '80', '372', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('direwind', null, 'Direwind Cliffs', '0', '0', '-16', '0', '0', '80', '405', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('dragonscale', '', 'Dragonscale Hills', '0', '0', '58', '0', '0', '0', '442', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('elddar', null, 'The Elddar Forest', '0', '0', '220', '0', '0', '80', '378', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('elddara', null, 'Tunare/s Shrine', '-30', '30', '-5', '0', '0', '80', '379', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeportacademy', null, 'Academy of Arcane Science', '0', '200', '0', '0', '0', '80', '385', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeportarena', null, 'Arena', '0', '0', '3', '0', '0', '80', '388', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeportcityhall', null, 'City Hall', '0', '150', '-11', '0', '0', '80', '389', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeporteast', null, 'East Freeport', '0', '0', '10', '0', '0', '80', '382', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeporthall', null, 'Hall of Truth', '-500', '1000', '-177', '0', '0', '80', '391', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeportmilitia', null, 'Freeport Militia House', '-50', '-150', '-25', '0', '0', '80', '387', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeportsewers', null, 'Freeport Sewers', '-150', '-50', '-95', '0', '0', '80', '384', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeporttemple', null, 'Temple of Marr', '0', '0', '10', '0', '0', '80', '386', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeporttheater', null, 'Theater', '0', '-150', '-27', '0', '0', '80', '390', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('freeportwest', null, 'West Freeport', '-240', '0', '-83', '0', '0', '80', '383', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('frostcrypt', null, 'Frostrypt, Throne of the Shade King', '0', '0', '0', '0', '0', '80', '402', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('guardian', '', 'The Mechamatic Guardian', '-115', '60', '4', '0', '0', '0', '447', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('gyrospireb', '', 'Gyrospire Beza', '500', '-200', '6', '0', '0', '0', '440', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('gyrospirez', '', 'Gyrospire Zeka', '500', '-200', '6', '0', '0', '0', '441', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('highpasshold', null, 'Highpass Hold', '-90', '-80', '-20', '0', '0', '80', '407', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('highpasskeep', null, 'HighKeep', '0', '0', '0', '0', '0', '80', '412', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('hillsofshade', '', 'Hills of Shade', '100', '100', '33', '0', '0', '0', '444', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('icefall', null, 'Icefall Glacier', '300', '50', '80', '0', '0', '80', '400', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('innothuleb', null, 'Innothule Swamp', '0', '0', '0', '0', '0', '80', '413', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('jardelshook', null, 'Jardels Hook', '2815', '-1077', '318.1', '0', '0', '80', '424', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('kattacastrum', null, 'Katta Castrum', '0', '0', '0', '0', '0', '80', '416', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('kithforest', null, 'Kithicor Forest', '0', '0', '0', '0', '0', '80', '410', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('lopingplains', '', 'Loping Plains', '0', '0', '93', '0', '0', '0', '443', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('maidensgrave', null, 'Maidens Grave', '-3615', '3335', '400', '0', '0', '80', '429', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('mansion', '', 'Meldrath\'s Majestic Mansion', '0', '0', '0', '0', '0', '0', '437', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('mechanotus', '', 'Fortress Mechanotus', '0', '0', '478', '0', '0', '0', '436', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('mesa', null, 'Goru`Kar Mesa', '-1155', '7', '47', '0', '0', '80', '397', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('mistythicket', null, 'Misty Thicket', '0', '0', '0', '0', '0', '80', '415', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('monkeyrock', null, 'Monkey Rock', '0', '0', '0', '0', '0', '0', '425', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('moors', null, 'Blightfire Moors', '-200', '-10', '80', '0', '0', '0', '395', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('northro', null, 'North Ro', '-1027', '6354', '23.2', '0', '0', '80', '392', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('oceanoftears', null, 'Ocean Of Tears', '0', '0', '0', '0', '0', '80', '409', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('rage', null, 'Sverag, Stronghold of Rage', '500', '120', '0', '0', '0', '80', '374', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('ragea', null, 'Razorthorn, Tower of Sullon Zek', '0', '0', '0', '0', '0', '80', '375', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('redfeather', null, 'Redfeather Isle', '-3100', '1400', '310', '0', '0', '80', '430', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('relic', null, 'Relic', '200', '385', '420', '0', '0', '80', '370', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('roost', null, 'Blackfeather Roost', '-700', '3000', '-191', '0', '0', '80', '398', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('shipmvm', null, 'The Open Sea', '-200', '-200', '33', '0', '0', '80', '435', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('shipmvp', null, 'The Open Sea', '-80', '-120', '46', '0', '0', '80', '431', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('shipmvu', null, 'The Open Sea', '-75', '-75', '46', '0', '0', '80', '432', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('shippvu', null, 'The Open Sea', '-75', '-75', '46', '0', '0', '80', '433', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('shipuvu', null, 'The Open Sea', '-75', '-75', '46', '0', '0', '80', '434', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('shipworkshop', '', 'S.H.I.P. Workshop', '300', '400', '113', '0', '0', '0', '439', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('silyssar', null, 'Silyssar, New Chelsith', '-175', '-185', '-59', '0', '0', '80', '420', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('skylance', null, 'Skylance', '0', '0', '251.1', '0', '0', '80', '371', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('solteris', null, 'Solteris, the Throne of Ro', '0', '0', '-20', '0', '0', '80', '421', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('southro', null, 'South Ro', '-1000', '1000', '42', '0', '0', '80', '393', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('steamfactory', '', 'The Steam Factory', '0', '100', '90', '0', '0', '0', '438', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('steamfontmts', '', 'Steamfont Mountains', '-500', '-100', '3', '0', '0', '0', '448', '0', '0', '1', '', '-2030', '450', '3000', '10', '3000', '210', '200', '200', '1', '0', '1.00', '0.4', '2', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '200', '200', '210', '10', '3000', '200', '200', '210', '10', '450', '', '2', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('steppes', null, 'The Steppes', '300', '0', '130', '0', '0', '80', '399', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('stonehive', null, 'Stone Hive', '400', '0', '58', '0', '0', '80', '396', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('suncrest', null, 'Suncrest Isle', '-2125', '-178', '406', '0', '0', '80', '426', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('sunderock', null, 'Sunderock Springs', '165', '325', '211', '0', '0', '80', '403', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('takishruins', null, 'Ruins of Takish-Hiz', '-460', '-200', '50', '0', '0', '80', '376', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('takishruinsa', null, 'The Root of Ro', '800', '-190', '-90', '0', '0', '80', '377', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('thalassius', null, 'Thalassius, the Coral Keep', '0', '0', '0', '0', '0', '80', '417', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('theater', null, 'Theater of Blood', '2933', '715', '380', '0', '0', '80', '380', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('theatera', null, 'Deathknell, Tower of Dissonance', '100', '0', '3.2', '0', '0', '80', '381', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('toxxulia', null, 'Toxxulia Forest', '0', '0', '66.6', '0', '0', '80', '414', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('valdeholm', null, 'Valdeholm', '300', '50', '0', '0', '0', '80', '401', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('vergalid', null, 'Vergalid Mines', '0', '0', '0', '0', '0', '80', '404', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');
INSERT INTO `zone` VALUES ('zhisza', null, 'Zhisza, the Shissar Sanctuary', '0', '850', '305', '0', '0', '80', '419', '0', '0', '1', null, '-2030', '450', '3000', '10', '3000', '0', '0', '0', '1', '1', '0.00', '0.4', '2', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '0', '0', '0', '10', '3000', '0', '0', '0', '450', '450', '', '1', '1', '1', '1', '0', '5000');

To add this in, you will need to open your zones table and do a sort by zoneidnumber, and then delete all lines from zoneidnumber 369 up to 449. Then, the SQL above should be able to be sourced in the table ok, as long as your table is setup the same way mine is. I got mine from PEQ, but it was a year ago, and there have been a couple of additions to that table from source revision updates since then. So, it might be good to check if it lines up with this setup I have for my zone table:

Code:

CREATE TABLE `zone` (
  `short_name` varchar(16) NOT NULL default '',
  `file_name` varchar(16) default NULL,
  `long_name` text NOT NULL,
  `safe_x` float NOT NULL default '0',
  `safe_y` float NOT NULL default '0',
  `safe_z` float NOT NULL default '0',
  `graveyard_id` float NOT NULL default '0',
  `min_level` tinyint(3) unsigned NOT NULL default '0',
  `min_status` tinyint(3) unsigned NOT NULL default '0',
  `zoneidnumber` int(4) NOT NULL default '0',
  `timezone` int(5) NOT NULL default '0',
  `maxclients` int(5) NOT NULL default '0',
  `weather` smallint(6) NOT NULL default '1',
  `note` varchar(80) default NULL,
  `underworld` float NOT NULL default '0',
  `minclip` float NOT NULL default '450',
  `maxclip` float NOT NULL default '450',
  `fog_minclip` float NOT NULL default '450',
  `fog_maxclip` float NOT NULL default '450',
  `fog_blue` tinyint(3) unsigned NOT NULL default '0',
  `fog_red` tinyint(3) unsigned NOT NULL default '0',
  `fog_green` tinyint(3) unsigned NOT NULL default '0',
  `sky` tinyint(3) unsigned NOT NULL default '1',
  `ztype` tinyint(3) unsigned NOT NULL default '1',
  `zone_exp_multiplier` decimal(6,2) NOT NULL default '0.00',
  `walkspeed` float NOT NULL default '0.4',
  `time_type` tinyint(3) unsigned NOT NULL default '2',
  `fog_red1` tinyint(3) unsigned NOT NULL default '0',
  `fog_green1` tinyint(3) unsigned NOT NULL default '0',
  `fog_blue1` tinyint(3) unsigned NOT NULL default '0',
  `fog_minclip1` float NOT NULL default '450',
  `fog_maxclip1` float NOT NULL default '450',
  `fog_red2` tinyint(3) unsigned NOT NULL default '0',
  `fog_green2` tinyint(3) unsigned NOT NULL default '0',
  `fog_blue2` tinyint(3) unsigned NOT NULL default '0',
  `fog_minclip2` float NOT NULL default '450',
  `fog_maxclip2` float NOT NULL default '450',
  `fog_red3` tinyint(3) unsigned NOT NULL default '0',
  `fog_green3` tinyint(3) unsigned NOT NULL default '0',
  `fog_blue3` tinyint(3) unsigned NOT NULL default '0',
  `fog_minclip3` float NOT NULL default '450',
  `fog_maxclip3` float NOT NULL default '450',
  `fog_red4` tinyint(3) unsigned NOT NULL default '0',
  `fog_green4` tinyint(3) unsigned NOT NULL default '0',
  `fog_blue4` tinyint(3) unsigned NOT NULL default '0',
  `fog_minclip4` float NOT NULL default '450',
  `fog_maxclip4` float NOT NULL default '450',
  `flag_needed` varchar(128) NOT NULL default '',
  `canbind` tinyint(4) NOT NULL default '1',
  `cancombat` tinyint(4) NOT NULL default '1',
  `canlevitate` tinyint(4) NOT NULL default '1',
  `castoutdoor` tinyint(4) NOT NULL default '1',
  `insttype` tinyint(1) unsigned zerofill NOT NULL default '0',
  `shutdowndelay` bigint(16) unsigned NOT NULL default '5000',
  PRIMARY KEY  (`short_name`),
  UNIQUE KEY `zoneidnumber` (`zoneidnumber`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

For working out the item structure size and field locations, I am always willing to give it a shot. If we can find the Heroic stats section of the struct, it shouldn't be much after that. If you stick something up on the SVN for items, I will definitely give it a shot :)

Also, I think I may know why AAs aren't loading, and I am guessing it may be due to an issue with the player profile struct. I think I have verified that many fields are in the correct locations, but some of them are a bit more complicated. And, I am not quite sure which things in game for the client come from the player profile or the spawn struct, since they are both redundant in alot of things.

OscarGrouch05 02-13-2009 03:46 AM

I use this site the help me or i read the eqnews.txt file in client
http://eqplayers.station.sony.com/game_updates.vm

to help me out with what was changed or fixed

the newest client i have found to be open and say i have all expanshions
is 04/11/08 update, i'm waiting for the next one to be soon i hope and keep my fingers crossed :D

as i have noticed the opcodes for login have changed after May of 08.
i'll keep working on the login opcodes if i find more info i'll be sure to let
you known.

KLS 02-13-2009 04:13 AM

Took a couple hours but:
http://i8.photobucket.com/albums/a2/...e/EQ000007.jpg

Hopefully can get items basically loading soonish, I have a decent idea on augments but I'm gonna probably hold off at first. There's a lot of other packets to do with items that will need to be covered, item links, moving items, using clicky items etc. Every item packet with a slot ref will have to be encoded/decoded even if it hasn't changed because of the 22-39 getting bumped up a slot.

...but ima go lie down now I think.

trevius 02-13-2009 05:12 AM

That is great news KLS! Considering that most other item related packets shouldn't be all too big, I think getting items working in the first place will be the hardest part. After that, it should just be adjusting a few small structs slightly and then finding a few opcodes.

Also, I didn't really think about it until now, but I am betting my issues with AAs displaying is also related to the expansion field issue that Derision mentioned that is causing the Power Source slot to not show up. I will mess with it a bit more. Right now, I am reworking a bit of the player profile struct to be more in line and accurate to what Derision's packet log shows. It seems to be helping so far, at least for displaying armor materials. I know that alot of that struct is already lined up properly, so it is mostly just adjusting the sections in between the parts that already line up. I am not sure why, but my AA window shows that I have 917 unspent AAs (which is accurate to what Titanium shows), but only 62 spent AAs even though Titanium shows 260 spent. Maybe that too is expansion field related, but it makes me think that maybe that field is just in the wrong place. Though, it looks like it should be in the right place from everything I have referenced so far (packet collects, showeq structs and Titanium structs).

And, OscarGrouch, I am not sure what you are trying to accomplish with the different clients you are trying. We will not be using any client after SoF, so any after that is nearly pointless. Yeah, you can find opcodes to log in to character select pretty easily, but that is very easy compared to filling in all of the packet structures properly and the rest of the missing opcodes. Plus, it is unlikely that we would ever want to use a client that isn't legally attainable. The expansion information you are talking about, I am guessing is the list of expansions that show up at the server select screen. That doesn't matter to the development of SoF at all. So, you shouldn't use any more time on that unless you have something else you are working on that isn't related to this development. Maybe I am just not clear on what it is that you are trying to accomplish.

KLS 02-13-2009 06:22 PM

That field is probably in the wrong place. Speaking of wrong placed fields the pop combat ratings seem to of moved... along with faction mods, and I'm still trying to plot out the entire rest of the packet but it's slow goin, hopefully I'll have enough done to start loading inventory soon though.

Ima revise that I don't think they moved but something is definitely keeping them from displaying, there must be some bit that controls that column's vis.

KLS 02-13-2009 08:44 PM

If you get a chance could you go collect a book type item from live? I'm not sure how they're doing filename now... it does seem to be an int size but I'd like an item to study before moving on.

trevius 02-13-2009 08:44 PM

I wouldn't be too surprised if they weren't showing up because we weren't sending the correct expansion packet like Derision said. It is keeping the Power Source slot from showing up, so maybe it also keeps PoP stats from showing up. I am interested to see how much that expansion packet corrects. I have a feeling it will help my AA window issues and probably the max level of 75 issue too.

I am mostly trying to clean up the spawn struct, illusion struct and player profile some while I wait for Derisions next update. There is still plenty I can work on, so no rush :)

And yeah, I will try to get a book now.

trevius 02-13-2009 09:07 PM

Here is a noobie note that should work just as well as anything. The 02 I bolded is itemtype 2 for book:

Code:

Feb 13 2009 18:46:22:638 [Decoded] [Server->Client] [Size: 11915]
[OPCode: 0x709d]
000 | 0a 00 00 00 01 00 00 00 00 00 00 00 1d 00 00 00  | ................
016 | 00 00 00 00 01 00 00 00 00 00 00 00 8a 4a 02 00  | .............J..
032 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
048 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
064 | 00 00 00 02 43 72 65 73 63 65 6e 74 20 52 65 61  | ....Crescent Rea
080 | 63 68 20 47 75 69 6c 64 20 53 75 6d 6d 6f 6e 73  | ch Guild Summons
096 | 00 4c 6f 6f 6b 73 20 6c 69 6b 65 20 69 74 27 73  | .Looks like it's
112 | 20 77 6f 72 74 68 20 72 65 61 64 69 6e 67 00 49  |  worth reading.I
128 | 54 36 33 00 21 e5 00 00 00 01 00 00 00 00 00 00  | T63.!...........
144 | 00 00 00 00 00 f8 01 00 00 01 00 00 00 00 00 00  | ................
160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
176 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
192 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00  | ................
208 | 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff  | ................
224 | ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
256 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
272 | 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00  | ................
288 | 00 00 00 00 00 00 80 3f 00 00 00 00 00 00 00 00  | .......?........
304 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
336 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
352 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
368 | 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00  | ................
384 | 00 00 00 01 00 00 00 00 00 01 00 00 00 00 00 01  | ................
400 | 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00  | ................
416 | 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00  | ...F............
432 | ff 43 52 45 57 69 7a 61 72 64 4e 6f 74 65 00 00  | .CREWizardNote..
448 | 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00  | ................
464 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
480 | 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00  | ................
496 | 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
512 | 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00  | ................
528 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
544 | 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff  | ................
560 | ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
576 | 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff  | ................
592 | ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00  | ................
608 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
624 | ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  | ................
640 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
656 | 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00  | ................
672 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
688 | 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00  | ................
704 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
720 | 00 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00  | ................
736 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
752 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
768 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
784 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
800 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
816 | 00 00 00 00 00 00 00 00 00 00 00


KLS 02-13-2009 11:22 PM

No, no I don't think that's it at all. I notice when I get my offsets wrong and the items clip each other and I get a 2nd item with garbled stats I'll see accuracy strikethrough etc.

I'm really bad with messing up my offsets too, when I'm stepping through 500 bytes just to realize I've gotten off by 1 byte I wanna kill myself... need to finish this structure already.

KLS 02-14-2009 01:23 AM

You know what it was? I had an uint8 instead of uint32 in one spot and incidentally 3 extra bytes not far down so I didn't catch it right away.

It's basically structured now ima try getting an inventory to load... but first...

I've had it up to here with
Code:

[02.13. - 21:08:30] [NET__IDENTIFY] Unable to identify stream from 192.168.1.110:1540 before it closed.
You will be squished.

Also, if you are able to get a collect of an item with an augment socketed sooner or later that'd probably help. Tho I wont be doing that at first.

trevius 02-14-2009 04:51 AM

Here is "Signet of Might" with an "Onyx Orb of Aggression" augmented in it:

Code:

01 00 00 00 00 00 00 00 04  | ................
66064 | 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 b4  | ................
66080 | 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66096 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66112 | 00 00 00 00 00 00 00 53 69 67 6e 65 74 20 6f 66  | .......Signet of
66128 | 20 4d 69 67 68 74 00 52 61 77 20 70 6f 77 65 72  |  Might.Raw power
66144 | 20 73 75 72 67 65 73 20 69 6e 74 6f 20 79 6f 75  |  surges into you
66160 | 72 20 62 6f 64 79 00 49 54 36 33 00 7f 3f 00 00  | r body.IT63..?..
66176 | 14 01 00 00 00 12 00 00 00 00 00 00 00 da 04 00  | ................
66192 | 00 01 00 00 00 00 00 00 0f 0f 0f 0f 0f 00 19 19  | ................
66208 | 19 19 00 19 19 91 00 00 00 82 00 00 00 82 00 00  | ................
66224 | 00 19 00 00 00 03 00 00 00 00 00 00 00 00 00 00  | ................
66240 | 00 ff ff 00 00 ff ff 00 00 00 00 00 00 08 00 00  | ................
66256 | 00 00 00 00 00 13 00 00 00 00 00 00 00 00 00 00  | ................
66272 | 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00  | ................
66288 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66304 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 1d  | ................
66320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3f  | ...............?
66336 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66352 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66368 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66384 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66400 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66416 | 00 07 00 00 00 01 00 00 00 00 00 01 00 00 00 00  | ................
66432 | 00 01 00 00 00 00 00 01 00 00 00 00 00 01 00 00  | ................
66448 | 00 00 00 00 00 00 00 00 00 00 00 46 00 00 00 00  | ...........F....
66464 | 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00 00  | ................
66480 | 00 00 00 00 00 00 00 00 00 1e 00 00 00 00 00 00  | ................
66496 | 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff  | ................
66512 | ff 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  | ................
66528 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66544 | 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 00 00  | ................
66560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66576 | 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00  | ................
66592 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66608 | 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff  | ................
66624 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66640 | 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff  | ................
66656 | ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66672 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff  | ................
66688 | ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00  | ................
66704 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66720 | 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00  | ................
66736 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66752 | 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00  | ................
66768 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66784 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66800 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66816 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66832 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66848 | 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00  | ................
66864 | 00 00 1e 00 00 00 00 00 00 00 01 00 00 00 00 00  | ................
66880 | 00 00 b5 1d 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66896 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
66912 | 00 00 00 00 00 00 00 00 00 00 4f 6e 79 78 20 4f  | ..........Onyx O
66928 | 72 62 20 6f 66 20 41 67 67 72 65 73 73 69 6f 6e  | rb of Aggression
66944 | 00 41 6e 20 61 75 72 61 20 6f 66 20 63 6f 6e 73  | .An aura of cons
66960 | 74 69 74 75 74 69 6f 6e 20 65 6d 61 6e 61 74 65  | titution emanate
66976 | 73 20 66 72 6f 6d 20 77 69 74 68 69 6e 00 49 54  | s from within.IT
66992 | 36 33 00 fc a4 00 00 00 01 00 00 00 fe ff 1f 00  | 63..............
67008 | 00 00 00 00 9a 05 00 00 01 00 00 00 00 00 00 00  | ................
67024 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67056 | 00 00 00 00 00 00 00 00 ff ff 00 00 ff ff 00 00  | ................
67072 | 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff  | ................
67088 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67104 | 00 00 00 00 00 00 00 00 00 41 00 00 00 00 00 00  | .........A......
67120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67136 | 00 00 00 00 00 ff 36 00 00 00 00 00 00 00 00 00  | ......6.........
67152 | 00 00 00 00 00 80 3f 00 00 00 00 00 00 00 00 00  | ......?.........
67168 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67184 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67200 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67216 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67232 | 40 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  | @...............
67248 | 00 00 01 00 00 00 00 00 01 00 00 00 00 00 01 00  | ................
67264 | 00 00 00 00 01 00 01 00 00 00 04 00 00 00 aa 05  | ................
67280 | 00 00 46 00 00 00 01 00 00 00 00 00 00 00 00 00  | ..F.............
67296 | 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00  | ................
67312 | 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67328 | a5 b7 00 00 ff ff ff ff 00 00 00 00 00 00 00 00  | ................
67344 | 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff  | ................
67376 | ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67392 | 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff  | ................
67408 | ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67424 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff  | ................
67440 | ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00  | ................
67456 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67472 | 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00  | ................
67488 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67504 | 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00  | ................
67520 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67536 | 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff  | ................
67552 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67568 | 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00  | ................
67584 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67600 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67616 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67632 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67648 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
67664 | 00 00 00 00 00 00 00 00 00 00 00 00 00

Damn that thing took too many hours of tradeskilling just to be made obsolete when we got into PoTimeB lol.

Derision 02-14-2009 08:34 AM

I've committed the Character Creation stuff.

You will need to update your Expansions variable to see the Power Source slot. I used 16383.

The hairstyle/color on the Character Select screen is wrong for Drakkin, but seems OK for other races.

Tutorial button doesn't work yet.

The character creation in SoF is different in that it doesn't send the player_choice field anymore, rather it sends the actual ZoneID of the requested start zone, so I created a new WorldDatabase::GetStartZoneSoF to handle SoF clients that puts new characters in Crescent Reach if there is no matching entry in start_zones.

I'll try and sort out the tutorial button and then maybe try and find out why you get kicked to character select when you die.

KLS 02-14-2009 09:09 AM

OK so:
http://i8.photobucket.com/albums/a2/...e/EQ000008.jpg

/cheer

I'll commit tomorrow I think. A lot of fields are off, esp with respect to item clickies and scrolls and stuff. Delay seems to of become lost too. But I think it's to the point that it's workable enough that other people besides me should have to do all the work...

Now it's 5hrs past my bedtime but I had to finish that, I'm going to bed =(

AndMetal 02-14-2009 07:00 PM

Not sure if this will help, but EQItems has an SVN for their itemcollector which may help find the serialization info.

I think this is from Live:
http://eqitems.13th-floor.org/svn/it...ct/EQItem.java
Code:

    protected static final int fieldinfo[][] = {
        // Types:
        // 0 - ignore
        // 1 - unsigned int
        // 2 - string (size ignored)
        // 3 - empty placeholder
        // 4 - signed int
        // 5 - float
        // 6 - evolving item flag
        // 7 - string of ints
        // 8 - if 0, 4 bytes less in initial header
            // type , size, position in array
            //{ 0, 4, 0 },
            //{ 8, 4, 0 },                // if 0, 4 bytes less in initial header
            //{ 0, 57, 0 },                // ??
            { 6, 1, -1 },                // if not 0, add in evolvingfieldinfo
            { 1, 1, 0 },                // item class
            { 2, 0, 1 },                // item name
            { 2, 0, 2 },                // item lore
            { 3, 0, 3 },                // lorefile - not in packed form?
            { 2, 0, 4 },                // idfile
            { 1, 4, 5 },                // id
            { 1, 1, 6 },                // weight
            { 1, 1, 7 },                // norent
            { 1, 1, 8 },                // nodrop
            { 1, 1, 127 },                // short attuneable;
            { 1, 1, 9 },                // size
            { 1, 4, 10 },                // slots
            { 1, 4, 11 },                // price
            { 1, 4, 12 },                // icon
            { 1, 1, 13 },                // unk13
            { 1, 1, 14 },                // unk14
            { 1, 4, 15 },                // benefit flag
            { 1, 1, 16 },                // tradeskills
            { 4, 1, 17 },                // cr
            { 4, 1, 18 },                // dr
            { 4, 1, 19 },                // pr
            { 4, 1, 20 },                // mr
            { 4, 1, 21 },                // rr
            { 4, 1, 22 },                // svcorruption
            { 4, 1, 23 },                // short astr;
            { 4, 1, 24 },                // short asta;
            { 4, 1, 25 },                // short aagi;
            { 4, 1, 26 },                // short adex;
            { 4, 1, 27 },                // short acha;
            { 4, 1, 28 },                // short aint;
            { 4, 1, 29 },                // short awis;
            { 4, 4, 30 },                // short hp;
            { 4, 4, 31 },                // short mana;
            { 4, 4, 32 },                // short endur;
            { 4, 4, 33 },                // short ac;
            { 4, 4, 120 },                // short regen;
            { 4, 4, 121 },                // short manaregen;
            { 4, 4, 122 },                // short enduranceregen;
            { 1, 4, 34 },                // short classes;
            { 1, 4, 35 },                // short races;
            { 1, 4, 36 },                // short deity;
            { 4, 4, 37 },                // short skillmodvalue;
            { 1, 4, 38 },                // short UNK038;
            { 4, 4, 39 },                // short skillmodtype;
            { 1, 4, 40 },                // short banedmgrace;
            { 1, 4, 41 },                // short banedmgbody;
            { 1, 4, 42 },                // short banedmgraceamt;
            { 1, 4, 43 },                // short banedmgamt;
            { 1, 1, 44 },                // short magic;
            { 4, 4, 45 },                // short casttime_;
            { 1, 4, 46 },                // short reqlevel;
            { 1, 4, 47 },                // short reclevel;
            { 1, 4, 48 },                // short recskill;
            { 1, 4, 49 },                // short bardtype;
            { 4, 4, 50 },                // short bardvalue;
            { 1, 1, 51 },                // short light;
            { 1, 1, 52 },                // short delay;
            { 1, 1, 53 },                // short elemdmgtype;
            { 1, 1, 54 },                // short elemdmgamt;
            { 1, 1, 55 },                // short range;
            { 1, 4, 56 },                // short damage;
            { 1, 4, 57 },                // short color;
            { 1, 1, 58 },                // short itemtype;
            { 1, 4, 59 },                // short material;
            { 1, 4, 60 },                // short UNK060;
            { 1, 4, 61 },                // short UNK061;
            { 5, 4, 62 },                // short sellrate;
            { 4, 4, 63 },                // short combateffects;
            { 4, 4, 64 },                // short shielding;
            { 4, 4, 65 },                // short stunresist;
            { 4, 4, 66 },                // short strikethrough;
            { 4, 4, 67 },                // short extradmgskill;
            { 4, 4, 68 },                // short extradmgamt;
            { 4, 4, 69 },                // short spellshield;
            { 4, 4, 70 },                // short avoidance;
            { 4, 4, 71 },                // short accuracy;
            { 1, 4, 72 },                // short charmfileid;
            { 1, 4, 73 },                // short factionmod1;
            { 4, 4, 74 },                // short factionamt1;
            { 1, 4, 75 },                // short factionmod2;
            { 4, 4, 76 },                // short factionamt2;
            { 1, 4, 77 },                // short factionmod3;
            { 4, 4, 78 },                // short factionamt3;
            { 1, 4, 79 },                // short factionmod4;
            { 4, 4, 80 },                // short factionamt4;
            { 2, 1, 81 },                // short charmfile; - should be 0 for empty string?
            { 1, 4, 82 },                // short augtype;
            { 1, 4, 83 },                // short augrestrict;
            { 1, 4, 85 },                // short augslot1type;
            { 1, 1, 86 },                // short augslot1unk;
            { 1, 1, 87 },                // short augslot1unk2;
            { 1, 4, 88 },                // short augslot2type;
            { 1, 1, 89 },                // short augslot2unk;
            { 1, 1, 90 },                // short augslot2unk2;
            { 1, 4, 91 },                // short augslot3type;
            { 1, 1, 92 },                // short augslot3unk;
            { 1, 1, 93 },                // short augslot3unk2;
            { 1, 4, 94 },                // short augslot4type;
            { 1, 1, 95 },                // short augslot4unk;
            { 1, 1, 96 },                // short augslot4unk2;
            { 1, 4, 97 },                // short augslot5type;
            { 1, 1, 98 },                // short augslot5unk;
            { 1, 1, 99 },                // short augslot5unk2;
            { 1, 4, 100 },                // short pointtype;
            { 1, 4, 101 },                // short ldontheme;
            { 1, 4, 102 },                // short ldonprice;
            { 1, 4, 103 },                // short UNK098;
            { 1, 4, 104 },                // short ldonsold;
            { 1, 1, 105 },                // short bagtype;
            { 1, 1, 106 },                // short bagslots;
            { 1, 1, 107 },                // short bagsize;
            { 1, 1, 108 },                // short bagwr;
            { 1, 1, 109 },                // short book;
            { 1, 1, 110 },                // short booktype;
            { 2, 1, 111 },                // short filename;
            { 4, 4, 112 },                // short loregroup;
            { 1, 1, 113 },                // short artifactflag;
            { 1, 1, 114 },                // short UNK109;
            { 1, 4, 115 },                // short favor;
// 19 bytes later is guildfavor
// no drop items on FV server
            { 1, 1, 117 },                // short fvnodrop;
            { 4, 4, 118 },                // short dotshielding;
            { 4, 4, 119 },                // short attack;
            { 4, 4, 123 },                // short haste;
            { 4, 4, 124 },                // short damageshield;
            { 1, 4, 116 },                // short guildfavor;
            { 1, 4, 84 },                // short augdistiller;
            { 4, 4, 125 },                // short UNK120;
            { 1, 4, 126 },                // short UNK121;
            { 1, 1, 128 },                // short nopet;
            { 1, 1, 129 },                // short UNK124;
            { 1, 1, 130 },                // short potionbelt;
            { 1, 4, 131 },                // short potionbeltslots;
            { 1, 4, 132 },                // short stacksize;
// 22 bytes later is clickeffect
            { 1, 1, 133 },                // short notransfer;
            { 1, 2, 136 },                // short UNK131;
            { 7, 19, 137 },                // char  UNK132[255];
            { 4, 4, 138 },                // short clickeffect;
            { 1, 1, 140 },                // short clicklevel2;
            { 1, 1, 139 },                // short clicktype;
            { 1, 4, 141 },                // short clicklevel;
            { 4, 4, 142 },                // short maxcharges;
            { 4, 4, 143 },                // short casttime;
            { 1, 4, 144 },                // short recastdelay;
            { 4, 4, 145 },                // short recasttype;
            { 1, 4, 146 },                // short clickunk5;
            { 2, 1, 147 },                // short clickunk6;
            { 4, 4, 148 },                // short clickunk7;
            { 4, 4, 149 },                // short proceffect;
// 27 bytes later is procunk7
            { 1, 1, 151 },                // short proclevel2;
            { 1, 1, 150 },                // short proctype;
            { 1, 4, 152 },                // short proclevel;
            { 4, 4, 153 },                // short procunk1; -- poison
            { 1, 4, 154 },                // short procunk2;
            { 1, 4, 155 },                // short procunk3;
            { 1, 4, 156 },                // short procunk4;
            { 4, 4, 157 },                // short procrate;
            { 2, 1, 158 },                // short procunk6;
            { 4, 4, 159 },                // short procunk7;
            { 4, 4, 160 },                // short worneffect;
// 27 bytes later is wornunk7
            { 1, 1, 162 },                // short wornlevel2;
            { 1, 1, 161 },                // short worntype;
            { 1, 4, 163 },                // short wornlevel;
            { 4, 4, 164 },                // short wornunk1;
            { 1, 4, 165 },                // short wornunk2;
            { 1, 4, 166 },                // short wornunk3;
            { 1, 4, 167 },                // short wornunk4;
            { 1, 4, 168 },                // short wornunk5;
            { 2, 1, 169 },                // short wornunk6;
            { 4, 4, 170 },                // short wornunk7;
            { 4, 4, 171 },                // short focuseffect;
// 27 bytes later is focusunk7
            { 1, 1, 173 },              // short focuslevel2
            { 1, 1, 172 },                // short focustype;
// Is focuslevel 4 bytes ala clicklevel?
            { 1, 4, 174 },              // short focuslevel;
            { 4, 4, 175 },                // short focusunk1;
            { 1, 4, 176 },                // short focusunk2;
            { 1, 4, 177 },                // short focusunk3;
            { 1, 4, 178 },                // short focusunk4;
            { 1, 4, 179 },                // short focusunk5;
            { 2, 1, 180 },                // short focusunk6;
            { 4, 4, 181 },                // short focusunk7;
            { 4, 4, 182 },                // short scrolleffect;

// 27 bytes later is scrollunk7
            { 1, 1, 184 },                // short scrolllevel2;       
            { 1, 1, 183 },                // short scrolltype;
            { 1, 4, 185 },                // short scrolllevel;
            { 1, 4, 186 },                // short scrollunk1;
            { 1, 4, 187 },                // short scrollunk2;
            { 1, 4, 188 },                // short scrollunk3;
            { 1, 4, 189 },                // short scrollunk4;
            { 1, 4, 190 },                // short scrollunk5;
            { 2, 1, 191 },                // short scrollunk6;
            { 4, 4, 192 },                // short scrollunk7;
            { 1, 4, 134 },                // short UNK129;  -- near end?  see fellowship insignia
            { 1, 1, 135 },                // short questitemflag;
            { 1, 4, 193 },                // short powersourcecapacity;
            { 1, 4, 194 },                // short purity;
            // Secrets of Faydwer additions: (195-206)
            { 4, 4, 206 },                // backstab damage
            { 4, 4, 195 },                // dmgshldmit
            { 4, 4, 196 },                // heroic_strength
            { 4, 4, 197 },                // heroic_int
            { 4, 4, 198 },                // heroic_wis
            { 4, 4, 199 },                // heroic_agi
            { 4, 4, 200 },                // heroic_dex
            { 4, 4, 201 },                // heroic_sta
            { 4, 4, 202 },                // heroic_cha
            { 0, 24, 0 },                // ??
            { 4, 4, 203 },                // healamt
            { 4, 4, 204 },                // spelldmg
            { 4, 4, 205 },                // clairvoyance
//            { 0, 76, 0 }                // ??
    };

And for evolving items:
http://eqitems.13th-floor.org/svn/it...lvingItem.java
Code:

        protected final static int fieldinfo[][] = {
            { 1, 1, 6},                // evolving level
            { 0, 25, 0}                // ?
        };


KLS 02-15-2009 03:47 AM

Some good info in there, most known but a few things helps. The biggest problem isn't where things are.. we know for the most part but between versions bytes will slip into strange places and throw offsets off a bit which is what causes fields to be off... and it's annoying as heck btw.

Also I'm going to commit some more item stuff even tho I promised myself I'd take a break. Item movement and bags should work after this.

Some items also cause the client to 'crash', it's an odd crash the client just fails to load and eventually just exits to the desktop with no error. Nothing even in log. Something about the item packet is malformed and causes this.

Code:

[Sat Feb 14 23:43:06 2009]00318:MSG_TIME_STAMP received. (Items inc).

[Sat Feb 14 23:43:06 2009]00319:Received an item via EQI_STARTING_ITEM at loc 2
[Sat Feb 14 23:43:06 2009]00320:Received an item via EQI_STARTING_ITEM at loc 7
[Sat Feb 14 23:43:06 2009]00321:Received an item via EQI_STARTING_ITEM at loc 8
[Sat Feb 14 23:43:06 2009]00322:Received an item via EQI_STARTING_ITEM at loc 9
[Sat Feb 14 23:43:06 2009]00323:Received an item via EQI_STARTING_ITEM at loc 10
[Sat Feb 14 23:43:06 2009]00324:Received an item via EQI_STARTING_ITEM at loc 13
[Sat Feb 14 23:43:06 2009]00325:Received an item via EQI_STARTING_ITEM at loc 14
[Sat Feb 14 23:43:06 2009]00326:Received an item via EQI_STARTING_ITEM at loc 17
[Sat Feb 14 23:43:06 2009]00327:Received an item via EQI_STARTING_ITEM at loc 18
[Sat Feb 14 23:43:06 2009]00328:Received an item via EQI_STARTING_ITEM at loc 19
[Sat Feb 14 23:43:06 2009]00329:Received an item via EQI_STARTING_ITEM at loc 23
[Sat Feb 14 23:43:06 2009]00330:Received an item via EQI_STARTING_ITEM at loc 24
[Sat Feb 14 23:43:06 2009]00331:Received an item via EQI_STARTING_ITEM at loc 25
[Sat Feb 14 23:43:06 2009]00332:Received an item via EQI_STARTING_ITEM at loc 281

That's it, end of the log. There's a couple more items after 281 but I've confirmed it's what's at 281 that's causing the crash in this case it's: 5022. I noticed having some fields set wrong (usually the unknowns) causes this to happen when making the packet. So im guessing there's an unknown like this somewhere in the shuffled fields.

trevius 02-15-2009 05:22 AM

Yeah, at some point, the item packet gets off and causes the crash. From the example I have, it looks like it is just trying to load a slot that doesn't exist:

Code:

[Sat Feb 14 17:34:17 2009]00216:MSG_TIME_STAMP received. (Items inc).

[Sat Feb 14 17:34:17 2009]00217:Received an item via EQI_STARTING_ITEM at loc 0
[Sat Feb 14 17:34:17 2009]00218:Received an item via EQI_STARTING_ITEM at loc 1
[Sat Feb 14 17:34:17 2009]00219:Received an item via EQI_STARTING_ITEM at loc 2
[Sat Feb 14 17:34:17 2009]00220:Received an item via EQI_STARTING_ITEM at loc 3
[Sat Feb 14 17:34:17 2009]00221:Received an item via EQI_STARTING_ITEM at loc 4
[Sat Feb 14 17:34:17 2009]00222:Received an item via EQI_STARTING_ITEM at loc 5
[Sat Feb 14 17:34:17 2009]00223:Received an item via EQI_STARTING_ITEM at loc 6
[Sat Feb 14 17:34:17 2009]00224:Received an item via EQI_STARTING_ITEM at loc 1792
[Sat Feb 14 17:34:17 2009]00225:Received an item via EQI_STARTING_ITEM at loc 0
[Sat Feb 14 17:34:17 2009]00226:Received an item via EQI_STARTING_ITEM at loc 0

I will take a look at it now that the inventory stuff is on the SVN. I also identified a few more opcodes like MoveItem and Consume I think. I just need to test them out to make sure. Now that items are at least partially done, I think it will help alot to get the game more finalized. It definitely opens up more stuff to work on.

On another note, I was hoping that the expansion struct that Derision added would help my AA structs to start working, but they aren't working just yet. I will keep playing with those too. I am sure we can get them going soon.

KLS 02-15-2009 05:34 AM

Nah I've had good loads with the client thinking it has a bad item slot. It finishes loading the item from the slot but then allocates way too much memory for the next item or something. Bad item slot just fails to load unless it's negative then you'll get an immediate crash... im not sure why some item slots get way off tho. I'll have to look at my output logs and make sure everything it looking right.

Code:

[Sun Feb 15 00:02:28 2009]00140:Received our Player from zone. MSG_EQ_NETPLAYERBUFF is next.
[Sun Feb 15 00:02:28 2009]00141:Player = Krissy, zone = The Mines of Gloomingdeep
[Sun Feb 15 00:02:35 2009]00142:MSG_EQ_NETPLAYERBUFF received started.
[Sun Feb 15 00:02:35 2009]00143:MSG_EQ_NETPLAYERBUFF finished.
[Sun Feb 15 00:02:36 2009]00144:MSG_EQ_NETPLAYERBUFF received started.
[Sun Feb 15 00:02:36 2009]00145:MSG_EQ_NETPLAYERBUFF finished.
[Sun Feb 15 00:02:36 2009]00146:MSG_TIME_STAMP received.

[Sun Feb 15 00:02:36 2009]00147:MSG_TIME_STAMP received. (Items inc).

[Sun Feb 15 00:02:36 2009]00148:Received an item via EQI_STARTING_ITEM at loc 2
[Sun Feb 15 00:02:36 2009]00149:Received an item via EQI_STARTING_ITEM at loc 7
[Sun Feb 15 00:02:36 2009]00150:Received an item via EQI_STARTING_ITEM at loc 8
[Sun Feb 15 00:02:36 2009]00151:Received an item via EQI_STARTING_ITEM at loc 9
[Sun Feb 15 00:02:36 2009]00152:Received an item via EQI_STARTING_ITEM at loc 10
[Sun Feb 15 00:02:36 2009]00153:Received an item via EQI_STARTING_ITEM at loc 13
[Sun Feb 15 00:02:36 2009]00154:Received an item via EQI_STARTING_ITEM at loc 14
[Sun Feb 15 00:02:36 2009]00155:Received an item via EQI_STARTING_ITEM at loc 17
[Sun Feb 15 00:02:36 2009]00156:Received an item via EQI_STARTING_ITEM at loc 18
[Sun Feb 15 00:02:36 2009]00157:Received an item via EQI_STARTING_ITEM at loc 19
[Sun Feb 15 00:02:36 2009]00158:Received an item via EQI_STARTING_ITEM at loc 23
[Sun Feb 15 00:02:36 2009]00159:Received an item via EQI_STARTING_ITEM at loc 24
[Sun Feb 15 00:02:36 2009]00160:Received an item via EQI_STARTING_ITEM at loc 25
[Sun Feb 15 00:02:36 2009]00161:Received an item via EQI_STARTING_ITEM at loc 282
[Sun Feb 15 00:02:36 2009]00162:Received an item via EQI_STARTING_ITEM at loc 16777216
[Sun Feb 15 00:02:36 2009]00163:Received an item via EQI_STARTING_ITEM at loc 27
[Sun Feb 15 00:02:36 2009]00164:Received an item via EQI_STARTING_ITEM at loc 28
[Sun Feb 15 00:02:36 2009]00165:Received an item via EQI_STARTING_ITEM at loc 29
[Sun Feb 15 00:02:36 2009]00166:Received an item via EQI_STARTING_ITEM at loc 30
[Sun Feb 15 00:02:36 2009]00167:Item done, MSG_WEATHER_EVENT received.

[Sun Feb 15 00:02:36 2009]00168:Initializing zone.
[Sun Feb 15 00:02:36 2009]00169:Initializing world.
[Sun Feb 15 00:02:36 2009]00170:Verifying world files.
[Sun Feb 15 00:02:36 2009]00171:Attempting to load tutorialb.EQG.
[Sun Feb 15 00:02:41 2009]00172:Loaded tutorialb.EQG.
[Sun Feb 15 00:02:41 2009]00173:Loading zone specific files.

I've noticed items in bags tend to be particularly big offenders for some reason it's almost always an item in a bag...

trevius 02-15-2009 06:12 AM

Yeah, that info from 13th floor SVN is definitely useful. I just used it to correct delay, light, and a few other things in the struct and verified that the changes worked and are now accurate. I will try to go through the rest of the struct and see what else can be adjusted.

AndMetal 02-15-2009 06:35 AM

Quote:

Originally Posted by KLS (Post 164538)
Code:

[Sun Feb 15 00:02:36 2009]00162:Received an item via EQI_STARTING_ITEM at loc 16777216

Not sure if it's been noticed, but 16777216 is 1000000 in hex, so it looks like we're getting 3 extra bytes in there. In the log, it doesn't look like slot 1 was sent, so that's probably it. I've also seen 436207616 (1A000000 so 1A -> 26) while messing around myself.

I've also seen some in-game errors from the server about issues with slots:
Code:

[Debug] Error: Server found no item in slot 13245 (->12274), Deleting Item!
[Debug] DeleteItemInInventory(12274, 0, true)
[Debug] Error: Server found no item in slot 14192 (->12274), Deleting Item!
[Debug] DeleteItemInInventory(12274, 0, true)
[Debug] Error: Server found no item in slot 15118 (->12274), Deleting Item!
[Debug] DeleteItemInInventory(12274, 0, true)
[Debug] Error: Server found no item in slot 16054 (->12274), Deleting Item!
[Debug] DeleteItemInInventory(12274, 0, true)
[Debug] Error: Server found no item in slot 16990 (->12274), Deleting Item!
[Debug] DeleteItemInInventory(12274, 0, true)
[Debug] Error: Server found no item in slot 17900 (->12274), Deleting Item!
[Debug] DeleteItemInInventory(12274, 0, true)
[Debug] Error: Server found no item in slot 9796 (->8841), Deleting Item!
[Debug] DeleteItemInInventory(8841, 0, true)
[Debug] Error: Server found no item in slot 8476 (->7542), Deleting Item!
[Debug] DeleteItemInInventory(7542, 0, true)
[Debug] Error: Server found no item in slot 9400 (->7542), Deleting Item!
[Debug] DeleteItemInInventory(7542, 0, true)

I'm not sure if it's directly related, but I think Attack might be also suffering a similar issue.

trevius 02-15-2009 09:56 AM

Yeah, after looking and the error I posted earlier from the EQ debug, I just noticed that slot 1792 would be 700 in hex, so it was probably off a byte since it had just loaded slot 6 and slot 7 would have been next. So, it sounds like we are just adding an extra byte somewhere that isn't needed.

I made some corrections to the item structure and am going to commit them to the SVN in a minute. It still isn't perfect, but seems to be loading at least the starter items I have tried very well now. Using the 13th floor info that AndMetal posted has helped alot I think, though it doesn't seem to be 100% accurate for SoF. At least it is a better guide.

One important one is that it seems like the filename field is just like any other string field. It should load a null byte if there is nothing in that field. The booktype field being set to int16 should have actually been int8, and the other byte there would be the filename field. The FF FF FF FF or 00 00 00 00 after that is actually an sint32 for loregroup. So, I think that makes a bit more sense now.

I am sure we can definitely get most of this structure sorted out without too many issues. Especially once we figure out where it is getting that extra byte from. I am thinking maybe one of the strings isn't supposed to have a null terminator after it or something. From what I can tell, I don't see any major difference between the items it was able to load and the item that threw off the struct by 1 byte. Maybe there is supposed to be an extra byte every few items or something...

KLS 02-15-2009 04:17 PM

I'm thinking maybe I'm not supposed to send bag content on initial serialization. When you open a bag this client sends a small packet to the server that includes the item slot opened...

KLS 02-15-2009 05:08 PM

Bah my packets were too long!

I had two nifty packets to show the diff between an item loading correct slot and an item not loading in correct slot but the forums ate them D=

Long and short of it: the headers are almost exactly the same they just differ by what I've labeled as potion type.. I've gotta look more into it tho.

KLS 02-16-2009 01:12 AM

I devised a workaround for the crashing and failure to load of items... well for the crashing at least :rolleyes:

I'd still like to figure out why it sometimes doesn't work when put into an EQI packet, but this should let us move onto more important things for now.

KLS 02-16-2009 04:10 AM

Work around for items seems to work fine, tho they still need a lot of work. I checked out AAs quickly but I'm kinda at a loss. Using the log I got from derision the data doesn't seem to of changed at all other than how they do string ids. I updated that to match and still nothing.

I notice that the window tabs don't even appear, which isn't entirely unusual. One thing I notice is the AA table is sent directly after the client requests the zone, right before the player profile. And for titanium and below we send it... considerably later, maybe the client is getting picky with how it's sent, or maybe there's some other packet that needs to be sent to get AAs to work.

trevius 02-16-2009 05:11 AM

Yeah, I think the tabs only display as needed. I have messed with it quite a bit and haven't had any luck at all yet. Though, I haven't tried changing when they get sent yet, which is a good point. I noticed that they are one of the first things that get sent now. The only other thing I noticed, but kinda doubt would be a problem is that they all come in as combined packets on live. I don't know how we are sending them exactly, so I am not really sure.

One other thing I was thinking is that there is a good chance that the player profile isn't setup to load the proper AA info yet, but I think that only affects what AAs it shows you as having purchased.

For now, I am working some more on lining up the item struct and maybe getting merchants and combat working.

trevius 02-16-2009 09:26 PM

Derision already mentioned it in this thread, but before the info gets lost, I figured I would note it a bit more clearly here. To enable the use of SoF content (Drakken race and new zones), you must update the Expansions field in the Variables table to have a value of 16383. This number tells the client which expansions to use and you can set it to allow or disallow any expansion you wish. Here is how that number breaks down:

Code:

0 - Classic
1 - Ruins of Kunark
2 - Scars of Velious
4 - Shadows of Luclin
8 - Planes of Power
16 - Legacy of Ykesha
32 - Lost Dungeons of Norrath
64 - Gates of Discord
128 - Omens of War
256 - Dragons of Norrath
512 - Depths of Darkhallow
1024 - Prophecy of Ro
2048 - Serpent's Spine
4096 - The Burried Sea
8192 - Secrets of Faydwer

All Expansions combined = 16383

You just add up the numbers from the expansions you want to enable to set the Expansions value to that total. I verified this as well on my EQLive account, which is only enabled up to SoF, and it sends me the same number. It would probably be a good idea to note this in the changelog or maybe put an Optional SQL update file in the /utils/sql/svn/ folder so people don't forget to do it when they update.

Also, I forgot to mention it in the changelog, but I cleaned up the patch_SoF.conf file quite a bit last night. I still plan to reorganize it further by sorting the opcodes into related sections so they aren't just all over the place.

After thinking about AAs more, I am starting to think that there is a very good chance that the expansion field in the Player Profile is in the wrong place and/or not sending the proper expansion information needed for SoF. I will try forcing that field to use 16383 in the encode for all SoF clients. Then, I will see if I can work on it to align the expansion field into the correct place in that struct if it isn't already. I wouldn't be surprised at all if that was the reason the AAs aren't showing up yet. Though, if that is the case, I am surprised that the Power Source slot works and the AAs don't.

I was also thinking that the issue with AAs may be something new for AAs (as KLS mentioned). It could be very possible that there might be a new packet for the new sorting/filtering feature in the AA window. I would think that the client should be doing this sorting and filtering, but I figure it is better to consider all possibilities at this point to hopefully come up with a good solution soon.

trevius 02-17-2009 07:27 PM

I made some changes to the source so it can recognize the new Drakkin race. I haven't looked around much at what else might need to be changed yet though. So far, $race in perl scripts seems to report properly for Drakkin now instead of reporting unknown.

It looks like the reason that weapons and other items aren't working properly for Drakkin is because the source isn't set to handle the Drakkin race properly yet. I added this last night:

Code:

#define human_1                        1
#define barbarian_1                2
#define erudite_1                4
#define woodelf_1                8
#define highelf_1                16
#define darkelf_1                32
#define halfelf_1                64
#define dwarf_1                        128
#define troll_1                        256
#define ogre_1                        512
#define halfling_1                1024
#define gnome_1                        2048
#define iksar_1                        4096
#define vahshir_1                8192
#define rall_1                        16384 //guessing this is froglok?
#define drakkin_1                32768

From looking at item stats on 13th floor and adding up the races on items, it seems like 32768 should be the correct number for the Drakkin race. ALL/ALL items should be set to 65535 and it seems like most already are. I did notice that it looks like GeorgeS item editor may have been using a value of 131071 for ALL/ALL items at some point. I think that should still work properly, but that may be the source of some issues. If so, I think it would probably be safe to convert all race fields in the items table from 131071 to 65535. I think the main thing is that something else needs to be changed in the source so that the server knows that Drakkins are a player race and that items with 32768 in them should be usable by Drakkins.

For the issues with Item Slot Numbers being re-arranged in SoF, the slots are defined here:

/common/eq_constants.h
Code:

        ////////////////////////
        // Equip slots
        ////////////////////////
       
        SLOT_CHARM                = 0,
        SLOT_EAR01                = 1,
        SLOT_HEAD                = 2,
        SLOT_FACE                = 3,
        SLOT_EAR02                = 4,
        SLOT_NECK                = 5,
        SLOT_SHOULDER        = 6,
        SLOT_ARMS                = 7,
        SLOT_BACK                = 8,
        SLOT_BRACER01        = 9,
        SLOT_BRACER02        = 10,
        SLOT_RANGE                = 11,
        SLOT_HANDS                = 12,
        SLOT_PRIMARY        = 13,
        SLOT_SECONDARY        = 14,
        SLOT_RING01                = 15,
        SLOT_RING02                = 16,
        SLOT_CHEST                = 17,
        SLOT_LEGS                = 18,
        SLOT_FEET                = 19,
        SLOT_WAIST                = 20,
        SLOT_AMMO                = 21,
       
        ////////////////////////
        // All other slots
        ////////////////////////
        SLOT_PERSONAL_BEGIN = 22,
        SLOT_PERSONAL_END = 29,
       
        SLOT_CURSOR                = 30,
       
        SLOT_CURSOR_END        = (sint16)0xFFFE,        // Last item on cursor queue
        // Cursor bag slots are 331->340 (10 slots)
       
        // Personal Inventory Slots
        // Slots 1 through 8 are slots 22->29
        // Inventory bag slots are 251->330 (10 slots per bag)

Is there some way we can do an IF check that would use different lists depending on the expansion that the client is using? If so, then all we should have to do is do another IF check on usable slots for ammo items and convert 21 to 22.

trevius 02-17-2009 10:37 PM

I just figured out why combat with weapons wasn't working for Drakkin. The bool for IsEquipable was being set to false every time because it had not been adjusted to use the new total of 16 races. I corrected it on my test server and now combat seems to work perfectly. The actual damage during combat isn't being reported yet, but that it is still working. We still need the OP_Damage opcode and structure corrected before the damage will display. At least with this change, it makes basic gameplay functional. I will commit the change tonight when I get home.

I also found that Drakkin weren't set to start with any language skills, so I added Common Tongue and the 2 Dragon languages to them since I figure they would probably be able to speak the Dragon ones due to their nature. I will also commit that tonight.

Drakkin also have a unique racial starting skill that is really a special AA that only they get. Depending on the Heritage they chose, they get a slightly different affect from it, but I think the AA is called Dragon Breath. For that to work properly, we would have to write new code to handle heritage and also implement the AAs. Heritage also defines some slight differences in starting resists from what I have read. None of this needs to be done any time soon, but I figured I would note it for later use.

I don't think the item database needs to be updated much, but I will probably update a small SQL change to change any item set to 32767 (Titanium ALL races) to 65535 (SoF ALL races). I know I have seen at least one item that was supposed to be ALL/ALL that wasn't because it didn't have Drakkin on it. It may have been set that way by GeorgeS tool at some point, but I am not sure. We will need to verify his tool is setting ALL races to 65535 now.

trevius 02-18-2009 04:07 AM

LOL, I got combat damage working finally. ShowEQ was throwing me off, because they call OP_Damage OP_Action2. I finally saw it in some combat logs and tried it and it worked. All I had to do was add 5 more bytes to the end of the combat damage struct and it seems to work fine now.

That leaves AAs as what I consider to be the last major issue. They still aren't displaying properly yet. For now, I am going to try to get doors working properly and maybe adjust the objects structure, because it seems like heading is in the wrong place, since all objects face the same directions.

KLS 02-18-2009 06:34 AM

I tried changing the order of when AAs are sent, did nothing. Either there's another packet, the opcodes are wrong or there's something that needs to be set in the player profile. I lean toward 1 or 3, hopefully 1 but I bet it's 3 =(

trevius 02-18-2009 07:22 AM

Yeah, I am pretty sure that the opcode to send AAs is correct. It could be option 1, but you are probably right that it is something in the player profile. I am going to work back through the PP anyway soon to try to align some of the areas that are harder to confirm. I am going to be using a Live packet as a reference, so it might not be too easy. The only good thing is that the difference from EQLive and SoF is only about 96 bytes in size (live is actually less now, which is rare for structures to shrink). I will just base the changes off of relative fields that we know are correct. Hopefully I can get it more accurately aligned and that may resolve a few issues. It is a big struct, so it may take a while to complete though lol.

trevius 02-18-2009 08:31 AM

Unfortunately, I just had to back out of the fix I put in for Drakkin to be able to use equipment and weapons and gain stats from them. It was working great for SoF, but the fix caused the same problem to start happening in Titanium. So, right now, it seems like only 1 or the other can work. I am sure there is a way to let both work properly, but I just don't know of a good solution right now. If anyone has a suggestion, it would help :)

Here is the piece of code that needs to be changed to work with both client versions:

/common/item.cpp
Code:

bool ItemInst::IsEquipable(int16 race, int16 class_) const
{
        if (!m_item)
                return false;
       
        bool israce = false;
        bool isclass = false;
       
        if (m_item->Slots == 0) {
                return false;
        }
       
        uint32 classes_ = m_item->Classes;
        uint32 races_ = m_item->Races;
        int32 race_ = 0;
        #ifndef PACKETCOLLECTOR
        race_ = GetArrayRace(race);
        #endif

        race_ = (race_==17? 15 : race_); // For SoF this should be: race_ = (race_==18? 16 : race_);
        // @merth: can this be optimized?  i.e., will (race & common->Races) suffice?
        for (int cur_class = 1; cur_class<=PLAYER_CLASS_COUNT; cur_class++) {
                if (classes_ % 2 == 1) {
                    if (cur_class == class_) {
                            isclass = true;
                                break;
                        }
                }
                classes_ >>= 1;
        }
        for (unsigned int cur_race = 1; cur_race <= PLAYER_RACE_COUNT; cur_race++) {
               
                if (races_ % 2 == 1) {
                    if (cur_race == race_) {
                            israce = true;
                                break;
                          }
                }
                races_ >>= 1;
        }
        return (israce && isclass);
}


cubber 02-18-2009 11:04 AM

I take it we need to copy the 2 spells_ text files from the SoF client and replace the old titanium ones with them in order to use the new spells from the new expansions?

Will the new files be compatable with old clients? If so is there any harm in making the switch now, or should I wait?

AndMetal 02-18-2009 04:02 PM

I started working on OP_Consume the other night (otherwise, client freezes when you right-click on food), but since I haven't really worked with the encoding/decoding of packets much, I'm not sure what we need to do in SoF_ops.h & SoF.cpp, but here's the new struct:

Code:

struct Consume_Struct
{
/*0000*/ int32 slot;
/*0004*/ int32 unknown4; // usually 0x0, but also saw 0x43
};

That's specifically from right-clicking though. Here are some captures from the log (after adding a hex output to client_packet.cpp):
Code:

Right-clicked food (Bread Crumbs*) from slot 24
3652 [02.09. - 02:28:02] [NET__ERROR] OP size error: OP_Consume expected:16 got:8
3652 [02.09. - 02:28:02] [NET__ERROR] 0000: 18 00 00 00 43 00 00 00 -                          | ....C...

Right-clicked drink (Skin of Milk) from slot 23
3652 [02.09. - 02:31:28] [NET__ERROR] OP size error: OP_Consume expected:16 got:8
3652 [02.09. - 02:31:28] [NET__ERROR] 0000: 17 00 00 00 00 00 00 00 -                          | ........

Right-clicked food (Misty Thicket Picnic [9662]) from slot 28
3652 [02.09. - 02:38:09] [NET__ERROR] OP size error: OP_Consume expected:16 got:8
3652 [02.09. - 02:38:09] [NET__ERROR] 0000: 1c 00 00 00 00 00 00 00 -                          | ........

If someone wants to finish it off before I have a chance to learn it, feel free.

As far as the items issue, 32768 is for Shrouds in Titanium. Here's an excerpt from my PHP editor (that I haven't worked on in forever):
items/index.php
Code:

        // Class(es)
        echo "Class: ";
        if ($db_row[classes] == 65535) echo "ALL ";
        elseif ($db_row[classes] == 0) echo "NONE ";
        else {foreach ($ClassesShort as $key => $value) if ($db_row[classes] & pow(2, $key - 1)) echo $value . " ";};
        echo "<br>\n";

includes/constants.php
Code:

// Race List
$Races = array(
        1 => "HUM",
        2 => "BAR",
        4 => "ERU",
        8 => "ELF",
        16 => "HIE",
        32 => "DEF",
        64 => "HEF",
        128 => "DWF",
        256 => "TRL",
        512 => "OGR",
        1024 => "HFL",
        2048 => "GNM",
        4096 => "IKS",
        8192 => "VAH",
        16384 => "FRG",
        32768 => "Shroud"
);

As a matter of fact, it looks like this actually got buried in the Wiki:
Quote:

races

* What race or races can use the item. Rememeber to add up the results.
o 0 = None
o 1 = Human
o 2 = Barbarian
o 4 = Erudite
o 8 = ELF
o 16 = HIE
o 32 = Dark Elf
o 64 = HEF
o 128 = Dwarf
o 256 = Troll
o 512 = Ogre
o 1024 = HFL
o 2048 = Gnome
o 4096 = Iksar
o 8192 = Vah Shir
o 16384 = Froglok
o 32768 = Shroud
* These are combined values, but with special meaning:
o 32767 = Any/All
o 65535 = Usually a container
So it sounds like we may need to convert the races in Titanium & 6.2 to delete that bit for the Drakken, then everything else should be fine.

trevius 02-18-2009 06:40 PM

Quote:

Originally Posted by cubber (Post 164765)
I take it we need to copy the 2 spells_ text files from the SoF client and replace the old titanium ones with them in order to use the new spells from the new expansions?

Will the new files be compatable with old clients? If so is there any harm in making the switch now, or should I wait?

Yeah, you would need to copy the spells_us.txt file from SoF into your server directory and replace the one from Titanium (maybe rename the titanium one first just to be safe). You don't need the spells_en.txt file in the server directory for anything. Another option would be to use the new feature that lets you load the spells file directly into your database. As far as I can tell, the Titanium and SoF spell files seem to line up very well, so there shouldn't be any expected issues by using the SoF file for Titanium users. Each client should work fine with their default spell file. I don't see a reason to wait to do this, but I would definitely keep an eye out for reports of issues with spells. If you want to be absolutely sure you won't have any issues with Titanium users, you can just open both the Titanium and SoF spell files and then scroll to the bottom of the Titanium file. Look at the last spell ID in the Titanium file and then find that same one in SoF. Then, just copy all spells after that ID from the SoF file into the Titanium one and then you should have 0 chance of having an issue on Titanium and everything should be functioning for SoF for the most part as well. You would only need to use that customized file on the server, and both clients should work properly with it.

trevius 02-18-2009 07:30 PM

AndMetal, thanks I didn't think about shrouds being a race. I am still not sure of the best way to handle this now either way. I am sure someone will figure it out at some point. Hopefully soon, since it is fairly high priority. At least all other races still work fine for SoF, just not Drakkin.

For the consume structure work you are doing, that is a nice easy one to start off with and learn how this stuff works. Should be very straight forward. I am actually using your consume structure post as an example for a wiki page I just started to help explain Encode and Decode a bit better. Hopefully that wiki page will help others get involved if they want to.

The new wiki page for encode and decode is here:

http://www.eqemulator.net/wiki/wikka...a=EncodeDecode

I still have to do the main part of the guide where it explains what to put in the SoF.cpp file, but that shouldn't be all too bad to at least get the basics. Once it is done, it should show you exactly what to put to get consume to decode properly. I may be able to get the wiki page mostly finished today :)

AndMetal 02-18-2009 11:23 PM

Alright, so I was able to get Consume working (somewhat), but it doesn't look like we have the correct structure or OpCode for OP_Stamina, which is sent to the client after eating something. Here's the diff for OP_Consume:

Code:

Index: common/patches/SoF.cpp
===================================================================
--- common/patches/SoF.cpp        (revision 343)
+++ common/patches/SoF.cpp        (working copy)
@@ -1273,6 +1273,14 @@
        FINISH_DIRECT_DECODE();
 }
 
+DECODE(OP_Consume) {
+        DECODE_LENGTH_EXACT(structs::Consume_Struct);
+        SETUP_DIRECT_DECODE(Consume_Struct, structs::Consume_Struct);
+        IN(slot);
+        emu->auto_consumed = 999;        //auto_consumed, e7030000 = 0x37e = 999
+        emu->type = 1;//type, 1 = food, 2 = water
+        FINISH_DIRECT_DECODE();
+}
 
 DECODE(OP_WhoAllRequest) {
        DECODE_LENGTH_EXACT(structs::Who_All_Struct);
Index: common/patches/SoF_ops.h
===================================================================
--- common/patches/SoF_ops.h        (revision 343)
+++ common/patches/SoF_ops.h        (working copy)
@@ -26,6 +26,7 @@
 E(OP_ExpansionInfo)
 E(OP_LogServer)
 E(OP_Damage)
+//E(OP_Stamina) //not sure we have the right structure
 //E(OP_ZoneServerReady)
 //E(OP_BazaarSearch)
 //E(OP_Trader)
@@ -43,6 +44,7 @@
 D(OP_ClientUpdate)
 D(OP_MoveItem)
 D(OP_WhoAllRequest)
+D(OP_Consume)
 //D(OP_SendExpZonein)
 //D(OP_TraderBuy)
 #undef E
Index: common/patches/SoF_structs.h
===================================================================
--- common/patches/SoF_structs.h        (revision 343)
+++ common/patches/SoF_structs.h        (working copy)
@@ -1426,12 +1428,22 @@
 };
 
 struct Consume_Struct
 {
 /*0000*/ int32 slot;
-/*0004*/ int32 auto_consumed; // 0xffffffff when auto eating e7030000 when right click
-/*0008*/ int8  c_unknown1[4];
-/*0012*/ int8  type; // 0x01=Food 0x02=Water
-/*0013*/ int8  unknown13[3];
+/*0004*/ int32 unknown4; // usually 0x0, but also saw 0x43
 };

Unfortunately, I'm not sure what the best way is to figure out the OpCode/Struct for OP_Stamina... In addition, I'm not sure how exactly I can pull the inventory from here to get the item stored in "slot" & look at the ItemType to see if it is food or drink (cast to Client/Mob/Entity from a packet?). Any thoughts?

trevius 02-19-2009 01:24 AM

I recall most food/drink stuff being in bonuses.cpp, so you might check there.

For stamina, I would need to know exactly what to look for to find it. I know ShowEQ has an opcode listed as Stamina, so I assume it is the same thing. I am not really sure what that even means anymore, since Stamina was replaced by Endurance. Is food supposed to help regain Endurance?

I doubt that structure changes much/often, so we can probable get it from EQLive easily.

Here is an example I have from a Live collect I did recently:

Code:

Feb 16 2009 04:50:17:123 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x02d6]
[Name: OP_Stamina][Updated: 10/21/08]
000 | 96 02 00 00 96 02 00 00 3d 55                    | ........=U

I can easily figure out the SoF Opcode that relates to whatever this actually is (if it isn't actually stamina like it is labeled). With a struct size of 10, it shouldn't be too tough to figure this out.

Without even looking at the struct, this is how I would break it down:
Code:

96 02 00 00 - int32
96 02 00 00 - int32
3d 55 - int16

Now, lemme look at the struct that is set in SoF:

Code:

struct Stamina_Struct {
/*00*/ int32 food;                    // (low more hungry 127-0)
/*02*/ int32 water;                  // (low more hungry 127-0)

};

So, since the struct is size 8 and the packet in Live is 10, then most likely, we just need to adjust the structure and do an encode.

SoF_structs.h
Code:

struct Stamina_Struct {
/*00*/ int32 food;                    // seen 96 02 00 00
/*04*/ int32 water;                  // seen 96 02 00 00
/*08*/ int16 unknown08;            // seen 3d 55
};

SoF_ops.h
Code:

E(OP_Stamina)
SoF.cpp
Code:

ENCODE(OP_Stamina) {
        ENCODE_LENGTH_EXACT(Stamina_Struct);
        SETUP_DIRECT_ENCODE(Stamina_Struct, structs::Stamina_Struct);
                OUT(food);
                OUT(water);
                //eq->unknown08 = 21821;
        FINISH_ENCODE();
}

Then try that and see if that seems to work. It may be that the last 2 bytes are actually 2 int8s for food/drink hunger/thirst level. I don't know why they would use int32s if the value doesn't exceed 127 as noted in the comments of the struct in Titanium. But, it wouldn't be the first time that things would work that didn't seem to be accurately documented. I think the problem is that often things will change and people don't update the comments, so it is hard to know what to trust sometimes.

Either way, I read through my logs from Live and had quite a few of these stamina packets over the 6 minutes or so that I logged. But, oddly, every packet was exactly the same values as I posted above. It never changed once.


All times are GMT -4. The time now is 06:20 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.