MQ2Utilities - ShowSpellSlotInfo

s0rcier

The Grand Master Plugin Daddy!
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; 
}
 
Thanks s0rcier.

Code:
--- C:/Temp/old/MQ2Utilities.cpp    Wed Nov 23 18:47:18 2011
+++ C:/Temp/new/MQ2Utilities.cpp    Sat Mar 31 19:54:49 2012
@@ -1425,7 +1425,7 @@
 // Function:    ShowSpellSlotInfo 
 // Author:      Koad (used in his SpellSearch Plugin) 
 // *************************************************************************** 
-PCHAR ShowSpellSlotInfo(PSPELL pSpell, PCHAR szBuffer) 
+PCHAR ShowSpellSlotInfo(PSPELL pSpell, PCHAR szBuffer)
 { 
     CHAR szTemp[MAX_STRING]={0}; 
     CHAR szBuff[MAX_STRING]={0}; 
@@ -2165,6 +2165,10 @@
             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]]); 
@@ -2359,7 +2363,7 @@
             strcat(szBuff, szTemp); 
             break; 
         case 183: //Melee Fury 
-            sprintf(szTemp, "Increase Melee Skill Check by %dpct", pSpell->Base[i]); 
+            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])
@@ -2369,15 +2373,19 @@
         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, "All Skills Damage Modifier by %d%%", pSpell->Base[i]); 
+            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, "All Skills Minimum Damage Modifier by %d%%", pSpell->Base[i]); 
+            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; 
+            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 "); 
@@ -2396,6 +2404,9 @@
             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 "); 
@@ -2419,7 +2430,7 @@
             strcat(szBuff, szTemp); 
             break; 
         case 197: //Skill Damage 
-            sprintf(szTemp, "Skill Damage Taken (%d)", pSpell->Base[i]); 
+            sprintf(szTemp, "Skill Damage Taken (%dpct)", pSpell->Base[i]); 
             strcat(szBuff, szTemp); 
             break; 
         case 198: //Endurance Heals 
@@ -2427,7 +2438,11 @@
             if ( pSpell->Base[i] > 0 ) strcat(szBuff, "Increase "); 
             sprintf(szTemp, "Endurance by %d", pSpell->Base[i]); 
             strcat(szBuff, szTemp); 
-            break; 
+            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); 
@@ -2476,6 +2491,12 @@
             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); 
@@ -2490,14 +2511,49 @@
             sprintf(szTemp,"Slay Undead(%d)",pSpell->Base[i]); 
             strcat(szBuff,szTemp); 
             break; 
-        case 227: //Skill Timer 
-            sprintf(szTemp, "Reduce Skill Timer(%d)", pSpell->Base[i]); 
+        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; 
@@ -2505,6 +2561,12 @@
             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); 
@@ -2527,27 +2589,57 @@
             } 
             sprintf(szTemp, " Cap by %d", abs(pSpell->Base[i])); 
             strcat(szBuff, szTemp); 
-            break; 
+            break;
         case 266: //Attack Chance 
             sprintf(szTemp, "Add Attack Chance(%d)", pSpell->Base[i]); 
             strcat(szBuff, szTemp); 
-            break; 
+            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 
-            sprintf(szTemp, "Flurry Chance (%d)", pSpell->Base[i]); 
+            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); 
@@ -2611,6 +2703,30 @@
         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]); 
@@ -2620,22 +2736,35 @@
             sprintf(szTemp, "Gate to Starting City"); 
             strcat(szBuff, szTemp); 
             break; 
-        case 323: //Add Defensive Proc 
-            sprintf(szTemp,"Add Defensive Proc: %s", GetSpellNameByID(pSpell->Base[i])); 
+        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 Damage Mob(%d)", pSpell->Base[i]); 
+            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); 
@@ -2648,10 +2777,18 @@
             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); 
@@ -2659,13 +2796,54 @@
         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 360: // Killshot Triggers 
-            if (pSpell->Base2[i]) sprintf(szTemp,"Chance to Trigger on Non-Trivial Killshot: %s", GetSpellByID(pSpell->Base2[i])->Name); 
+        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 365: // Chance to Create EE on killshot 
-            sprintf(szTemp, "Chance to Create Essence Emerald on Non-Trivial Killshot"); 
+        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 
@@ -2687,18 +2865,237 @@
             strcat(szBuff, "Corruption Resist by "); 
             SlotValueCalculate(szBuff, pSpell, i , 1); 
             break; 
-        case 374:
-            sprintf(szTemp, "Skeleton illusion");
+        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;
-        default: //undefined effect 
+        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>" ); 
+            strcat(szBuffer, "" ); 
         } 
     } 
     return szBuffer;

htw
 
wow thanks for the diff, wasnt able to make one tool i downloaded make me nice color output diff but can't freaking make a file :)