- 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:
What it should read:
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:
It appears the base, the bonus, and the max are captured in the eqdata.h, but maybe not the multiplier:
Other culprits of these Slot issues are temporary HP buffs, a few dots, all auras, and any spells that proc other spells.
Example:
Code:
Harvest of druzzil, spell id 16707
1: Mana unknown calc: 2050 range: 900 -> 0
Code:
1: Increase Mana by[COLOR=DarkOrchid] 5650[/COLOR]
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
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;
Last edited: