htw: .Slot info

PeteSampras

Your UI is fucking you. Stop using it.
Joined
Dec 12, 2007
Messages
3,956
Reaction score
49
Points
38
It would be fantastic if .Slot info was able to be read a little more easily. The parser at http://eqspellparser.googlecode.com/svn/trunk/SpellParser.cs is about the best out there. But short of that, there are some minor work arounds for spells that involve calculations and a few others that could just be replacements for phrases used. Currently, calculations in spells are shown literally for .Slot info instead of calculating out and showing a translation.

Example:
Code:
Harvest of druzzil, spell id 16707
1:      Mana unknown calc: 2050 range: 900 -> 0
What it should read:
Code:
1: Increase Mana by[COLOR=DarkOrchid] 5650[/COLOR]
How to get that number (5650):
Fields 21-32 are base1-base12 amounts (the amount to be multiplied)
Fields 33-44 are base2_1-12 (seems to be for songs, proc rates, stack issues)
Fields 45-56 are max1-12. If defined, this caps the amount regardless of calc total.
Fields 71-82 are bonus amounts1-12 (still cant break max amount)
Field 209 appears to be the multiplier for all spells (i cant tell if any other fields multiply)

So for the example above, because it is using slot1. We have to use the base1xmultiplier + bonus_amount1.

Field 21 is "base1" amount (900)
Field 209 is multiplier (4)
Field 71 is bonus amount1 (2050)
Field 45 is max1 (0), indicating no cap.

FinalCalc = (field 21 * field 209) + field 71
/if (${FinalCalc}>${Field45} && ${Field45}) /varset FinalCalc ${Field45}
But because field45 was blank, we dont varset.

Then .Replace "Mana unknown calc: " with "Increase mana by "${Final calc}

Raw data from spells_us.txt:
Code:
16707^Harvest of Druzzil^PLAYER_^^^^You gather mana from your surroundings.^ gathers glowing blue strands of mana.^^0^0^0^0^10000^0^0^0^0^0^0^[COLOR=Cyan]900[/COLOR]^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^[COLOR=DarkOrange]0[/COLOR]^0^0^0^0^0^0^0^0^0^0^0^0^2508^2109^-1^-1^-1^-1^1^1^1^1^-1^-1^-1^-1^[COLOR=Yellow]2050[/COLOR]^100^100^100^100^100^100^100^100^100^100^100^0^1^0^0^15^254^254^254^254^254^254^254^254^254^254^254^6^0^98^-1^0^0^255^255^255^255^255^255^255^255^255^255^255^254^255^255^255^255^43^0^0^35^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^24^222^0^0^0^0^0^0^0^0^0^0^^^^0^0^0^0^100^0^0^0^0^0^0^0^0^0^0^0^0^0^0^100^0^89^0^0^0^0^0^0^0^50^0^0^0^0^0^0^0^0^0^0^0^1^0^0^0^1^0^-1^3338^[COLOR=Magenta]4[/COLOR]^0^1^0^0^1^1^1^0^-1^0^0^0^5^36^-1^0^1^0^0^1^0^1^0^0^0^0^0^0
It appears the base, the bonus, and the max are captured in the eqdata.h, but maybe not the multiplier:
Code:
typedef struct _SPELL {
/*0x000*/   FLOAT   Range;
/*0x004*/   FLOAT   AERange;
/*0x008*/   FLOAT   PushBack;
/*0x00c*/   BYTE    Unknown0xc[0x4];
/*0x010*/   DWORD   CastTime;
/*0x014*/   DWORD   FizzleTime;
/*0x018*/   DWORD   RecastTime;
/*0x01c*/   DWORD   DurationType;       //DurationFormula on Lucy
/*0x020*/   DWORD   DurationValue1;
/*0x024*/   BYTE    Unknown0x24[0x4];
/*0x028*/   DWORD   Mana;
/*0x02c*/  [COLOR=DeepSkyBlue] LONG    Base[0x0c];[/COLOR]         //Base1-Base12
/*0x05c*/   LONG    Base2[0x0c];        //Mostly unused, setting name to Base2 from Lucy for now
/*0x08c*/   [COLOR=DarkOrange]LONG    Max[0xc][/COLOR];           //Max1-Max12
/*0x0bc*/   DWORD   ReagentId[0x4];     //ReagentId1-ReagentId4d
/*0x0cc*/   DWORD   ReagentCount[0x4];  //ReagentCount1-ReagentCount4
/*0x0dc*/   BYTE    Unknown0xdc[0x10];
/*0x0ec*/   [COLOR=Yellow]DWORD   Calc[0x0c];         //Calc1-Calc12[/COLOR] [COLOR=Red]i think[/COLOR]
/*0x11c*/   DWORD   Attrib[0xc];       //Attrib1-Attrib12
/*0x14c*/   DWORD   BookIcon;
/*0x150*/   BYTE    Unknown0x150[0x4];
/*0x154*/   DWORD   DescriptionNumber;
/*0x158*/   DWORD   ResistAdj;
/*0x15c*/   BYTE    Unknown0x15c[0x4];
/*0x160*/   DWORD   spaindex;
/*0x164*/   DWORD   SpellAnim;
/*0x168*/   DWORD   SpellIcon;
/*0x16c*/   BYTE    Unknown0x16c[0x8];
/*0x174*/   DWORD   ID;
/*0x178*/   DWORD   Autocast;           //SpellID of spell to instacast on caster when current spell lands on target
/*0x17c*/   DWORD   Unknown144;         //Unknown144 from lucy
/*0x180*/   DWORD   Unknown145;         //Unknown145 from lucy
/*0x184*/   BYTE    Unknown0x184[0x10];
/*0x194*/   DWORD   EnduranceCost;      //CA Endurance Cost
/*0x198*/   DWORD   CARecastTimerID;    //ID of combat timer, i think.
/*0x19c*/   BYTE    Unknown0x19c[0x18];
/*0x1b4*/   DWORD   PvPResistBase;
/*0x1b8*/   BYTE    Unknown0x1b8[0x4];
/*0x1bc*/   DWORD   PvPResistCap;
/*0x1c0*/   BYTE    Unknown0x1c0[0x4];
/*0x1c4*/   DWORD   Unknown183;         //Unknown183 from Lucy
/*0x1c8*/   BYTE    Unknown0x1c8[0x6b];
/*0x233*/   BYTE    DurationWindow;     //0=Long, 1=Short
/*0x234*/   BYTE    Unknown0x234[0x2];
/*0x236*/   BYTE    Deletable;
/*0x237*/   BYTE    Unknown0x237[0x6];
/*0x23d*/   BYTE    CanMGB;
/*0x23e*/   BYTE    Unknown0x23e[0x5];
/*0x243*/   BYTE    Level[0x10];        //per class.
/*0x253*/   BYTE    Unknown0x253[0x13];
/*0x266*/   BYTE    LightType;
/*0x267*/   BYTE    SpellType;          //0=detrimental, 1=Beneficial, 2=Beneficial, Group Only
/*0x268*/   BYTE    Unknown0x268;
/*0x269*/   BYTE    Resist;             //0=un 1=mr 2=fr 3=cr 4=pr 5=dr 6=chromatic 7=prismatic 8=physical(skills,etc) 9=corruption
/*0x26a*/   BYTE    TargetType;         //03=Group v1, 04=PB AE, 05=Single, 06=Self, 08=Targeted AE, 0e=Pet, 28=AE PC v2, 29=Group v2
/*0x26b*/   BYTE    FizzleAdj;
/*0x26c*/   BYTE    Skill;
/*0x26d*/   BYTE    Location;           //01=Outdoors, 02=dungeons, ff=Any
/*0x26e*/   BYTE    Environment;
/*0x26f*/   BYTE    TimeOfDay;          // 0=any, 1=day only, 2=night only
/*0x270*/   BYTE    CastingAnim;
/*0x271*/   BYTE    Unknown0x271;
/*0x272*/   BYTE    TargetAnim;
/*0x273*/   BYTE    Unknown0x273[0x3];
/*0x276*/   CHAR    Name[0x40];
/*0x2b6*/   CHAR    Target[0x20];
/*0x2d6*/   CHAR    Extra[0x20];        //This is 'Extra' from Lucy (portal shortnames etc)
/*0x2f6*/   CHAR    Unknown0x2f6[0x60];
/*0x356*/   CHAR    Unknown0x356[0x60];
/*0x3b6*/   CHAR    CastOnYou[0x60];
/*0x416*/   CHAR    CastOnAnother[0x60];
/*0x476*/   CHAR    WearOff[0x60];
/*0x4d6*/   BYTE    Unknown0x4d6[0x4];
/*0x4da*/   BYTE    Uninterruptable;    //00=Interruptable, 01=Uninterruptable 
/*0x4db*/   BYTE    Unknown0x4db[0xe];
/*0x4e9*/
} SPELL, *PSPELL;
Other culprits of these Slot issues are temporary HP buffs, a few dots, all auras, and any spells that proc other spells.
 
Last edited:
Is this what causes the conflict with mq2cast trying to get bots to buff wizard pyromancy/arcomany with the tonic of resonant xxxx line? Bots usually will only buff one or the other even though both stack. Somehow I think mq2cast doesn't differentiate the spell slots? I remember asking htw about this a month or so ago, wonder if its related.
 
Focus and rez effects dont stack. But focus will land with rez effects on. So what we need is a WillStick option. As far as i know, there is no WillStick option. Devestator or xeniaz or someone else had tried to tackle it, but i dont know if it was successful. I attempt to bypass it by just ignoring those handful of buffs that cause issues manually, and by checking buff icon. It isnt perfect, but it mostly works. WillStick is what would work best though.