PDA

View Full Version : These changes get you in game with skittles.



ieatacid
10-20-2007, 09:33 PM
I originally tried to get it to decode the incoming opcodes but I couldn't figure out how (or where in the SEQ code) to do it, so now it just turns the opcodes from the xml file into the ones coming through SEQ. There may be a better way than how I did it, and purple might have had different plans, but this works for now.

Purple did an awesome job reverse-engineering the client functions that build the opcode table used for obfuscation. All I had to do to get it working right was comment out one increment line and make the opcode list (retrieved from the client with an IDA script I made, provided below) start at the beginning instead of 12 bytes in.

playerProfileStruct needs work. I can't figure out the AA stuff and that's what's holding me back on progress with that. I *think* AA_Array is 12 bytes now instead of 8, but I'm not sure. As a result of playerProfileStruct being wrong, charProfileStruct may also be wrong.
^^^ fix for this posted below ^^^

I fixed spawnStruct as best I could. The position data at 0743 was a wild guess, but it seems to be working right. The location of EquipStruct is most likely wrong -- I just threw it in where there was an unknown area that it would fit into :o
^^^ fixed on page two ^^^

newZoneStruct was also updated.

Edit 1: For some reason it also displays your level as one which, of course, makes all the skittle con colors wrong unless you are, in fact, level one.

Edit 2: Fix for problem mentioned in edit one posted below.

Anyone that can help with fixing these or other structs, please post your changes.

I just added the .zip extension so I could upload it here:

ieatacid
10-20-2007, 09:33 PM
I hope I didn't forget anything ><

ieatacid
10-20-2007, 10:34 PM
<opcode id="24d8" name="OP_RequestZoneChange" updated="10/20/07">

ieatacid
10-20-2007, 11:04 PM
/*
** buffStruct
** Length: 34 Octets
**
*/

struct buffStruct
{
/*0000*/ uint32_t spawnid; //spawn id
/*0004*/ uint8_t unknown0004[4];
/*0008*/ uint32_t spellid; // spellid
/*0012*/ uint32_t duration; // duration
/*0016*/ uint8_t unknown0012[8];
/*0024*/ uint32_t playerId; // Player id who cast the buff
/*0028*/ uint32_t spellslot; // spellslot
/*0032*/ uint32_t changetype; // 1=buff fading,2=buff duration
/*0034*/
};

Cossack
10-21-2007, 07:55 AM
Awesome, appears to work like a champ! Many thanks to Purple and Ieatacid for the work you both have put in to keep Showeq going!

Just a quick note for those setting this up (I assume Purple and Ieatacid know this already) First zone shows your character loc and heading, second zoning is when the skittles start to show up.

BlueAdept
10-21-2007, 09:22 AM
Wow! Thank you. I guess I'll have to try this tonight. My girlfriend isn't going to be happy. :D

Spaz
10-21-2007, 12:27 PM
A thousand blessings upon your collective heads.

uRit1u2CBBA=
10-21-2007, 03:02 PM
Looks nice so far. I zoned twice as a test, and the maps for GL and GH loaded and had the spawns.

Once we get the PP ironed out, we're back in business.

ieatacid
10-21-2007, 03:10 PM
I'll be posting PP in a bit once I compile again and test it out.

uRit1u2CBBA=
10-21-2007, 04:11 PM
sweet - question tho - what's inside that 2nd .zip file you posted? I'm unfamiliar with that file.

ieatacid
10-21-2007, 04:35 PM
It'll open in any text editor. It's a script for IDA to dump the opcodes from the opcode table in the exe to a file that's used by SEQ (opcodetable.h).

ieatacid
10-21-2007, 04:50 PM
This fixes con colors and some other stuff. Most of it should be right, but for some reason my current HPs aren't reported right on the status bar (at the bottom left). Still looking into that.


These are all in everquest.h

#define MAX_POTIONS_IN_BELT 5


/*
** Buffs
** Length: 24 Octets
** Used in:
** charProfileStruct(07012)
*/
struct spellBuff
{
/*0000*/ uint8_t unknown0000; //
/*0001*/ int8_t level; // Level of person who cast buff
/*0002*/ uint8_t unknown0002; //
/*0003*/ uint8_t unknown0003; //
/*0004*/ int32_t spellid; // Spell
/*0008*/ int32_t duration; // Time remaining in ticks
/*0012*/ int32_t effect; // holds the dmg absorb amount on runes
/*0016*/ uint8_t unknown0016[4]; // *** this might need to be swapped with playerId
/*0020*/ uint32_t playerId; // Global id of caster (for wear off)
/*0024*/
};


/**
* Player Profile. Common part of charProfileStruct shared between
* shrouding and zoning profiles.
*
* NOTE: Offsets are kept in here relative to OP_PlayerProfile to ease in
* diagnosing changes in that struct.
*/
struct playerProfileStruct
{
/*00004*/ uint32_t gender; // Player Gender - 0 Male, 1 Female
/*00008*/ uint32_t race; // Player race
/*00012*/ uint32_t class_; // Player class
/*00016*/ uint8_t unknown00016[40]; // ***Placeholder
/*00056*/ uint8_t level; // Level of player
/*00057*/ uint8_t level1; // Level of player (again?)
/*00058*/ uint8_t unknown00058[2]; // ***Placeholder
/*00060*/ BindStruct binds[5]; // Bind points (primary is first)
/*00160*/ uint32_t deity; // deity
/*00164*/ uint32_t intoxication; // Alcohol level (in ticks till sober?)
/*00168*/ uint32_t spellSlotRefresh[MAX_SPELL_SLOTS]; // Refresh time (millis)
/*00204*/ uint8_t unknown0204[4];
/*00208*/ uint8_t haircolor; // Player hair color
/*00209*/ uint8_t beardcolor; // Player beard color
/*00210*/ uint8_t eyecolor1; // Player left eye color
/*00211*/ uint8_t eyecolor2; // Player right eye color
/*00212*/ uint8_t hairstyle; // Player hair style
/*00213*/ uint8_t beard; // Player beard type
/*00214*/ uint8_t unknown00214[10];
/*00224*/ uint32_t item_material[9]; // Item texture/material of worn items
/*00260*/ uint8_t unknown00260[232];
/*00492*/ Color_Struct item_tint[9]; // RR GG BB 00
/*00528*/ AA_Array aa_array[MAX_AA]; // AAs
/*03400*/ uint8_t unknown03400[728]; // ***** this may be wrong or aa_array might be wrong (10/21/07)
/*04128*/ uint32_t points; // Unspent Practice points
/*04132*/ uint32_t MANA; // Current MANA
/*04136*/ uint32_t curHp; // Current HP without +HP equipment
/*04140*/ uint32_t STR; // Strength
/*04144*/ uint32_t STA; // Stamina
/*04148*/ uint32_t CHA; // Charisma
/*04152*/ uint32_t DEX; // Dexterity
/*04156*/ uint32_t INT; // Intelligence
/*04160*/ uint32_t AGI; // Agility
/*04164*/ uint32_t WIS; // Wisdom
/*04168*/ uint8_t face; // Player face
/*04169*/ uint8_t unknown04169[147];
/*04316*/ int32_t sSpellBook[400]; // List of the Spells in spellbook
/*05916*/ uint8_t unknown5916[448]; // all 0xff after last spell
/*06364*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
/*06400*/ uint8_t unknown06400[32];
/*06432*/ uint32_t platinum; // Platinum Pieces on player
/*06436*/ uint32_t gold; // Gold Pieces on player
/*06440*/ uint32_t silver; // Silver Pieces on player
/*06444*/ uint32_t copper; // Copper Pieces on player
/*06448*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
/*06452*/ uint32_t gold_cursor; // Gold Pieces on cursor
/*06456*/ uint32_t silver_cursor; // Silver Pieces on cursor
/*06460*/ uint32_t copper_cursor; // Copper Pieces on cursor
/*06464*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
/*06764*/ uint8_t unknown06764[236];
/*07000*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
/*07004*/ uint32_t thirst; // Drink (ticks till next drink)
/*07008*/ uint32_t hunger; // Food (ticks till next eat)
/*07012*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
/*07612*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
/*08012*/ uint8_t unknown08012[160];
/*08172*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
/*08252*/ uint32_t endurance; // Current endurance
/*08256*/ uint32_t aa_spent; // Number of spent AA points
/*08260*/ uint32_t aa_unspent; // Unspent AA points
/*08264*/ uint8_t unknown08264[4];
/*08268*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
/*14668*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
/*15028*/ uint8_t unknown15028[92];
/*15120*/
};

/*
** Player Profile
** Length: 23576 Octets
** OpCode: CharProfileCode
*/
struct charProfileStruct
{
/*00000*/ uint32_t checksum; //
/*00004*/ playerProfileStruct profile; // Profile
/*15120*/ char name[64]; // Name of player
/*15184*/ char lastName[32]; // Last name of player
/*15216*/ uint8_t unknown15216[12]; //***Placeholder (1/18/2006)
/*15228*/ int32_t guildID; // guildID
/*15232*/ uint32_t birthdayTime; // character birthday
/*15236*/ uint32_t lastSaveTime; // character last save time
/*15240*/ uint32_t timePlayedMin; // time character played
/*15244*/ uint8_t pvp; // 1=pvp, 0=not pvp
/*15245*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
/*15246*/ uint8_t gm; // 0=no, 1=yes (guessing!)
/*15247*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
/*15248*/ uint8_t unknown15248[12];
/*15260*/ uint32_t exp; // Current Experience
/*15264*/ uint8_t unknown15264[12];
/*15276*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages
/*15301*/ uint8_t unknown15301[7]; // All 0x00 (language buffer?)
/*15308*/ float y; // Players y position
/*15312*/ float x; // Players x position
/*15316*/ float z; // Players z position
/*15320*/ float heading; // Players heading
/*15324*/ uint8_t unknown15324[4]; // ***Placeholder
/*15328*/ uint32_t platinum_bank; // Platinum Pieces in Bank
/*15332*/ uint32_t gold_bank; // Gold Pieces in Bank
/*15336*/ uint32_t silver_bank; // Silver Pieces in Bank
/*15340*/ uint32_t copper_bank; // Copper Pieces in Bank
/*15344*/ uint32_t platinum_shared; // Shared platinum pieces
/*15348*/ uint8_t unknown15348[716];
/*16064*/ uint32_t expansions; // Bitmask for expansions
/*16068*/ uint8_t unknown16068[12];
/*16080*/ uint32_t autosplit; // 0 = off, 1 = on
/*16084*/ uint8_t unknown16084[16];
/*16100*/ uint16_t zoneId; // see zones.h
/*16102*/ uint16_t zoneInstance; // Instance id
/*16104*/ char groupMembers[MAX_GROUP_MEMBERS][64];// all the members in group, including self
/*16488*/ char groupLeader[64]; // Leader of the group ?
/*16552*/ uint8_t unknown16552[792];
/*17344*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on
/*17348*/ uint8_t unknown17348[4];
/*17352*/ uint32_t ldon_guk_points; // Earned GUK points
/*17356*/ uint32_t ldon_mir_points; // Earned MIR points
/*17360*/ uint32_t ldon_mmc_points; // Earned MMC points
/*17364*/ uint32_t ldon_ruj_points; // Earned RUJ points
/*17368*/ uint32_t ldon_tak_points; // Earned TAK points
/*17372*/ uint32_t ldon_avail_points; // Available LDON points
/*17376*/ uint8_t unknown17376[136];
/*17512*/ uint32_t tributeTime; // Time remaining on tribute (millisecs)
/*17516*/ uint32_t careerTribute; // Total favor points for this char
/*17520*/ uint32_t unknown17520; // *** Placeholder
/*17524*/ uint32_t currentTribute; // Current tribute points
/*17528*/ uint32_t unknown17528; // *** Placeholder
/*17532*/ uint32_t tributeActive; // 0 = off, 1=on
/*17536*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
/*17576*/ uint8_t unknown17576[8];
/*17584*/ float expGroupLeadAA; // Current group lead exp points
/*17588*/ uint32_t unknown17588;
/*17592*/ float expRaidLeadAA; // Current raid lead AA exp points
/*17596*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points
/*17600*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points
/*17604*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks
/*17732*/ uint8_t unknown17732[128];
/*17860*/ uint32_t airRemaining; // Air supply (seconds)
/*17864*/ uint8_t unknown17864[4608];
/*22472*/ uint32_t expAA; // Exp earned in current AA point
/*22476*/ uint8_t unknown22476[40];
/*22516*/ uint32_t currentRadCrystals; // Current count of radiant crystals
/*22520*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever
/*22524*/ uint32_t currentEbonCrystals;// Current count of ebon crystals
/*22528*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever
/*22532*/ uint8_t groupAutoconsent; // 0=off, 1=on
/*22533*/ uint8_t raidAutoconsent; // 0=off, 1=on
/*22534*/ uint8_t guildAutoconsent; // 0=off, 1=on
/*22535*/ uint8_t unknown22535[5]; // ***Placeholder (6/29/2005)
/*22540*/ uint32_t showhelm; // 0=no, 1=yes
/*22544*/ uint8_t unknown22544[1032]; // ***Placeholder (2/13/2007)
/*23576*/
};

ieatacid
10-21-2007, 05:12 PM
New expansion zones (zones.h):


{ "mechanotus", "Fortress Mechanotus" }, // 436
{ "mansion", "Meldrath's Majestic Mansion" }, // 437
{ "steamfactory", "The Steam Factory" }, // 438
{ "shipworkshop", "S.H.I.P. Workshop" }, // 439
{ "gyrospireb", "Gyrospire Beza" }, // 440
{ "gyrospirez", "Gyrospire Zeka" }, // 441
{ "dragonscale", "Dragonscale Hills" }, // 442
{ "lopingplains", "Loping Plains" }, // 443
{ "hillsofshade", "Hills of Shade" }, // 444
{ "bloodmoon", "Bloodmoon Keep" }, // 445
{ "crystallos", "Crystallos, Lair of the Awakened" }, // 446
{ "guardian", "The Mechamatic Guardian" }, // 447
{ "steamfontmts", "Steamfont Mountains" }, // 448
{ "cryptofshade", "Crypt of Shade" }, // 449

ieatacid
10-21-2007, 08:00 PM
A few zoneopcodes.xml updates. I'm sure there are more but this is all I got.




<opcode id="1418" name="OP_SwapSpell" updated="10/20/07">
<comment>old TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
<opcode id="6a93" name="OP_MemorizeSpell" updated="10/20/07">
<comment>old MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>


<opcode id="5a79" name="OP_InspectRequest" updated="10/20/07">
<comment>old InspectRequestCode</comment>
</opcode>
<opcode id="084f" name="OP_InspectAnswer" updated="10/20/07">
<comment>old InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>

uRit1u2CBBA=
10-21-2007, 08:04 PM
I raided tonight with these updates -- other than initial game entry not loading maps, as soon as I zoned once, things have been looking good.

Thanks again :)

ieatacid
10-21-2007, 09:02 PM
other than initial game entry not loading maps, as soon as I zoned once, things have been looking good.

Yeah, I'm not sure why but it only obfuscates a small portion of the opcodes on the first zone. The second time it does the rest and then everything works.

ieatacid
10-21-2007, 09:05 PM
This just fixes inspect output to the console, with the above opcode changes too.


/*
** Inspecting Information
** Length: 1860 Octets
** OpCode: InspectDataCode
*/

struct inspectDataStruct
{
/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
/*0008*/ char itemNames[23][64]; // 23 items with names
// 64 characters long.
/*1480*/ int32_t icons[23]; // Icon Information
/*1572*/ char mytext[200]; // Player Defined Text Info
/*1772*/ uint8_t unknown1772[88]; // ***Placeholder
/*1860*/
};

ieatacid
10-21-2007, 10:12 PM
For some reason, when I mouse over a PC, the pop-up sometimes shows their gender as "neuter." Anyone else?

uRit1u2CBBA=
10-21-2007, 10:20 PM
sounds like that you have the wrong bit in the structure for gender :) lol Not that it's all that entirely important.

ieatacid
10-21-2007, 11:24 PM
Yeah, it's wrong. I'll get it tomorrow.

ieatacid
10-22-2007, 05:59 PM
This should be 100% right. It was too hard and time consuming using packet logs so I dug them out of the exe. This should fix genders being displayed correctly, as well as PC (yellow squares) and NPC corpses to show up right, light sources, current HPs, and the equipment struct is in the right spot. Even gm, if it was right back in feb/march '06 -- that's where I compared it to :)


/*
** Generic Spawn Struct
** Length: 897 Octets
** Used in:
** dbSpawnStruct
** petStruct
** spawnShroudOther
** spawnShroudSelf
*/

struct spawnStruct
{
/*0000*/ uint8_t unknown0000[9];
/*0009*/ int16_t deity; // Player's Deity
/*0011*/ uint8_t unknown0011[11];
/*0022*/ uint8_t gender; // Gender (0=male, 1=female)
/*0023*/ uint8_t unknown0023[4];
/*0027*/ union
{
struct
{
/*0027*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0039*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0051*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0063*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0075*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0087*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0099*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0111*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0123*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0027*/ EquipStruct equipment[9];
};
/*0135*/ uint8_t state; // stand state
/*0136*/ uint8_t unknown0136;
/*0137*/ uint32_t guildID; // Current guild
/*0141*/ uint8_t unknown0141[24];
/*0165*/ uint8_t class_; // Player's class
/*0166*/ uint8_t unknown0166[201];
/*%%% gm right this time? */
/*0367*/ uint8_t gm;
/*0368*/ uint8_t unknown0368[134];
/*0502*/ float runspeed; // Speed when walking
/*0506*/ uint8_t light; // Spawn's lightsource
/*0507*/ uint8_t unknown0507[4];
/*0511*/ uint8_t level; // Spawn Level
/*0512*/ uint8_t unknown0512[23];
/*0535*/ uint32_t race; // Spawn race
/*0539*/ uint8_t unknown0539[41];
/*0580*/ char suffix[32]; // Player's suffix (of Veeshan, etc.)
/*0612*/ uint8_t unknown0612;
/*0613*/ uint8_t bodytype; // Bodytype
/*0614*/ uint8_t unknown0614[41];
/*0655*/ uint8_t curHp; // Current hp
/*0656*/ uint8_t unknown0656[2];
/*0658*/ char lastName[32]; // Player's Lastname
/*0690*/ uint8_t unknown0690[2];
/*0692*/ char title[32]; // Title
/*0724*/ uint8_t unknown0724[6];
/*0730*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0731*/ uint8_t unknown0731[12];
/*0743*/ signed padding0000:12; // ***Placeholder
signed x:19; // x coord
signed padding0002:1; // ***Placeholder
/*0747*/ signed deltaX:13; // change in x
signed deltaY:13; // change in y
signed padding0006:6; // ***Placeholder
/*0751*/ signed z:19; // z coord
signed deltaHeading:10;// change in heading
signed padding0014:3; // ***Placeholder
/*0755*/ signed y:19; // y coord
signed deltaZ:13; // change in z
/*0759*/ signed animation:10; // animation
unsigned heading:12; // heading
signed padding0018:10; // ***Placeholder
/*0763*/ uint32_t spawnId; // Spawn Id
/*0767*/ uint8_t unknown0767[8];
/*0775*/ char name[64]; // Player's Name
/*0839*/ uint32_t petOwnerId; // If this is a pet, the spawn id of owner
/*0843*/ uint8_t unknown0843;
/*0844*/ union
{
struct
{
/*0844*/ Color_Struct color_helmet; // Color of helmet item
/*0848*/ Color_Struct color_chest; // Color of chest item
/*0852*/ Color_Struct color_arms; // Color of arms item
/*0856*/ Color_Struct color_bracers; // Color of bracers item
/*0860*/ Color_Struct color_hands; // Color of hands item
/*0864*/ Color_Struct color_legs; // Color of legs item
/*0868*/ Color_Struct color_feet; // Color of feet item
/*0872*/ Color_Struct color_primary; // Color of primary item
/*0876*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0844*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
};
/*0880*/ uint8_t anon; // 0=normal, 1=anon, 2=roleplay
/*0881*/ uint8_t unknown0881[10];
/*0891*/ float walkspeed; // Speed when running
/*0895*/ uint8_t unknown896[2];
/*0897*/
};

Hendrix_Morton
10-23-2007, 07:18 AM
Question:

Do the links in the first post have the changed posted int he thread in them, or do they need to be applied into the downloaded files...

I note that the edit time on the first post is later than the last posted change, so just checking....

ieatacid
10-23-2007, 02:32 PM
Yeah, everything after the first post needs to be applied to those files. I was waiting until I got most of the problems ironed out before I updated the first post with a new zip. Tonight or tomorrow I'll try to do so, if I get time.

uRit1u2CBBA=
10-23-2007, 09:13 PM
Here's an updated races.h you can use, generated using my script that parses out the dbstr_us.exe file:


rename the file to "races.h" from "races.h.txt", put it into your ../src directory, and re-"make".

Hendrix_Morton
10-23-2007, 09:15 PM
Yeah, everything after the first post needs to be applied to those files. I was waiting until I got most of the problems ironed out before I updated the first post with a new zip. Tonight or tomorrow I'll try to do so, if I get time.

Just checking....got everything hooked up and running just fine...

Many thanks for all the hard work done to get it running again....even with the multiple zoning to get everything synced, awesome work...

ieatacid
10-23-2007, 10:45 PM
Here's an updated races.h you can use, generated using my script that parses out the dbstr_us.exe file:


rename the file to "races.h" from "races.h.txt", put it into your ../src directory, and re-"make".

Nice :)

ieatacid
10-23-2007, 10:48 PM
even with the multiple zoning to get everything synced

Unfortunately there's really no way around this, as the packet that contains the data needed for obfuscation isn't sent until you zone :(

BlueAdept
10-24-2007, 08:12 AM
Unfortunately there's really no way around this, as the packet that contains the data needed for obfuscation isn't sent until you zone :(

Much better than nothing :D Thanks to you and purple for all your hard work.

Cryonic
10-24-2007, 08:32 AM
Unfortunately there's really no way around this, as the packet that contains the data needed for obfuscation isn't sent until you zone :(

Well, the client should have those opcodes at certain default values then prior to zoning or the game wouldn't work.

So, for those who'd like a small challenge, they could try to figure out what the default opcode values are at initial login :)

uRit1u2CBBA=
10-24-2007, 10:40 AM
I just noticed that I said dbstr_us.exe... :) I of course meant .txt :) damn those file extensions. :)

ieatacid
10-24-2007, 02:12 PM
Well, the client should have those opcodes at certain default values then prior to zoning or the game wouldn't work.

So, for those who'd like a small challenge, they could try to figure out what the default opcode values are at initial login :)

It's sent (obfuscator packet) when you go from server select to character select, from character select to in game, then every time you zone; so it already obfuscates before you log in. As far as I can tell, it always uses the obfuscated ones as there's really no time when it wouldn't have them.

ieatacid
10-24-2007, 04:48 PM
It seems I passed the time limit allowed to edit my first post, so here's a new zip of all the changes so far. I did it on my windows box because I'm waiting on a new power supply to arrive for my Linux box, so if something is not right let me know.


Just remove the .zip extension.

BlueAdept
10-24-2007, 08:17 PM
Wow. I just looked at packetstream.cpp. That function that purple did is impressive. Very nice work. I know I wouldn't have been able to figure it out.

Cryonic
10-25-2007, 12:31 AM
It's sent (obfuscator packet) when you go from server select to character select, from character select to in game, then every time you zone; so it already obfuscates before you log in. As far as I can tell, it always uses the obfuscated ones as there's really no time when it wouldn't have them.

Ahh, so then SEQ needs to pick up the Obfuscator packets from earlier to be able to really decode the first zone the character goes into (from character select).

ieatacid
10-27-2007, 12:03 PM
Update: I changed they way the obfuscator packet is handled. Rather than hard-coding it in to dispatchPacket in packetstream.cpp, I added an entry for it into zoneopcodes.xml and added its own slot and signal to interface.cpp so it only fires on zone streams and only alters the zone opcode list (as it should -- world opcodes shouldn't be obfuscated, as far as I can tell).

This also fixes the guild list being populated and guild names showing up on the spawn list and map tooltips.


Edit: This means you'll need to overwrite all these files over an old 5.9.1.0 zip or at least use the old packetstream.cpp/.h files.


Updated zip (remove .zip extension)

ieatacid
10-27-2007, 10:04 PM
Edited previous changes above ^^

gogreenalready
10-29-2007, 05:45 PM
ieatacid -- Would these be the only files that need to be updated?

I updated the files in the directories of my 5.9.1.0 app from the changes.tar.gz file. Restarted and zoned a bit but did not see any results.

Gonna read all of the entire thread....maybe I did miss something.

Also does the app need to be recompiled?

I am familiar with SEQ and have never had an issue doing an update. I have been eagerly awaiting to even get mapping and pops back.

I appreciate the effort everyone....

ieatacid
10-29-2007, 06:23 PM
Yes, you need to recompile.

If you've already overwritten the files (using my latest changes, posted here (http://www.showeq.net/forums/showthread.php?p=42364&#post42360) in this thread), all you should need to do is "make", "make install", then "showeq" (assuming you ran ./configure before, back when 5.9.1 was functional).

If that fails to work, your best bet is to get a fresh tarball from the last official release (5.9.1), un-tar that to a folder, download the latest changes.tar.gz and overwrite the old files with the those. Then you'll need to "./configure", "make", "make install".

gogreenalready
10-29-2007, 09:22 PM
You guys totally nailed it.....

I can play again............

And not walk into traps...

And ignore my wife.....

Oops.... Overshare.....

Thanks again......:D

gogreenalready
10-30-2007, 05:15 PM
Well.... now it's blown again... can't win for losing......

ieatacid
10-30-2007, 06:16 PM
This seems to fix it for me. I'm posting the whole changes.tar.gz again, but the only thing that changed was opcodetable.h.

uRit1u2CBBA=
10-30-2007, 06:17 PM
Cool! Thanks for the fast turn around. :)

ieatacid
10-30-2007, 07:22 PM
Actually it works without even updating opcodetable.h. I didn't think that would break it, as it just looks like they added two new ones -- ones we don't even use.

Could_Be_Anyone
10-31-2007, 06:18 AM
Yippeee!!! Skittles!

Just like to say thank you to the folks who got this going again!.

Cossack
10-31-2007, 12:22 PM
Just curious, but any reason this isn't setup as a new version, or an update to 5.9.1.0 on the svn server?

BlueAdept
10-31-2007, 12:33 PM
Just curious, but any reason this isn't setup as a new version, or an update to 5.9.1.0 on the svn server?

ieatacid doesnt have access to upload the files there. Purple does and I might. I haven't done that in a long time. I would have to look up how to do it again and probably wont have any spare time until next week to try to figure it out.

I might be able to put it up as a tar to download though. Let me see if I can find the time and remember how to do that. I did do it for the filters a while ago.

cann
11-01-2007, 01:34 AM
woohoooo \o/ very nice work ieatacid and Purple, thank you for your hard work and all the (free) time you spent making it happen.

anyone got a source for TBS SEQ maps ? =)

Whizzie Wiz
11-01-2007, 07:34 AM
Speaking of Purple, how is he? Hope he's not too traumatized by the 6 month effort...!


(The EQ maps on Mapfiend should work fine with ShowEQ - I must admit I haven't tried going there with the fixed version yet, I only did a quick build and a couple of zones to glory in the beauty of Skittles so far :P)

flopz
11-03-2007, 05:51 PM
Are any of these links a full rollup? Looking to give it a try, but I'm admittedly too impatient and accident-prone to do it with all these patches ;)

Backspace
11-03-2007, 10:06 PM
Are any of these links a full rollup? Looking to give it a try, but I'm admittedly too impatient and accident-prone to do it with all these patches ;)Cann did up a nice post with info on how to get it working in Ubuntu:
http://www.showeq.net/forums/showpost.php?p=42390&postcount=8

Can skip to the part about fetching showeq and changes, if you're not using Ubuntu and have all the stuff installed that's needed to compile.

As for maps, I copied my EQ maps to /root/.showeq/maps.

Recommend getting filters by BlueAdept, very useful: filters-5xx-06-20-05.tar.gz (http://prdownloads.sourceforge.net/seq/filters-5xx-06-20-05.tar.gz?download)

dudex
11-04-2007, 03:44 AM
OMG IT WERX
OMGOMGOMGS.

I've felt so naked these last... what was it, 6? 8? months...

A big round of thanks to a great many people whose helpful replies have shown up in Search the last couple days. :)

flopz
11-04-2007, 12:16 PM
Wow, wtf, I could've sworn I replied here. Anyway....

I know how to compile it ;) I've compiled all my SEQ releases from source. However, with all these patches that need to be applied, scattered throughout the thread...I know it'll take me several hours to do it without screwing something up ;)

ieatacid
11-04-2007, 12:22 PM
The latest file I posted is all you need. Just get version 5.9.1.0 from March (the last working version), get the file I posted here (http://www.showeq.net/forums/showpost.php?p=42370&postcount=41), overwrite those over the older files, then compile like you normally would.

Someone posted good instructions here (http://www.showeq.net/forums/showpost.php?p=42390&postcount=8) .

BlueAdept
11-04-2007, 01:59 PM
I updated ShowEQ with all the changes to the download section of SF. I bumped the version to 6.0.0.0 and gave credit to where credit was due.

http://www.showeq.net/forums/showthread.php?t=5952

bonkersbobcat
11-11-2007, 01:21 AM
I tried up update SVN, but I don't have write access either.

ieatacid
11-13-2007, 11:16 PM
It still works even without these, but some opcodes were added to the table.


0x44cb,
0x73a7,
+0x0b59,
+0x0c21,
+0x541a,
+0x776d,
+0x4d2d,
+0x3877,
+0x6dea,
+0x70ce,
+0x22d8,
+0x2f4a,
+0x6a32,
0xFFFFFFFF,

-// 1219 (0x4c3) opcodes counted
+// 1230 (0x4ce) opcodes counted


I'm getting an assload of "INVALID PACKET" warnings with this patch.

Also, playerProfile and newZoneStruct need to be updated. I'll try Wednesday night if no one does it by then.

doox00
11-14-2007, 12:46 AM
It still works even without these, but some opcodes were added to the table.


0x44cb,
0x73a7,
+0x0b59,
+0x0c21,
+0x541a,
+0x776d,
+0x4d2d,
+0x3877,
+0x6dea,
+0x70ce,
+0x22d8,
+0x2f4a,
+0x6a32,
0xFFFFFFFF,

-// 1219 (0x4c3) opcodes counted
+// 1230 (0x4ce) opcodes counted


I'm getting an assload of "INVALID PACKET" warnings with this patch.

Also, playerProfile and newZoneStruct need to be updated. I'll try Wednesday night if no one does it by then.what file does this get added into?

thanks

BlueAdept
11-14-2007, 10:13 AM
It still works even without these, but some opcodes were added to the table.

I'm getting an assload of "INVALID PACKET" warnings with this patch.

Also, playerProfile and newZoneStruct need to be updated. I'll try Wednesday night if no one does it by then.

I believe if the structs are not the correct size, it will give an Invalid Packet. I could be wrong. They might have added a new struct too. I have not even had a chance to load EQ yet.

I do have some logs from the night before the patch. Tonight I will see what has changed, but I am not very good at it.

coffeencream
11-14-2007, 01:25 PM
I am really a newb when it comes to structs and stuff...

But from a layman's terms, it looks like it is not removing the old spawns when entering a new zone and the con colors are all screwy.

Quark
11-14-2007, 03:58 PM
Looks like newZoneStruct just increased size to 920 bytes

Mardark
11-14-2007, 05:19 PM
MAX_SPELL_SLOTS should now be 10 it looks like. Noticed I had another spell slot when I logged in.

This makes up the 4 of the 32 difference in the struct.

Edit: geesh I r a gud typr

doox00
11-14-2007, 05:35 PM
Is there a fix? If so how does it get applied.

thanks all for your hard work.

ieatacid
11-14-2007, 06:27 PM
I just added 4 bytes at the end of this struct. I checked everything else (all the named members) and they all line up correctly, so the 4 bytes were added in one of the unknowns toward the end.



/*
** New Zone Code
** Length: 920 Octets
** OpCode: NewZoneCode
*/
struct newZoneStruct
{
/*0000*/ char name[64]; // Character name
/*0064*/ char shortName[32]; // Zone Short Name (maybe longer?)
/*0096*/ char unknown0096[96];
/*0192*/ char longName[278]; // Zone Long Name
/*0470*/ uint8_t ztype; // Zone type
/*0471*/ uint8_t fog_red[4]; // Zone fog (red)
/*0475*/ uint8_t fog_green[4]; // Zone fog (green)
/*0479*/ uint8_t fog_blue[4]; // Zone fog (blue)
/*0483*/ uint8_t unknown0483[87]; // *** Placeholder
/*0570*/ uint8_t sky; // Zone sky
/*0571*/ uint8_t unknown0571[13]; // *** Placeholder
/*0584*/ float zone_exp_multiplier; // Experience Multiplier
/*0588*/ float safe_y; // Zone Safe Y
/*0592*/ float safe_x; // Zone Safe X
/*0596*/ float safe_z; // Zone Safe Z
/*0600*/ float unknown0600; // *** Placeholder
/*0604*/ float unknown0604; // *** Placeholder
/*0608*/ float underworld; // Underworld
/*0612*/ float minclip; // Minimum view distance
/*0616*/ float maxclip; // Maximum view distance
/*0620*/ uint8_t unknown0616[84]; // *** Placeholder
/*0704*/ char zonefile[64]; // Zone file name?
/*0768*/ uint8_t unknown0764[36]; // *** Placeholder (12/05/2006)
/*0804*/ uint8_t unknown0800[32]; // *** Placeholder (02/13/2007)
/*0836*/ uint8_t unknown0832[12]; // *** Placeholder
/*0848*/ uint8_t unknown0844[4]; // *** Placeholder (06/29/2005)
/*0852*/ uint8_t unknown0848[4]; // *** Placeholder (09/13/2005)
/*0856*/ uint8_t unknown0852[4]; // *** Placeholder (02/21/2006)
/*0860*/ uint8_t unknown0856[36]; // *** Placeholder (06/13/2006)
/*0896*/ uint8_t unknown0892[12]; // *** Placeholder (12/05/2006)
/*0908*/ uint8_t unknown0904[12]; // *** Placeholder (02/13/2007)
}; /*0920*/

Mardark
11-14-2007, 06:50 PM
In everquest.h

I added the 4 bytes on end of newZoneStruct as shown before. Changed number of spell slots, and max buffs. Added 4 bytes to the action2Struct on end.


#define MAX_SPELL_SLOTS 10

#define MAX_BUFFS 26

struct action2Struct
{
/*0000*/ uint16_t target; // Target ID
/*0002*/ uint16_t source; // Source ID
/*0004*/ uint8_t type; // Bash, kick, cast, etc.
/*0005*/ int16_t spell; // SpellID
/*0007*/ int32_t damage;
/*0011*/ uint8_t unknown0011[17]; // ***Placeholder
/*0028*/
};


With these changes, I am having no problems now. I haven't tested a whole lot, but gets you up and running.

doox00
11-14-2007, 07:53 PM
In everquest.h

I added the 4 bytes on end of newZoneStruct as shown before. Changed number of spell slots, and max buffs. Added 4 bytes to the action2Struct on end.


#define MAX_SPELL_SLOTS 10

#define MAX_BUFFS 26

struct action2Struct
{
/*0000*/ uint16_t target; // Target ID
/*0002*/ uint16_t source; // Source ID
/*0004*/ uint8_t type; // Bash, kick, cast, etc.
/*0005*/ int16_t spell; // SpellID
/*0007*/ int32_t damage;
/*0011*/ uint8_t unknown0011[17]; // ***Placeholder
/*0028*/
};


With these changes, I am having no problems now. I haven't tested a whole lot, but gets you up and running.that worked.. thank you!

ieatacid
11-14-2007, 09:11 PM
This should be right.


/**
* Player Profile. Common part of charProfileStruct shared between
* shrouding and zoning profiles.
*
* NOTE: Offsets are kept in here relative to OP_PlayerProfile to ease in
* diagnosing changes in that struct.
*/
struct playerProfileStruct
{
/*00004*/ uint32_t gender; // Player Gender - 0 Male, 1 Female
/*00008*/ uint32_t race; // Player race
/*00012*/ uint32_t class_; // Player class
/*00016*/ uint8_t unknown00016[40]; // ***Placeholder
/*00056*/ uint8_t level; // Level of player
/*00057*/ uint8_t level1; // Level of player (again?)
/*00058*/ uint8_t unknown00058[2]; // ***Placeholder
/*00060*/ BindStruct binds[5]; // Bind points (primary is first)
/*00160*/ uint32_t deity; // deity
/*00164*/ uint32_t intoxication; // Alcohol level (in ticks till sober?)
/*00168*/ uint32_t spellSlotRefresh[MAX_SPELL_SLOTS]; // Refresh time (millis)
/*00208*/ uint8_t unknown0208[4];
/*00212*/ uint8_t haircolor; // Player hair color
/*00213*/ uint8_t beardcolor; // Player beard color
/*00214*/ uint8_t eyecolor1; // Player left eye color
/*00215*/ uint8_t eyecolor2; // Player right eye color
/*00216*/ uint8_t hairstyle; // Player hair style
/*00217*/ uint8_t beard; // Player beard type
/*00218*/ uint8_t unknown00218[10];
/*00228*/ uint32_t item_material[9]; // Item texture/material of worn items
/*00264*/ uint8_t unknown00260[232];
/*00496*/ Color_Struct item_tint[9]; // RR GG BB 00
/*00532*/ AA_Array aa_array[MAX_AA]; // AAs
/*03404*/ uint8_t unknown03400[728]; // ***** this may be wrong or aa_array might be wrong (10/21/07)
/*04132*/ uint32_t points; // Unspent Practice points
/*04136*/ uint32_t MANA; // Current MANA
/*04140*/ uint32_t curHp; // Current HP without +HP equipment
/*04144*/ uint32_t STR; // Strength
/*04148*/ uint32_t STA; // Stamina
/*04152*/ uint32_t CHA; // Charisma
/*04156*/ uint32_t DEX; // Dexterity
/*04160*/ uint32_t INT; // Intelligence
/*04164*/ uint32_t AGI; // Agility
/*04168*/ uint32_t WIS; // Wisdom
/*04172*/ uint8_t face; // Player face
/*04173*/ uint8_t unknown04173[175];
/*04348*/ int32_t sSpellBook[400]; // List of the Spells in spellbook
/*05948*/ uint8_t unknown5948[448]; // all 0xff after last spell
/*06396*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
/*06436*/ uint8_t unknown06436[28];
/*06464*/ uint32_t platinum; // Platinum Pieces on player
/*06468*/ uint32_t gold; // Gold Pieces on player
/*06472*/ uint32_t silver; // Silver Pieces on player
/*06476*/ uint32_t copper; // Copper Pieces on player
/*06480*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
/*06484*/ uint32_t gold_cursor; // Gold Pieces on cursor
/*06488*/ uint32_t silver_cursor; // Silver Pieces on cursor
/*06492*/ uint32_t copper_cursor; // Copper Pieces on cursor
/*06496*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
/*06796*/ uint8_t unknown06796[236];
/*07032*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
/*07036*/ uint32_t thirst; // Drink (ticks till next drink)
/*07040*/ uint32_t hunger; // Food (ticks till next eat)
/*07044*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
/*07644*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
/*08044*/ uint8_t unknown08044[160];
/*08204*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
/*08284*/ uint32_t endurance; // Current endurance
/*08288*/ uint32_t aa_spent; // Number of spent AA points
/*08292*/ uint32_t aa_unspent; // Unspent AA points
/*08296*/ uint8_t unknown08296[4];
/*08300*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
/*14700*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
/*15060*/ uint8_t unknown15060[92];
/*15152*/
};

/*
** Player Profile
** Length: 23608 Octets
** OpCode: CharProfileCode
*/
struct charProfileStruct
{
/*00000*/ uint32_t checksum; //
/*00004*/ playerProfileStruct profile; // Profile
/*15152*/ char name[64]; // Name of player
/*15216*/ char lastName[32]; // Last name of player
/*15248*/ uint8_t unknown15248[12]; //***Placeholder (1/18/2006)
/*15260*/ int32_t guildID; // guildID
/*15264*/ uint32_t birthdayTime; // character birthday
/*15268*/ uint32_t lastSaveTime; // character last save time
/*15272*/ uint32_t timePlayedMin; // time character played
/*15276*/ uint8_t pvp; // 1=pvp, 0=not pvp
/*15277*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
/*15278*/ uint8_t gm; // 0=no, 1=yes (guessing!)
/*15279*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
/*15280*/ uint8_t unknown15280[12];
/*15292*/ uint32_t exp; // Current Experience
/*15296*/ uint8_t unknown15296[12];
/*15308*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages
/*15333*/ uint8_t unknown15333[7]; // All 0x00 (language buffer?)
/*15340*/ float y; // Players y position
/*15344*/ float x; // Players x position
/*15348*/ float z; // Players z position
/*15352*/ float heading; // Players heading
/*15356*/ uint8_t unknown15356[4]; // ***Placeholder
/*15360*/ uint32_t platinum_bank; // Platinum Pieces in Bank
/*15364*/ uint32_t gold_bank; // Gold Pieces in Bank
/*15368*/ uint32_t silver_bank; // Silver Pieces in Bank
/*15372*/ uint32_t copper_bank; // Copper Pieces in Bank
/*15376*/ uint32_t platinum_shared; // Shared platinum pieces
/*15380*/ uint8_t unknown15380[716];
/*16096*/ uint32_t expansions; // Bitmask for expansions
/*16100*/ uint8_t unknown16100[12];
/*16112*/ uint32_t autosplit; // 0 = off, 1 = on
/*16116*/ uint8_t unknown16116[16];
/*16132*/ uint16_t zoneId; // see zones.h
/*16134*/ uint16_t zoneInstance; // Instance id
/*16136*/ char groupMembers[MAX_GROUP_MEMBERS][64];// all the members in group, including self
/*16520*/ char groupLeader[64]; // Leader of the group ?
/*16584*/ uint8_t unknown16584[792];
/*17376*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on
/*17380*/ uint8_t unknown17380[4];
/*17384*/ uint32_t ldon_guk_points; // Earned GUK points
/*17388*/ uint32_t ldon_mir_points; // Earned MIR points
/*17392*/ uint32_t ldon_mmc_points; // Earned MMC points
/*17396*/ uint32_t ldon_ruj_points; // Earned RUJ points
/*17400*/ uint32_t ldon_tak_points; // Earned TAK points
/*17404*/ uint32_t ldon_avail_points; // Available LDON points
/*17408*/ uint8_t unknown17408[136];
/*17544*/ uint32_t tributeTime; // Time remaining on tribute (millisecs)
/*17548*/ uint32_t careerTribute; // Total favor points for this char
/*17552*/ uint32_t unknown17552; // *** Placeholder
/*17556*/ uint32_t currentTribute; // Current tribute points
/*17560*/ uint32_t unknown17560; // *** Placeholder
/*17564*/ uint32_t tributeActive; // 0 = off, 1=on
/*17568*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
/*17608*/ uint8_t unknown17608[8];
/*17616*/ float expGroupLeadAA; // Current group lead exp points
/*17620*/ uint32_t unknown17620;
/*17624*/ float expRaidLeadAA; // Current raid lead AA exp points
/*17628*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points
/*17632*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points
/*17636*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks
/*17764*/ uint8_t unknown17764[128];
/*17892*/ uint32_t airRemaining; // Air supply (seconds)
/*17896*/ uint8_t unknown17896[4608];
/*22504*/ uint32_t expAA; // Exp earned in current AA point
/*22508*/ uint8_t unknown22508[40];
/*22548*/ uint32_t currentRadCrystals; // Current count of radiant crystals
/*22552*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever
/*22556*/ uint32_t currentEbonCrystals;// Current count of ebon crystals
/*22560*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever
/*22564*/ uint8_t groupAutoconsent; // 0=off, 1=on
/*22565*/ uint8_t raidAutoconsent; // 0=off, 1=on
/*22566*/ uint8_t guildAutoconsent; // 0=off, 1=on
/*22567*/ uint8_t unknown22567[5]; // ***Placeholder (6/29/2005)
/*22572*/ uint32_t showhelm; // 0=no, 1=yes
/*22576*/ uint8_t unknown22576[1032]; // ***Placeholder (2/13/2007)
/*23608*/
};


Edit: this is using

#define MAX_SPELL_SLOTS 10

ieatacid
11-14-2007, 09:12 PM
In everquest.h

I added the 4 bytes on end of newZoneStruct as shown before. Changed number of spell slots, and max buffs. Added 4 bytes to the action2Struct on end.



Did we get more buff slots or was this just to get rid of the errors?


Edit: We didn't get more buff slots (it says so in the exe). I agree on your action2Struct change, though.

Mardark
11-14-2007, 09:21 PM
Did we get more buff slots or was this just to get rid of the errors?


Edit: We didn't get more buff slots (it says so in the exe). I agree on your action2Struct change, though.
I read two slots were added. But incrementing buff slots from 25 to 26 aligned the data structure, so this is what I did. Needs probably looked at further.

uRit1u2CBBA=
11-14-2007, 09:29 PM
In everquest.h

I added the 4 bytes on end of newZoneStruct as shown before. Changed number of spell slots, and max buffs. Added 4 bytes to the action2Struct on end.


#define MAX_SPELL_SLOTS 10

#define MAX_BUFFS 26

struct action2Struct
{
/*0000*/ uint16_t target; // Target ID
/*0002*/ uint16_t source; // Source ID
/*0004*/ uint8_t type; // Bash, kick, cast, etc.
/*0005*/ int16_t spell; // SpellID
/*0007*/ int32_t damage;
/*0011*/ uint8_t unknown0011[17]; // ***Placeholder
/*0028*/
};


With these changes, I am having no problems now. I haven't tested a whole lot, but gets you up and running.

There's 26 buff slots now? I didn't see anything change in the UI about this. Is this right?

ieatacid
11-14-2007, 09:40 PM
25 slots have been allocated for quite some time now, but we weren't able to use all of them. They just enabled two more. All areas of the exe that handle buff slots have not changed from 25.

uRit1u2CBBA=
11-14-2007, 09:41 PM
I read two slots were added. But incrementing buff slots from 25 to 26 aligned the data structure, so this is what I did. Needs probably looked at further.



2 slots were added via AAs, but 2 slots were previously unused (only 23 of the 25 were usable). So the 2 new ones makes it 25 out of 25 usable.

BlueAdept
11-14-2007, 09:52 PM
At least they didn't bork SEQ this time. Expansions were always their favorite time for changing stuff.

When everything gets figured out, Ill bundle it up and put out a new revision.

uRit1u2CBBA=
11-14-2007, 10:17 PM
I did all changes above, except for changing the 25 to a 26 - things seems to run as well as they can (just needs 2 or 3 zones to start working instead of one.)

ieatacid
11-14-2007, 10:29 PM
Yeah, if you use the playerProfile I posted, don't change MAX_BUFFS to 26. It should be 25 and the playerProfile I posted should be right.

rincewind9
11-15-2007, 09:10 AM
Hey folks -
Great work on getting us back on our feet again. However, I've been getting some random crashes since starting to use showeq again. I'm using the 5.10.0.0 tarball blue put up and have the most recent struct changes acid and various others have posted.

Here's an example of a recent crash:

Say: Special: 'a shadowmane tamer's corpse' - howls for the moon as its essence departs.
Spell: Unknown: 32c6: Foo, 60, Blessing of Oak
Spell: Unknown: 32c6: Aura of the Grove, 10, Aura of the Grove Effect
HP Changed: +55 4237
General: Unknown: 022a: Vebober, 1131
Warning: !!!! EQPacketFragmentSequence::addFragment(): buffer overflow adding in new fragment to buffer with seq 8b57 on stream 3, opcode 0000. Buffer is size 198696 and has been filled up to 198654, but tried to add 505 more!


Any ideas?

Rincewind

uRit1u2CBBA=
11-15-2007, 11:11 AM
Search is your friend --> http://www.showeq.net/forums/showthread.php?t=5333

doox00
11-15-2007, 11:24 AM
Hey folks -
Great work on getting us back on our feet again. However, I've been getting some random crashes since starting to use showeq again. I'm using the 5.10.0.0 tarball blue put up and have the most recent struct changes acid and various others have posted.

Here's an example of a recent crash:

Say: Special: 'a shadowmane tamer's corpse' - howls for the moon as its essence departs.
Spell: Unknown: 32c6: Foo, 60, Blessing of Oak
Spell: Unknown: 32c6: Aura of the Grove, 10, Aura of the Grove Effect
HP Changed: +55 4237
General: Unknown: 022a: Vebober, 1131
Warning: !!!! EQPacketFragmentSequence::addFragment(): buffer overflow adding in new fragment to buffer with seq 8b57 on stream 3, opcode 0000. Buffer is size 198696 and has been filled up to 198654, but tried to add 505 more!


Any ideas?

Rincewindyep, I just got the same thing.

rincewind9
11-15-2007, 11:59 AM
Woops. Thanks for the cluestick application.

ieatacid
11-15-2007, 06:00 PM
This is just so that the box under Character->Choose Level goes up to level 80.

Line 1082 in interface.cpp

m_levelSpinBox = new QSpinBox(1, 80, 1, this, "m_levelSpinBox");



Player::fillConTable() in player.cpp might need to be updated, too, to make con colors correct for levels 76-80.

uRit1u2CBBA=
11-16-2007, 01:00 AM
I'm still 76, but have not seen any problems with con colours so far. I'll keep an eye on it.

Whizzie Wiz
11-18-2007, 02:48 AM
It seems to me that the opcode table doesn't change EVERY time, so that if you log in with 1 character, then log out and log in another, the opcode table IS correctly populated, and everything shows up correctly, even if it's into a different zone. (I haven't tested logging into a different server yet).

This implies that, if we cache the received opcodes, and use those to "pre-seed" the table, we stand a good chance of avoiding the need for the extra zoning.

I haven't looked at the opcode packets area in several years, so I'm not sure how easy or difficult what I am suggesting is....

BlueAdept
11-18-2007, 08:27 AM
I agree. Even several days later it still works and from one account to the next. I have not tried from patch to patch though or from server to server.

ieatacid
11-18-2007, 11:29 AM
I thought of this too a couple weeks ago, but didn't think of any good ways of doing it. And the table hasn't changed in many months, nor the opcodes, it's the seed that changes in the obfuscator packet.

An easy way to check if we'd need to update a saved database would be to check if obfs->var1 (in EQPacket::obfuscateOpCodeDB) equaled the saved value.

Could_Be_Anyone
11-18-2007, 05:02 PM
I recompiled 5.10.0.0 with Mardark's & ieatacid's changes, and it is up and working (so far, it hasn't crashed, anyway), but the mob/npc's are all red cons, regardless of level. Drops & general effect things are the only things that aren't red. This is for any toon, either my 76, or a lowbie 58.

Oh, and btw, I lied.. it did crash after a while. =(

ieatacid
11-18-2007, 09:51 PM
You did something wrong if all cons are red.

Whizzie Wiz
11-19-2007, 03:08 AM
You did something wrong if all cons are red.

Ah, yes, I did find I needed to tweak the size of the last struct you posted before SEQ would accept the character profile packet as valid:


/*22576*/ uint8_t unknown22576[1008]; // ***Placeholder (18/11/2007)

i.e. 1008 not 1032.

The Ebon and Radiant counts offsets still seem to be off, and I must try and track down the orux and doubloons too - I won't be able to check the Solteris raid currencies though (phosphenes and whatever else). :p

Could_Be_Anyone
11-19-2007, 07:08 AM
You did something wrong if all cons are red.Quite possible; I'm no programmer, and don't understand the code.

I just pasted in the sections that were shown as code wholesale, replacing the old sections, & changed the max spell slots. Guess I screwed something up.

uRit1u2CBBA=
11-19-2007, 10:46 AM
Ah, yes, I did find I needed to tweak the size of the last struct you posted before SEQ would accept the character profile packet as valid:


/*22576*/ uint8_t unknown22576[1008]; // ***Placeholder (18/11/2007)

i.e. 1008 not 1032.

The Ebon and Radiant counts offsets still seem to be off, and I must try and track down the orux and doubloons too - I won't be able to check the Solteris raid currencies though (phosphenes and whatever else). :p

Did you change the MAX_BUFFS to 26 from 25? If so, that was done in error and explains the wrong packet size.

I'm using what he posted, with keeping MAX_BUFFS to 25, and things work fine.

Whizzie Wiz
11-20-2007, 03:51 AM
Did you change the MAX_BUFFS to 26 from 25? If so, that was done in error and explains the wrong packet size.

I'm using what he posted, with keeping MAX_BUFFS to 25, and things work fine.

Ah, yes - that would do it.