- Joined
- Aug 7, 2006
- Messages
- 439
- Reaction score
- 0
- Points
- 16
Added missing slot attributes using raidloot / lucy parser. Tested before f2p. Thanks.
Code:
PCHAR ShowSpellSlotInfo(PSPELL pSpell, PCHAR szBuffer)
{
CHAR szTemp[MAX_STRING]={0};
CHAR szBuff[MAX_STRING]={0};
CHAR buf[MAX_STRING]={0};
int szBase=0;
bool bSlotIsPH=false;
PITEMDB ItemDB=gItemDB;
for (int i=0; i<=11; i++)
{
sprintf(szTemp, "Slot %d: ", i+1);
strcpy(szBuff, szTemp);
bSlotIsPH=false;
szTemp[0]='\0';
switch(pSpell->Attrib[i])
{
case 0: //hp +/-: heals/regen/dd
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Hitpoints by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
if ( pSpell->DurationValue1 > 0 ) strcat(szBuff, " per tick");
break;
case 1: //ac mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "AC by ");
SlotValueCalculate(szBuff, pSpell, i, 0.3);
break;
case 2: //attack mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "ATK by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 3: //movement speed mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Movement by ");
if ( pSpell->Max[i] == 0 ) {
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
} else {
SlotValueCalculate(szBuff, pSpell, i, 1);
}
strcat(szBuff, "%");
break;
case 4: //str mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "STR by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 5: //dex mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "DEX by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 6: //agi mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "AGI by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 7: //sta mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "STA by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 8: //int mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "INT by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 9: //wis mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "WIS by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 10: //old lure slot: leaving this since even though patched, som
//spells still have a lure effect slot when base = (-6)
//this slot is also charisma
if ( (abs(pSpell->Base[i]) > 0) && (pSpell->Base[i] != -6) ) {
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "CHA by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
} else {
if (pSpell->Base[i] == -6 ){
strcat(szBuff, "Lure(6)");
} else {
bSlotIsPH=true;
}
}
break;
case 11: //haste mod
// Ziggy 31/12/04: Some haste buffs (Miraculous Visions) don't fill in the max slot, so use base instead.
if (pSpell->Max[i] == 0) {
szBase=pSpell->Base[i]-100;
} else {
szBase=pSpell->Max[i]-100;
}
if ( szBase < 0 ) strcat(szBuff, "Decrease ");
if ( szBase > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Attack Speed by ");
_itoa(abs(szBase), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 12: //Invisibility
sprintf(szTemp, "Invisibility(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 13: //See Invisible(c)
sprintf(szTemp, "See Invisible(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 14: //Water Breathing
strcat(szBuff, "Water Breathing");
break;
case 15: //mana +/-
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Mana by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
if ( pSpell->DurationValue1 > 0 ) strcat(szBuff, " per tick");
break;
case 18: //Pacify
strcat(szBuff, "Pacify");
break;
case 19: //faction
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Faction by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 20: //Blindness
strcat(szBuff, "Blindness");
break;
case 21: //stun time = base in ms
sprintf(szTemp, "Stun(%.1f sec/%d)", (float)(pSpell->Base[i] / 1000), pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 22: //Charm(c/level)
sprintf(szTemp, "Charm(%d/%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 23: //Fear(c)
sprintf(szTemp, "Fear(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 24: //Stamina Loss
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Stamina Loss by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 25: //Bind Affinity
strcat(szBuff, "Bind Affinity");
if (pSpell->Base[i]==2) strcat(szBuff, " (Secondary Bind Point)");
break;
case 26: //Gate
if (pSpell->Base2[1]==1) {
strcat(szBuff, "Gate");
break;
} else if (pSpell->Base2[1]==2) {
strcat(szBuff, "Gate to Secondary Bind Point");
break;
}
case 27: //Cancel Magic(c)
sprintf(szTemp, "Cancel Magic(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 28: //Invisibility versus Undead
sprintf(szTemp, "Invisibility versus Undead(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 29: //Invisibility versus Animal
sprintf(szTemp, "Invisibility versus Animal(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 30: //Frenzy Radius(c/level)
sprintf(szTemp, "Frenzy Radius(%d/%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 31: //Mesmerize(c/level)
sprintf(szTemp, "Mesmerize(%d/%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 32: //Summon Item
while ((ItemDB) && ((DWORD)pSpell->Base[i] != ItemDB->ID)) {
ItemDB = ItemDB->pNext;
}
if (ItemDB) {
strcpy(szTemp,ItemDB->szName);
} else {
sprintf(szTemp,"Unknown%d",(DWORD)pSpell->Base[i]);
}
strcat(szBuff, "Summon Item: "); strcat(szBuff, szTemp);
break;
case 33: //Summon Pet
sprintf(szTemp, "Summon Pet: %s", pSpell->Extra);
strcat(szBuff, szTemp);
break;
case 35: //disease counters
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Disease Counter by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 36: //poison counters
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Poison Counter by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 40: //Invulnerability
strcat(szBuff, "Invulnerability");
break;
case 41: //Destroy Target
strcat(szBuff, "Destroy Target");
break;
case 42: //Shadowstep(c)
sprintf(szTemp, "Shadowstep(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 44: //Lycanthropy
strcat(szBuff, "Lycanthropy");
break;
case 46: //fire resist
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Fire Resist by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 47: //cold resist
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Cold Resist by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 48: //poison resist
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Poison Resist by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 49: //disease resist
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Disease Resist by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 50: //magic resist
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Magic Resist by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 52: //Sense Undead
strcat(szBuff, "Sense Undead");
break;
case 53: //Sense Summoned
strcat(szBuff, "Sense Summoned");
break;
case 54: //Sense Animals
strcat(szBuff, "Sense Animals");
break;
case 55: //most runes
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Absorb Damage by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 56: //True North
strcat(szBuff, "True North");
break;
case 57: //Levitate(c)
sprintf(szTemp, "Levitate(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 58: //Illusion: Base=Race
strcat(szBuff, "Illusion: "); strcat(szBuff, pEverQuest->GetRaceDesc(pSpell->Base[i]));
break;
case 59: //damage shield
//base value sign has opposite effect..
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Damage Shield by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 61: //Identify
strcat(szBuff, "Identify");
break;
case 63: //Memblur e%
sprintf(szTemp, "Memblur %d", pSpell->Base[i]);
strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 64: //SpinStun
strcat(szBuff, "SpinStun");
break;
case 65: //Infravision
strcat(szBuff, "Infravision");
break;
case 66: //ultravision
strcat(szBuff, "Ultravision");
break;
case 67: //Eye of Zomm
strcat(szBuff, "Eye Of Zomm");
break;
case 68: //reclaim
strcat(szBuff, "Reclaim Mana");
break;
case 69: //max hp mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Max Hitpoints by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 71: //Summon Skeleton Pet
sprintf(szTemp, "Summon Skeleton Pet: %s", pSpell->Extra);
strcat(szBuff, szTemp);
break;
case 73: //Bind Sight
strcat(szBuff, "Bind Sight");
break;
case 74: //Feign Death
strcat(szBuff, "Feign Death");
break;
case 75: //Voice Graft
strcat(szBuff, "Voice Graft");
break;
case 76: //Sentinel
strcat(szBuff, "Sentinel");
break;
case 77: //Locate Corpse
strcat(szBuff, "Locate Corpse");
break;
case 78: //Absorb Magic Damage
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Absorb Magic Damage by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 79: //+hp when cast (priest buffs that have heal component, DoTs with DDs)
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "HP when cast by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 81: //Resurrection
sprintf(szTemp, "Resurrect and restore %d&pct experience", pSpell->Base[i]);
strcat(szBuff, szTemp);
case 82: //Summon Player
strcat(szBuff, "Summon Player");
break;
case 83: //zone portal spells
if (pSpell->TargetType==6) strcat(szBuff, "Gate to ");
else strcat(szBuff, "Teleport Group to ");
sprintf(szTemp, "%d, %d, %d in %s facing %s", pSpell->Base[1], pSpell->Base[2], pSpell->Base[3], GetFullZone(GetZoneID(pSpell->Extra)), szHeading[pSpell->Base[4]]);
strcat(szBuff, szTemp);
break;
case 84: //Toss on Z axis
//base value sign has opposite effect..
if ( pSpell->Base[i] > 0 ) sprintf(szTemp, "Toss Down(%d)", abs(pSpell->Base[i]));
if ( pSpell->Base[i] < 0 ) sprintf(szTemp, "Toss Up(%d)", abs(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 85: //Add Proc
sprintf(szTemp,"Add Proc: '%s' id: %d", GetSpellNameByID(pSpell->Base[i]), pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 86: //Reaction Radius(c/level)
sprintf(szTemp, "Reaction Radius(%d/%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 87: //perspective magnification
szBase=pSpell->Base[i]-100;
if ( szBase < 0 ) strcat(szBuff, "Decrease ");
if ( szBase > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Magnification by ");
_itoa(abs(szBase), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 88: //evac portal spells
sprintf(szTemp, "Evacuate to %d, %d, %d in %s facing %s",
pSpell->Base[1], pSpell->Base[2], pSpell->Base[3], pSpell->Extra, szHeading[pSpell->Base[4]]);
strcat(szBuff, szTemp);
break;
case 89: //player size
szBase=pSpell->Base[i]-100;
if ( szBase < 0 ) strcat(szBuff, "Decrease ");
if ( szBase > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Player Size by ");
_itoa(abs(szBase), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 90: //Cloak
strcat(szBuff, "Cloak");
break;
case 91: //Summon Corpse
strcat(szBuff, "Summon Corpse");
break;
case 92: //hate mod
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Hate by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 93: //Stop Rain
strcat(szBuff, "Stop Rain");
break;
case 94: //Make Fragile
strcat(szBuff, "Make Fragile");
break;
case 95: //Sacrifice
strcat(szBuff, "Sacrifice");
break;
case 96: //Silence
strcat(szBuff, "Silence");
break;
case 97: //mana pool
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Mana Pool by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 98: //Haste v2
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Haste v2 by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 99: //Root
strcat(szBuff, "Root");
break;
case 100: //hp mod: pet heals/regen
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Hitpoints v2 by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
if ( pSpell->DurationValue1 > 0 ) strcat(szBuff, " per tick");
break;
case 101: //Complete Heal (with duration)
strcat(szBuff, "Complete Heal (with duration)");
break;
case 102: //Fearless
strcat(szBuff, "Fearless");
break;
case 103: //Call Pet
strcat(szBuff, "Call Pet");
break;
case 104: //zone translocate spells
strcat(szBuff, "Translocate to ");
if(pSpell->Extra[0])
{
if(pSpell->Extra[0]=='0') //wtf?
{
// Spell: Teleport
strcat(szTemp, "Bind Point");
}
else
{
sprintf(szTemp, "%d, %d, %d in %s facing %s", pSpell->Base[1], pSpell->Base[2], pSpell->Base[3], GetFullZone(GetZoneID(pSpell->Extra)), szHeading[pSpell->Base[4]]);
}
}
else
{
// Spell: Translocate
strcat(szTemp, "Bind Point");
}
strcat(szBuff, szTemp);
break;
case 105: //Anti-Gate
sprintf(szTemp, "Anti-Gate(%d)",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 106: //Summon Warder
sprintf(szTemp, "Summon Warder: %s", pSpell->Extra);
strcat(szBuff, szTemp);
break;
case 108: //Summon Familiar
sprintf(szTemp, "Summon Familiar: %s", pSpell->Extra);
strcat(szBuff, szTemp);
break;
case 109: // Summon Into Bag
while ((ItemDB) && ((DWORD)pSpell->Base[i] != ItemDB->ID)) {
ItemDB = ItemDB->pNext;
}
if (ItemDB) {
strcpy(szTemp,ItemDB->szName);
} else {
sprintf(szTemp,"Unknown%d",(DWORD)pSpell->Base[i]);
}
strcat(szBuff, "Summon Item Into Bag: "); strcat(szBuff, szTemp);
break;
case 112: //Effective Casting Level
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Effective Casting Level by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 113: //Summon Horse
sprintf(szTemp, "Summon Horse: %s", pSpell->Extra);
strcat(szBuff, szTemp);
break;
case 111: //resist all
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "All Resists by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 114: //aggro multiplier
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Aggro Multiplier by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 115: //Food/Water
strcat(szBuff, "Food/Water");
break;
case 116: //curse counters
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Curse Counter by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 117: //Make Weapons Magical
strcat(szBuff, "Make Weapons Magical");
break;
case 118: //Singing Skill
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Singing Skill by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 119: //bard overhaste
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Haste v3 by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 120: //Reduce Healing Effectiveness (%)
if (pSpell->Base[i] > 0) strcat(szBuff, "Increase ");
if (pSpell->Base[i] < 0) strcat(szBuff, "Decrease ");
strcat(szBuff, "Healing Effectiveness by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 121: //Reverse Damage Shield
sprintf(szTemp, "Reverse Damage Shield (%d)", abs(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 123: //Screech
sprintf(szTemp,"Screech(%d)",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 124: //spell damage
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Spell Damage by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 125: //healing
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Healing by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 126: //spell resist rate
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Spell Resist Rate by %d",abs(pSpell->Base[i]));
strcat(szBuff,szTemp);
strcat(szBuff,"%");
break;
case 127: //spell haste
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Spell Haste by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 128: //spell duration
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Spell Duration by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 129: //spell range
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Spell Range by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 130: //spell/bash hate
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Spell/Bash Hate by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 131: //Decrease Chance of Using Reagent
strcat(szBuff, "Decrease Chance of Using Reagent by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 132: //Spell Mana Cost - signs reversed
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Spell Mana Cost by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 134: //limit max level
if(pSpell->Base2[i]>0)
{
sprintf(szTemp, "Limit: Max Level(%d) (lose %d%c per level over cap)", pSpell->Base[i],pSpell->Base2[i],'%');
}
else
{
sprintf(szTemp, "Limit: Max Level(%d)", pSpell->Base[i]);
}
strcat(szBuff, szTemp);
break;
case 135: //Limit: Resist
strcat(szBuff, "Limit: Resist ");
switch(pSpell->Base[i])
{
case 1: strcat(szBuff, "Magic"); break;
case 2: strcat(szBuff, "Fire"); break;
case 3: strcat(szBuff, "Cold/Ice"); break;
case 4: strcat(szBuff, "Poison"); break;
case 5: strcat(szBuff, "Disease"); break;
case 6: strcat(szBuff, "Chromatic"); break;
case 7: strcat(szBuff, "Prismatic"); break;
default: strcat(szBuff, "Unknown"); break;
}
if ( pSpell->Base[i] > 0 ) strcat(szBuff, " allowed");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, " excluded");
break;
case 136: //limit target types this affects
strcat(szBuff, "Limit: Target(");
//sprintf(buf, "$spell(%d,targettype)", pSpell->TargetType);
//parmSpell(buf, szTemp, NULL ); // <---- wtf.
//strcat(szBuff,szTemp);
switch(abs(pSpell->Base[i]))
{
case 41: strcat(szBuff,"Group v2"); break;
case 40: strcat(szBuff,"AE PC v2"); break;
case 25: strcat(szBuff,"AE Summoned"); break;
case 24: strcat(szBuff,"AE Undead"); break;
case 20: strcat(szBuff,"Targeted AE Tap"); break;
case 18: strcat(szBuff,"Uber Dragons"); break;
case 17: strcat(szBuff,"Uber Giants"); break;
case 16: strcat(szBuff,"Plant"); break;
case 15: strcat(szBuff,"Corpse"); break;
case 14: strcat(szBuff,"Pet"); break;
case 13: strcat(szBuff,"LifeTap"); break;
case 11: strcat(szBuff,"Summoned"); break;
case 10: strcat(szBuff,"Undead"); break;
case 9: strcat(szBuff,"Animal"); break;
case 8: strcat(szBuff,"Targeted AE"); break;
case 6: strcat(szBuff,"Self"); break;
case 5: strcat(szBuff,"Single"); break;
case 4: strcat(szBuff,"PB AE"); break;
case 3: strcat(szBuff,"Group v1"); break;
case 2: strcat(szBuff,"AE PC v1"); break;
case 1: strcat(szBuff,"Line of Sight"); break;
default: strcat(szBuff,"Unknown"); break;
}
//GetTargetType(pSpell->Base[i],szTemp); strcat(szBuff,szTemp);
if ( pSpell->Base[i] > 0 ) strcat(szBuff, " allowed");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, " excluded");
strcat(szBuff, ")");
break;
case 137: //limit effect types this affects
strcat(szBuff, "Limit: Effect(");
GetSpellEffectName(pSpell->Base[i],szTemp); strcat(szBuff,szTemp);
if ( pSpell->Base[i] > 0 ) strcat(szBuff, " allowed");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, " excluded");
strcat(szBuff, ")");
break;
case 138: //limit spelltype this affects
strcat(szBuff, "Limit: SpellType(");
switch(pSpell->Base[i])
{
case 0:
strcat(szBuff,"Detrimental only");
break;
case 1:
strcat(szBuff,"Beneficial only");
break;
case 2:
strcat(szBuff,"Beneficial - Group Only");
break;
default:
sprintf(szTemp, "Unknown%03d", pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
}
strcat(szBuff, ")");
break;
case 139: //limit spell this affects
strcat(szBuff, "Limit: Spell(");
// changed this case to work for any future changes by referencing
// the spell array for the name
strcat(szBuff, GetSpellByID(abs(pSpell->Base[i]))->Name);
if ( pSpell->Base[i] > 0 ) strcat(szBuff, " allowed");
if ( pSpell->Base[i] < 0 ) strcat(szBuff, " excluded");
strcat(szBuff, ")");
break;
case 140: //limit min duration of spells this affects (base= #ticks)
sprintf(szTemp, "Limit: Min Duraction(%d sec)", (pSpell->Base[i] *6));
strcat(szBuff, szTemp);
break;
case 141: //limit to instant spells only
strcat(szBuff, "Limit: Instant spells only");
break;
case 142: //Limit: Min Level
sprintf(szTemp, "Limit: Min Level(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 143: //limit min casting time of spells this affects (base= seconds in ms)
sprintf(szTemp, "Limit: Min Cast Time(%.1f sec)", (float)(pSpell->Base[i] / 1000));
strcat(szBuff, szTemp);
break;
case 144: // http://lucy.allakhazam.com/spell.html?id=16360&source=Live
sprintf(szTemp, "Limit: Max Cast Time(%.1f sec)", (float)(pSpell->Base[i] / 1000));
strcat(szBuff, szTemp);
break;
case 145: //Teleportv2
sprintf(szTemp, "Teleportv2 to %d, %d, %d in %s facing %s",
pSpell->Base[1], pSpell->Base[2], pSpell->Base[3], pSpell->Extra, szHeading[pSpell->Base[4]]);
strcat(szBuff, szTemp);
break;
case 147: //Hit Points (75% Max)
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Hitpoints by %d (%dpct max)", pSpell->Max[i], pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 148: //Stacking: Block
sprintf(szTemp, "Stacking: Block new spell if slot %d is effect '", pSpell->Calc[i]-200);
strcat(szBuff, szTemp);
GetSpellEffectName(pSpell->Base[i],szTemp); strcat(szBuff,szTemp);
if ( pSpell->Max[i] > 0) {
strcat(szBuff, "' and < ");
_itoa(abs(pSpell->Max[i]), szTemp, 10);
strcat(szBuff, szTemp);
}
break;
case 149: //Stacking: Overwrite
sprintf(szTemp, "Stacking: Overwrite existing spell if slot %d is effect '", pSpell->Calc[i]-200);
strcat(szBuff, szTemp);
GetSpellEffectName(pSpell->Base[i],szTemp); strcat(szBuff,szTemp);
if ( pSpell->Max[i] > 0) {
strcat(szBuff, "' and < ");
_itoa(abs(pSpell->Max[i]), szTemp, 10);
strcat(szBuff, szTemp);
}
break;
case 150: //Death Save - Restore Full Health
sprintf(szTemp, "Death Save - Restore Full Health");
strcat(szBuff, szTemp);
break;
case 151: //Suspended Minion
strcat(szBuff, "Suspended Minion (");
switch(pSpell->Base[i])
{
case 0:
strcat(szBuff,"Current HP Only");
break;
case 1:
strcat(szBuff,"Current HP, Buffs, Weapons");
break;
default:
sprintf(szTemp, "Unknown%03d", pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
}
strcat(szBuff, ")");
break;
case 152: //Summon Pets (swarm)
sprintf(szTemp, "Summon Pets: %s x%d for %dsec", pSpell->Extra, pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 153: //Balance Party Health
sprintf(szTemp, "Balance Party Health(%dpct penalty)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 154: //Remove Detrimental(c)
sprintf(szTemp, "Remove Detrimental(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 156: //Illusion: Target
sprintf(szTemp, "Illusion: Target");
strcat(szBuff, szTemp);
break;
case 157: //Spell-Damage Shield
sprintf(szTemp, "Spell-Damage Shield(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 158: //Chance to Reflect Spell
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Chance to Reflect Spell by ");
_itoa(abs(pSpell->Base[i]), szTemp, 10); strcat(szBuff, szTemp);
strcat(szBuff, "%");
break;
case 159: //Stats
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Stats by %d", abs(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 160: // Drunk effect
sprintf(szTemp,"Drunk if Alcholol Tolerance is below %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 161: //Mitigate Spell Damage
sprintf(szTemp, "Mitigate Spell Damage by %dpct until %d absorbed", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 162: //Mitigate Melee Damage
sprintf(szTemp, "Mitigate Melee Damage by %dpct until %d absorbed", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 163: //Absorb damage
sprintf(szTemp, "Absorb Damage (melee or spell, calc unknown)");
strcat(szBuff, szTemp);
break;
case 164: //Attempt Sense (Cursed) Trap
sprintf(szTemp, "Attempt Sense (Cursed) Trap(%d,%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 165: //Attempt Disarm (Cursed) Trap
sprintf(szTemp, "Attempt Disarm (Cursed) Trap(%d,%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 166: //Attempt Destroy (Cursed) Lock
sprintf(szTemp, "Attempt Destroy (Cursed) Lock(%d,%d)", pSpell->Base[i], pSpell->Max[i]);
strcat(szBuff, szTemp);
break;
case 167: //Increase Pet Power
sprintf(szTemp, "Increase Pet Power(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 168: //Mitigation
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Melee Mitigation by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 169: //Chance to Critical Hit
sprintf(szTemp, "Chance to Critical Hit for %s by %d%%", pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 170: //Crit Cast, test spell only
sprintf(szTemp, "Chance to Critical Cast (unknown calc)");
strcat(szBuff, szTemp);
break;
case 171: //Crippling Blow
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Crippling Blow by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 172: //Melee Avoidance
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Avoid Melee by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 173: //Riposte
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Riposte by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 174: //Dodge
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Dodge by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 175: //Parry
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Parry by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 176: //Parry
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Dual Wield by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 177: //Stat Cap Mod (how do they know which?)
sprintf(szTemp, "Increase Double Attack by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 178: //Lifetap Proc
sprintf(szTemp, "Lifetap from Weapon Damage (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 179: //Puretone
sprintf(szTemp, "Instrument Modifier (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 180: //Spell Resist
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Resist Spells by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 181: //Fearless
sprintf(szTemp, "Increase Chance to Resist Fear Spell by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 182: //Hundred Hands
sprintf(szTemp, "Hundred Hands Effect");
strcat(szBuff, szTemp);
break;
case 183: //Melee Fury
sprintf(szTemp, "Increase Melee Skill Check by %dpct with %s",pSpell->Base[i], pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills");
strcat(szBuff, szTemp);
break;
case 184: //Chance to hit with Backstab (or throwing/archery [http://lucy.allakhazam.com/spellraw.html?id=9616&source=Live])
sprintf(szTemp, "Increase Chance to Hit by %dpct with %s", pSpell->Base[i], pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills");
strcat(szBuff, szTemp);
break;
case 185: //Damage Mod (how to tell which, rogues get a backstab only, others get an all skills)
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Damage Modifier by %dpct with %s", pSpell->Base[i], pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills");
strcat(szBuff, szTemp);
break;
case 186: //Damage Mod (see above)
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Minimum Damage Modifier by %dpct with %s", pSpell->Base[i], pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills");
strcat(szBuff, szTemp);
break;
case 187: // http://lucy.allakhazam.com/spellraw.html?id=31176&source=Test
sprintf(szTemp, "Balance Group Mana with %dpct Penalty",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 188: //Block
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to block by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 189: //Endurance DoT/Regen
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Endurance by %d per tick", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 190: // Endurance pool
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Endurance Pool by %d",abs(pSpell->Base[i]));
strcat(szBuff,szTemp);
break;
case 191: // http://lucy.allakhazam.com/spellraw.html?id=32246&source=Test
strcat(szBuff,"Inhibit Combat");
break;
case 192: //Discord Hate
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Hate by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 193: //Skill Attack
sprintf(szTemp, "Skill Attack (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 194: //Fade
sprintf(szTemp, "Fade Memories");
strcat(szBuff, szTemp);
break;
case 195: //Stun Resist
sprintf(szTemp, "Stun Resist (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 196: //Strikethrough
sprintf(szTemp, "Strikethrough (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 197: //Skill Damage
sprintf(szTemp, "Skill Damage Taken (%dpct)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 198: //Endurance Heals
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Endurance by %d", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 199: // http://lucy.allakhazam.com/spellraw.html?id=21751&source=Test
sprintf(szTemp, "Taunt (%d)",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 200: //Proc Mod
sprintf(szTemp, "Increase Proc Modifier by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 201: //Ranged Proc
sprintf(szTemp, "Ranged Proc (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 202: //Illusion
sprintf(szTemp, "Illusion Other");
strcat(szBuff, szTemp);
break;
case 203: //Illusion
sprintf(szTemp, "Mass Group Buff");
strcat(szBuff, szTemp);
break;
case 204: //War Cry
sprintf(szTemp, "Group Fear Immunity (%d0.00 sec)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 205: //Rampage
sprintf(szTemp, "Rampage");
strcat(szBuff, szTemp);
break;
case 206: //AE Taunt
sprintf(szTemp, "AE Taunt");
strcat(szBuff, szTemp);
break;
case 207: //AE Taunt
sprintf(szTemp, "Flesh to Bone");
strcat(szBuff, szTemp);
break;
case 209: // Disspell beneficial buffs
sprintf(szTemp,"Cancel Magic - Benefical Only(%d)",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 210: //Pet Shield
sprintf(szTemp, "Pet Shield (%d.00 sec)", (12*(pSpell->Base[i])));
strcat(szBuff, szTemp);
break;
case 211: //AE Melee
sprintf(szTemp, "AE Melee (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 212: //Frenzied Devastation
sprintf(szTemp, "Frenzied Devastation (%d0.00 sec)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 213: // http://lucy.allakhazam.com/spell.html?id=31783&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Pet Maximum HP by %dpct",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 214: //Plague
sprintf(szTemp, "Max HP change by (%d)", ((pSpell->Base[i])/100));
strcat(szBuff, szTemp);
break;
case 216: //Accuracy
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Accuracy by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 219: // Slay undead (Holyforge)
sprintf(szTemp,"Slay Undead(%d)",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 220: // http://lucy.allakhazam.com/spellraw.html?id=22898&source=Live
// http://lucy.allakhazam.com/spellraw.html?id=15854&source=Live
sprintf(szTemp, "%s Damage Bonus by %d", pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 222: // http://lucy.allakhazam.com/spellraw.html?id=12347&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Block from Back %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 225: // http://lucy.allakhazam.com/spellraw.html?id=11278&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Double Attack Skill by %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 227: // http://lucy.allakhazam.com/spellraw.html?id=6197&source=Live
sprintf(szTemp, "Reduce %s Timer by %ds", pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 232: //Divine Rez
sprintf(szTemp, "Divine Save (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 233: // http://lucy.allakhazam.com/spellraw.html?id=27375&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Increase ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Decrease ");
sprintf(szTemp,"Food Consumption by %dpct",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 243: // http://lucy.allakhazam.com/spellraw.html?id=30153&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Increase ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Decrease ");
sprintf(szTemp,"Chance of Charm Breaking by %dpct",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 246: // http://lucy.allakhazam.com/spellraw.html?id=27886&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Lung Capacity by %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 254: //placeholder of some kind
bSlotIsPH=true;
break;
case 258: //Triple Backstab
sprintf(szTemp, "Triple Backstab (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 259: // http://lucy.allakhazam.com/spellraw.html?id=27487&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "AC Soft Cap by %d", abs(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 260: //test puretone
sprintf(szTemp, "Add Instrument Modifier(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 262:
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
switch (pSpell->Base2[i]) {
case 0: strcat (szBuff, "STR"); break;
case 1: strcat (szBuff, "STA"); break;
case 2: strcat (szBuff, "AGI"); break;
case 3: strcat (szBuff, "DEX"); break;
case 4: strcat (szBuff, "WIS"); break;
case 5: strcat (szBuff, "INT"); break;
case 6: strcat (szBuff, "CHA"); break;
default:
sprintf (szTemp, "UnknownStat(%d)", pSpell->Base2[i]);
strcat (szBuff, szTemp);
}
sprintf(szTemp, " Cap by %d", abs(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 266: //Attack Chance
sprintf(szTemp, "Add Attack Chance(%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 270: // http://lucy.allakhazam.com/spellraw.html?id=16455&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Beneficial Song Range by %d", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 272: // http://lucy.allakhazam.com/spellraw.html?id=7805&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Spell Casting Skill by %dpct",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 273: //DoT Crit
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Critical DoT (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 274: //Heal Crit
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Critical Heal (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 279: //Flurry
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Flurry Chance by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 280: // http://lucy.allakhazam.com/spellraw.html?id=25960&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Pet Flurry Chance by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 286: // Additional Damage to Spell
sprintf(szTemp, "Additional Damage to Spell(%d)", pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 287: // http://lucy.allakhazam.com/spellraw.html?id=12383&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Duration by %ds", pSpell->Base[i]*6);
strcat(szBuff,szTemp);
break;
case 289: // Improved Spell Effect
sprintf(szTemp,"Improved Spell Effect: %s",GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 291: //Purifacation
sprintf(szTemp, "Purify (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 294: //DD Crit
sprintf(szTemp, "Spell Crit Chance (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 296: //Blight
sprintf(szTemp, "Increase Incoming Spell Damage by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 297: //Empathy
sprintf(szTemp, "Empathy");
strcat(szBuff, szTemp);
break;
case 298: //Tiny Companion
sprintf(szTemp, "Decrease Height by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 299: //Wake the Dead
sprintf(szTemp, "Wake the Dead (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 300: //Doppleganger
sprintf(szTemp, "Doppleganger");
strcat(szBuff, szTemp);
break;
case 306: //Army of Dead
sprintf(szTemp, "Wake the Dead 2 (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 308: //Suspend minion
sprintf(szTemp, "Zone Suspend minion");
strcat(szBuff, szTemp);
break;
case 309: //Teleport Bind
sprintf(szTemp, "Gate to Casters Bindpoint");
strcat(szBuff, szTemp);
break;
case 310: //Reuse Timer
sprintf(szTemp, "Decrease Reuse Timer by %d.00 sec", ((pSpell->Base[i])/1000));
strcat(szBuff, szTemp);
break;
case 311: //No Combat Skills
sprintf(szTemp, "Limit: Combat Skills Not Allowed");
strcat(szBuff, szTemp);
break;
case 312: //Sanc
sprintf(szTemp, "Observer (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 314: //Invis
sprintf(szTemp, "Set Duration Invis");
strcat(szBuff, szTemp);
break;
case 315: //Invis2undead
sprintf(szTemp, "Set Duration Invis to Undead");
strcat(szBuff, szTemp);
break;
case 317: // http://lucy.allakhazam.com/spellraw.html?id=32031
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Worn HP Regen Cap by %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 318: // http://lucy.allakhazam.com/spellraw.html?id=32031
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Worn Mana Regen Cap by %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 319: // http://lucy.allakhazam.com/spellraw.html?id=12519
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Critical HoT (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 320: // http://lucy.allakhazam.com/spellraw.html?id=4590&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Shield Block Chance by %dpct", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 321: //Soothing
sprintf(szTemp, "Reduce Target Hate (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 322: //Origin
sprintf(szTemp, "Gate to Starting City");
strcat(szBuff, szTemp);
break;
case 323: // http://lucy.allakhazam.com/spellraw.html?id=29308&source=Live
if(pSpell->Base2[i]) sprintf(szTemp,"Add Defensive Proc: %s with %d Rate Mod", GetSpellNameByID(pSpell->Base[i]),pSpell->Base2[i]);
else sprintf(szTemp,"Add Defensive Proc: %s", GetSpellNameByID(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 324: //Spirit Channel
sprintf(szTemp, "Hp to Mana (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 328: // http://lucy.allakhazam.com/spellraw.html?id=29044&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Negative HP Limit by %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 329: //Mind over Matter
sprintf(szTemp, "Mana Absorb percent Damage (%d)", pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 330: //Crit Damage
sprintf(szTemp, "Critical %s Damage %d of Base Damage", pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 331: // http://lucy.allakhazam.com/spellraw.html?id=24198&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Salvage Components by %dpct",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 332: //Call of the Wild
sprintf(szTemp, "Summon to Corpse");
strcat(szBuff, szTemp);
break;
case 333: //Trigger on fade
sprintf(szTemp,"Trigger Effect: %s on Fade",GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 334: //Song DoT
sprintf(szTemp, "Decrease Hitpoints by %d (L%d) to %d(L%d)", (pSpell->Max[i] + pSpell->Base[i]), pSpell->Level[8], pSpell->Max[i],MAX_PC_LEVEL);
strcat(szBuff, szTemp);
break;
case 335: // http://lucy.allakhazam.com/spellraw.html?id=31861&source=Live
if( pSpell->Base[i]<=100 ) sprintf(szTemp,"Block Next Spell %dpct success",pSpell->Base[i]);
else strcpy(szTemp,"Block Next Spell");
strcat(szBuff, szTemp);
break;
case 337: //Experience buff
sprintf(szTemp, "Increase experience rate by %d percent.",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 338: // http://lucy.allakhazam.com/spellraw.html?id=6883&source=Test
strcat(szBuff,"Summon amd Ressurrect All Corpses");
break;
case 339: //Cast DoT as well
sprintf(szTemp, "Cast DoT as Well(%d%% Chance, Spell: %s)", pSpell->Base[i], GetSpellNameByID(pSpell->Base2[i]));
strcat(szBuff, szTemp);
break;
case 340: //Cast DD as well
sprintf(szTemp, "Cast DD as Well(%d%% Chance, Spell: %s)", pSpell->Base[i], GetSpellNameByID(pSpell->Base2[i]));
strcat(szBuff, szTemp);
break;
case 341: // http://lucy.allakhazam.com/spellraw.html?id=32297&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Attack Cap by %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 342: // http://lucy.allakhazam.com/spellraw.html?id=8271&source=Live
strcat(szBuff,"Inhebit Low Health Fleeing");
break;
case 343: // http://lucy.allakhazam.com/spellraw.html?id=22690&source=Test
if ( pSpell->Base[i] <= 100 ) sprintf(szTemp,"Interrupt Casting (Success: %dpct)",pSpell->Base[i]);
else strcpy(szTemp,"Interrupt Casting");
strcat(szBuff, szTemp);
break;
case 348: // http://lucy.allakhazam.com/spellraw.html?id=25774&source=Live
sprintf(szTemp,"Limit Min Mana Cost: %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 350: // http://lucy.allakhazam.com/spellraw.html?id=8451&source=Test
sprintf(szTemp,"Mana Burn: %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 353: // http://lucy.allakhazam.com/spellraw.html?id=18719&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Aura Slots by %d",pSpell->Base[i]);
strcat(szBuff, szTemp);
break;
case 360: // http://lucy.allakhazam.com/spellraw.html?id=10148&source=Live
if ( pSpell->Base[i] <= 100 ) sprintf(szTemp,"Add KillShot Proc: %s Chance: %dpct", GetSpellByID(pSpell->Base2[i])->Name,pSpell->Base[i]);
else sprintf(szTemp,"Add KillShot Proc: %s", GetSpellByID(pSpell->Base2[i])->Name);
strcat(szBuff,szTemp);
break;
case 361: // http://lucy.allakhazam.com/spellraw.html?id=22792&source=Test
if ( pSpell->Base[i] <= 100 ) sprintf(szTemp,"Cast On Death: %s Chance: %dpct", GetSpellByID(pSpell->Base2[i])->Name,pSpell->Base[i]);
else sprintf(szTemp,"Cast On Death: %s", GetSpellByID(pSpell->Base2[i])->Name);
strcat(szBuff,szTemp);
break;
case 364: // http://lucy.allakhazam.com/spellraw.html?id=29062&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Triple Attack by %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 365: // http://lucy.allakhazam.com/spellraw.html?id=26338&source=Live
if ( pSpell->Base[i] <= 100 ) sprintf(szTemp,"Cast On KillShot: %s Chance: %dpct", GetSpellByID(pSpell->Base2[i])->Name,pSpell->Base[i]);
else sprintf(szTemp,"Cast On KillShot: %s", GetSpellByID(pSpell->Base2[i])->Name);
strcat(szBuff,szTemp);
break;
case 367: // Change Body Type
sprintf(szTemp, "Change Body Type to ");
if (pSpell->Base[i]==25) strcat(szTemp, "Plant");
else if (pSpell->Base[i]==21) strcat(szTemp, "Animal");
else strcat(szTemp, "Unknown");
strcat(szBuff,szTemp);
break;
case 369: // Corruption Counters
if (pSpell->Base[i] < 0) strcat(szBuff, "Decrease ");
if (pSpell->Base[i] > 0) strcat(szBuff, "Increase ");
strcat(szBuff," Corruption Counter by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 370: // Corruption Resists
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Corruption Resist by ");
SlotValueCalculate(szBuff, pSpell, i , 1);
break;
case 371: // http://lucy.allakhazam.com/spellraw.html?id=29311&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Melee Delay by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 373: // http://lucy.allakhazam.com/spellraw.html?id=22898&source=Test
sprintf(szTemp,"Cast On Fade: %s", GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 374: // http://lucy.allakhazam.com/spellraw.html?id=28714&source=Test
if ( pSpell->Base[i] <= 100 ) sprintf(szTemp,"Add Effect: %s Chance: %dpct", GetSpellByID(pSpell->Base2[i])->Name,pSpell->Base[i]);
else sprintf(szTemp,"Add Effect: %s", GetSpellByID(pSpell->Base2[i])->Name);
strcat(szBuff,szTemp);
break;
case 375: // http://lucy.allakhazam.com/spellraw.html?id=31543&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Critical DoT Damage by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 377: // http://lucy.allakhazam.com/spellraw.html?id=17983&source=Live
sprintf(szTemp,"Cast if Not Cured: %s", GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 378: // http://lucy.allakhazam.com/spellraw.html?id=25982&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Chance To Resist(");
GetSpellEffectName(pSpell->Base2[i],szTemp);
strcat(szBuff,szTemp);
sprintf(szTemp,") by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 379: // http://lucy.allakhazam.com/spellraw.html?id=12740&source=Live
if ( pSpell->Base2[i] > 0) sprintf(szTemp,"Push for %d in Direction: %d",pSpell->Base[i],pSpell->Base2[i]);
else sprintf(szTemp,"Push foward for %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 380: // http://lucy.allakhazam.com/spellraw.html?id=23208&source=Live
sprintf(szTemp,"Push back for %d in Direction: %d",pSpell->Base2[i],pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 381: // http://lucy.allakhazam.com/spellraw.html?id=7912&source=Test
sprintf(szTemp,"Summon to %d in Front",pSpell->Base2[i],pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 382: // http://lucy.allakhazam.com/spellraw.html?id=17093&source=Test
strcat(szBuff, "Inhebit Effect(");
GetSpellEffectName(pSpell->Base2[i],szTemp);
strcat(szBuff,szTemp);
strcat(szBuff,")");
break;
case 383: // http://lucy.allakhazam.com/spellraw.html?id=21645&source=Live
if ( pSpell->Base[i] <= 100 ) sprintf(szTemp,"Trigger On Spell Cast: %s Chance: %dpct", GetSpellByID(pSpell->Base2[i])->Name,pSpell->Base[i]);
else sprintf(szTemp,"Trigger on Spell Cast: %s", GetSpellByID(pSpell->Base2[i])->Name);
strcat(szBuff,szTemp);
break;
case 384: // http://lucy.allakhazam.com/spellraw.html?id=11052&source=Test
strcat(szBuff,"Leap");
break;
case 385: // http://lucy.allakhazam.com/spellraw.html?id=9675&source=Test
sprintf(szTemp,"Limit Spells %s[Group: %d]",pSpell->Base[i]?"":"Exclude",abs(pSpell->Base[i]));
strcat(szBuff,szTemp);
break;
case 386: // http://lucy.allakhazam.com/spellraw.html?id=31866&source=Live
sprintf(szTemp,"Trigger on Curer: %s", GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 387: // http://lucy.allakhazam.com/spellraw.html?id=27516&source=Test
sprintf(szTemp,"Trigger when Cured: %s", GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 388: // http://lucy.allakhazam.com/spellraw.html?id=16247&source=Live
strcat(szBuff,"Summon Corpse (From Any Zone)");
break;
case 389: // http://lucy.allakhazam.com/spellraw.html?id=16248&source=Live
strcat(szBuff,"Reset Recast Timers");
break;
case 390: // http://lucy.allakhazam.com/spellraw.html?id=16974&source=Live
sprintf(szTemp, "Set Recast Timer to %ds",pSpell->Base[i]/1000);
strcat(szBuff,szTemp);
break;
case 392: // http://lucy.allakhazam.com/spellraw.html?id=22926&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Healing Bonus by %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 394: // http://lucy.allakhazam.com/spellraw.html?id=31858&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Healing Taken by %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 398: // http://lucy.allakhazam.com/spell.html?id=15996&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Pet Duration by %ds",pSpell->Base[i]/1000);
strcat(szBuff,szTemp);
break;
case 399: // http://lucy.allakhazam.com/spell.html?id=32398&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp, "Chance to Twincast by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 400: // http://lucy.allakhazam.com/spellraw.html?id=19121&source=Live
sprintf(szTemp,"Increase Current HP by up to %d (%.1f/mana)", pSpell->Base[i]*pSpell->Base2[i]/10,pSpell->Base2[i]/10);
strcat(szBuff,szTemp);
break;
case 401: // http://lucy.allakhazam.com/spellraw.html?id=24144&source=Live
sprintf(szTemp,"Decrease Current HP by up to %d (%.1f/target mana)", pSpell->Base[i]*pSpell->Base2[i]/-10,pSpell->Base2[i]/-10);
strcat(szBuff,szTemp);
break;
case 402: // http://lucy.allakhazam.com/spellraw.html?id=24146&source=Test
sprintf(szTemp,"Decrease Current HP by up to %d (%.1f/target endu)", pSpell->Base[i]*pSpell->Base2[i]/-10,pSpell->Base2[i]/-10);
strcat(szBuff,szTemp);
break;
case 406: // http://lucy.allakhazam.com/spellraw.html?id=31290&source=Live
sprintf(szTemp,"Cast on Max Hits: %s", GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 407: // http://lucy.allakhazam.com/spellraw.html?id=31858&source=Live
sprintf(szTemp,"Trigger on Unknown: %s", GetSpellByID(pSpell->Base[i])->Name);
strcat(szBuff,szTemp);
break;
case 408: // http://lucy.allakhazam.com/spellraw.html?id=23416&source=Live
// http://lucy.allakhazam.com/spellraw.html?id=13077&source=Live
if( pSpell->Base2[i] > 0) sprintf(szTemp,"Cap HP at lowest of %dpct or %d",pSpell->Base[i],pSpell->Base2[i]);
else sprintf(szTemp,"Cap HP at %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 409: // http://lucy.allakhazam.com/spell.html?id=23416&source=Live
if( pSpell->Base2[i] > 0) sprintf(szTemp,"Cap Mana at lowest of %dpct or %d",pSpell->Base[i],pSpell->Base2[i]);
else sprintf(szTemp,"Cap Mana at %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 410: // http://lucy.allakhazam.com/spellraw.html?id=24127&source=Live
if( pSpell->Base2[i] > 0) sprintf(szTemp,"Cap Endu at lowest of %dpct or %d",pSpell->Base[i],pSpell->Base2[i]);
else sprintf(szTemp,"Cap Endu at %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 411: // http://lucy.allakhazam.com/spellraw.html?id=16786&source=Live
//return String.Format("Limit Class: {0}", (SpellClassesMask)(value >> 1));
break;
case 413: // http://lucy.allakhazam.com/spellraw.html?id=21070&source=Test
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Bard Songs by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 414: // http://lucy.allakhazam.com/spellraw.html?id=21070&source=Test
sprintf(szTemp,"Limit Bard Skill: %s",pSpell->Base[i]>=0?szSkills[pSpell->Base[i]]:"All Skills");
strcat(szBuff,szTemp);
break;
case 416: // http://lucy.allakhazam.com/spellraw.html?id=12404&source=Live
// seems to be the same as 1
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "AC by ");
SlotValueCalculate(szBuff, pSpell, i, 0.3);
break;
case 417: // seems to be the same as 15
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
strcat(szBuff, "Mana by ");
SlotValueCalculate(szBuff, pSpell, i, 1);
if ( pSpell->DurationValue1 > 0 ) strcat(szBuff, " per tick");
break;
case 418: // seems to be the same as 220
sprintf(szTemp, "%s Damage Bonus by %d", pSpell->Base2[i]>=0?szSkills[pSpell->Base2[i]]:"All Skills",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 419: // http://lucy.allakhazam.com/spellraw.html?id=22296&source=Test
if(pSpell->Base2[i]) sprintf(szTemp,"Add Proc: '%s' with %d Rate Mod",GetSpellNameByID(pSpell->Base[i]),pSpell->Base2[i]);
else sprintf(szTemp,"Add Proc: '%s'", GetSpellNameByID(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 424: // http://lucy.allakhazam.com/spellraw.html?id=31866&source=Live
sprintf(szTemp,"Gradual %s: %d",(pSpell->Base[i] > 0)? "Push":"Pull", abs(pSpell->Base[i]));
strcat(szBuff,szTemp);
break;
case 427: // http://lucy.allakhazam.com/spellraw.html?id=20546&source=Test
sprintf(szTemp,"Trigger on Skill Use: %s Chance: %dpct",GetSpellNameByID(pSpell->Base[i]),pSpell->Base2[i]/10);
strcat(szBuff,szTemp);
break;
case 428: // http://lucy.allakhazam.com/spellraw.html?id=20546&source=Test
sprintf(szTemp,"Limit Skill: %s",pSpell->Base[i]>=0?szSkills[pSpell->Base[i]]:"All Skills");
strcat(szBuff,szTemp);
break;
case 429: // http://lucy.allakhazam.com/spellraw.html?id=4802&source=Test
if(pSpell->Base2[i]) sprintf(szTemp,"Add Skill Proc: '%s' with %d Rate Mod",GetSpellNameByID(pSpell->Base[i]),pSpell->Base2[i]);
else sprintf(szTemp,"Add Skill Proc: '%s'", GetSpellNameByID(pSpell->Base[i]));
strcat(szBuff, szTemp);
break;
case 430: // http://lucy.allakhazam.com/spell.html?id=30842&source=Live
strcat(szBuff, "Alter Vision");
break;
case 431: // http://lucy.allakhazam.com/spell.html?id=30842&source=Live
strcat(szBuff, "Tint Vision");
break;
case 434: // http://lucy.allakhazam.com/spellraw.html?id=29113&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Chace to Critical Heal v2 by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 435: // http://lucy.allakhazam.com/spellraw.html?id=29113&source=Live
if ( pSpell->Base[i] < 0 ) strcat(szBuff, "Decrease ");
if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase ");
sprintf(szTemp,"Chace to Critical HoT v2 by %dpct",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
case 437: // http://lucy.allakhazam.com/spellraw.html?id=27781&source=Test
case 438: // http://lucy.allakhazam.com/spell.html?id=27756&source=Test
sprintf(szTemp,"Teleport to your %s Anchor",pSpell->Base[i]==52584?"Primary":"Secondary");
strcat(szBuff,szTemp);
break;
case 441: // http://lucy.allakhazam.com/spellraw.html?id=31204&source=Test
sprintf(szTemp,"Cancel if Moved %d",pSpell->Base[i]);
strcat(szBuff,szTemp);
break;
default: //undefined effect
sprintf(szTemp, "UnknownEffect%03d", pSpell->Attrib[i]);
strcat(szBuff,szTemp);
break;
}
if ( !bSlotIsPH ) {
strcat(szBuffer, szBuff);
strcat(szBuffer, "<br>" );
}
}
return szBuffer;
}