Show
Ignore:
Timestamp:
11/19/08 13:38:54 (17 years ago)
Author:
yumileroy
Message:

[svn] Add new function SelectUnit? and SelectUnitList? to select target or targets with check "isPlayer" and "isWithinDist". Also add target type SELECT_TARGET_NEAREST and SELECT_TARGET_FARTHEST.
SpellEffect? Fix for 40802,29364,43723,41931. Patch provided by WarHead?.
Update script of Fathom Lord. Patch provided by Blaymoira.

Original author: megamage
Date: 2008-10-28 16:28:42-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/SpellEffects.cpp

    r128 r130  
    616616            switch(m_spellInfo->Id ) 
    617617            { 
     618                // Mingo's Fortune Giblets 
     619                case 40802: 
     620                { 
     621                    if (m_caster->GetTypeId() != TYPEID_PLAYER) return; 
     622 
     623                    Player *player = (Player*)m_caster; 
     624                    uint32 newitemid; 
     625 
     626                    switch(urand(1,20)) 
     627                    { 
     628                        case 1: newitemid = 32688; break; 
     629                        case 2: newitemid = 32689; break; 
     630                        case 3: newitemid = 32690; break; 
     631                        case 4: newitemid = 32691; break; 
     632                        case 5: newitemid = 32692; break; 
     633                        case 6: newitemid = 32693; break; 
     634                        case 7: newitemid = 32700; break; 
     635                        case 8: newitemid = 32701; break; 
     636                        case 9: newitemid = 32702; break; 
     637                        case 10: newitemid = 32703; break; 
     638                        case 11: newitemid = 32704; break; 
     639                        case 12: newitemid = 32705; break; 
     640                        case 13: newitemid = 32706; break; 
     641                        case 14: newitemid = 32707; break; 
     642                        case 15: newitemid = 32708; break; 
     643                        case 16: newitemid = 32709; break; 
     644                        case 17: newitemid = 32710; break; 
     645                        case 18: newitemid = 32711; break; 
     646                        case 19: newitemid = 32712; break; 
     647                        case 20: newitemid = 32713; break; 
     648                    } 
     649                    ItemPosCountVec dest; 
     650                    uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, newitemid, 1, false); 
     651                    if (msg != EQUIP_ERR_OK) 
     652                    { 
     653                        player->SendEquipError(msg, NULL, NULL); 
     654                        return; 
     655                    } 
     656                    Item *pItem = player->StoreNewItem(dest, newitemid, true, Item::GenerateItemRandomPropertyId(newitemid)); 
     657 
     658                    if (!pItem) 
     659                    { 
     660                        player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL); 
     661                        return; 
     662                    } 
     663                    player->SendNewItem(pItem, 1, true, true); 
     664                     
     665                    return; 
     666                } 
     667                // Encapsulate Voidwalker 
     668                case 29364: 
     669                { 
     670                    if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT || ((Creature*)unitTarget)->isPet()) return; 
     671 
     672                    Creature* creatureTarget = (Creature*)unitTarget; 
     673                    GameObject* pGameObj = new GameObject; 
     674 
     675                    if (!creatureTarget || !pGameObj) return; 
     676 
     677                    if (!pGameObj->Create(objmgr.GenerateLowGuid(HIGHGUID_GAMEOBJECT), 181574, creatureTarget->GetMap(), 
     678                        creatureTarget->GetPositionX(), creatureTarget->GetPositionY(), creatureTarget->GetPositionZ(),  
     679                        creatureTarget->GetOrientation(), 0, 0, 0, 0, 100, 1)) 
     680                    { 
     681                        delete pGameObj; 
     682                        return; 
     683                    } 
     684 
     685                    pGameObj->SetRespawnTime(0); 
     686                    pGameObj->SetOwnerGUID(m_caster->GetGUID()); 
     687                    pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()); 
     688                    pGameObj->SetSpellId(m_spellInfo->Id); 
     689 
     690                    MapManager::Instance().GetMap(creatureTarget->GetMapId(), pGameObj)->Add(pGameObj); 
     691 
     692                    WorldPacket data(SMSG_GAMEOBJECT_SPAWN_ANIM_OBSOLETE, 8); 
     693                    data << uint64(pGameObj->GetGUID()); 
     694                    m_caster->SendMessageToSet(&data,true); 
     695 
     696                    return; 
     697                } 
     698                // Demon Broiled Surprise 
     699                case 43723: 
     700                { 
     701                    if (!unitTarget || unitTarget->isAlive() || unitTarget->GetTypeId() != TYPEID_UNIT || 
     702                        ((Creature*)unitTarget)->isPet()) return; 
     703 
     704                    Player *player = (Player*)m_caster; 
     705 
     706                    if (!player) return; 
     707 
     708                    player->CastSpell(unitTarget, 43753, true); 
     709 
     710                    if (player->GetQuestStatus(11379) == QUEST_STATUS_INCOMPLETE && unitTarget->GetEntry() == 19973) 
     711                        player->CastedCreatureOrGO(19973, unitTarget->GetGUID(), 43723); 
     712 
     713                    return; 
     714                } 
    618715                case 8063:                                  // Deviate Fish 
    619716                { 
     
    47894886        // Flame Crash 
    47904887        case 41126: unitTarget->CastSpell(unitTarget, 41131, true); break; 
     4888        case 41931: 
     4889        { 
     4890            int bag=19; 
     4891            int slot=0; 
     4892            Item* item = NULL; 
     4893             
     4894            while (bag < 256) 
     4895            { 
     4896                item = ((Player*)m_caster)->GetItemByPos(bag,slot); 
     4897                if (item && item->GetEntry() == 38587) break; 
     4898                slot++; 
     4899                if (slot == 39) 
     4900                { 
     4901                    slot = 0; 
     4902                    bag++; 
     4903                } 
     4904            } 
     4905            if (bag < 256) 
     4906            { 
     4907                if (((Player*)m_caster)->GetItemByPos(bag,slot)->GetCount() == 1) ((Player*)m_caster)->RemoveItem(bag,slot,true); 
     4908                else ((Player*)m_caster)->GetItemByPos(bag,slot)->SetCount(((Player*)m_caster)->GetItemByPos(bag,slot)->GetCount()-1); 
     4909                // Spell 42518 (Braufest - Gratisprobe des Braufest herstellen) 
     4910                m_caster->CastSpell(m_caster,42518,true); 
     4911                return; 
     4912            } 
     4913        } 
    47914914        // Force Cast - Portal Effect: Sunwell Isle 
    47924915        case 44876: unitTarget->CastSpell(unitTarget, 44870, true); break;