Changeset 53 for trunk/src/game

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

[svn] Merge branch r50 with trunk.

Original author: megamage
Date: 2008-10-17 21:44:37-05:00

Location:
trunk/src/game
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/SharedDefines.h

    r44 r53  
    774774{ 
    775775    TARGET_SELF                        = 1, 
     776    //TARGET_UNIT_CASTER 
    776777    TARGET_RANDOM_ENEMY_CHAIN_IN_AREA  = 2,                 // only one spell has that, but regardless, it's a target type after all 
     778    //TARGET_UNIT_NEARBY_ENEMY 
     779    TARGET_UNIT_SINGLE_UNKNOWN         = 3, 
     780    TARGET_UNIT_NEARBY_ALLY            = 4, 
    777781    TARGET_PET                         = 5, 
     782    //TARGET_UNIT_PET 
    778783    TARGET_CHAIN_DAMAGE                = 6, 
     784    //TARGET_UNIT_TARGET_ENEMY 
     785    TARGET_UNIT_AREA_ENTRY             = 7, 
    779786    TARGET_AREAEFFECT_CUSTOM           = 8, 
     787    //TARGET_UNIT_AREA_ENTRY_GROUND 
    780788    TARGET_INNKEEPER_COORDINATES       = 9,                 // uses in teleport to innkeeper spells 
     789    //TARGET_DEST_HOME 
     790    TARGET_UNIT_TARGET_DEST_CASTER     = 11, // teleport target to caster 
    781791    TARGET_ALL_ENEMY_IN_AREA           = 15, 
     792    //TARGET_UNIT_AREA_ENEMY 
    782793    TARGET_ALL_ENEMY_IN_AREA_INSTANT   = 16, 
     794    //TARGET_UNIT_AREA_ENEMY_GROUND 
    783795    TARGET_TABLE_X_Y_Z_COORDINATES     = 17,                // uses in teleport spells and some other 
     796    //TARGET_DEST_TABLE 
    784797    TARGET_EFFECT_SELECT               = 18,                // highly depends on the spell effect 
     798    //TARGET_DEST_CASTER_GROUND 
    785799    TARGET_ALL_PARTY_AROUND_CASTER     = 20, 
     800    //TARGET_UNIT_PARTY_CASTER 
    786801    TARGET_SINGLE_FRIEND               = 21, 
     802    //TARGET_UNIT_TARGET_ALLY 
    787803    TARGET_ALL_AROUND_CASTER           = 22,                // used only in TargetA, target selection dependent from TargetB 
     804    //TARGET_DEST_CASTER 
    788805    TARGET_GAMEOBJECT                  = 23, 
     806    //TARGET_OBJECT_OPEN 
    789807    TARGET_IN_FRONT_OF_CASTER          = 24, 
     808    //TARGET_UNIT_CONE_ENEMY 
    790809    TARGET_DUELVSPLAYER                = 25, 
     810    //TARGET_UNIT_SINGLE 
    791811    TARGET_GAMEOBJECT_ITEM             = 26, 
     812    //TARGET_OBJECT_ITEM_PICKLOCK 
    792813    TARGET_MASTER                      = 27, 
     814    //TARGET_UNIT_MASTER 
    793815    TARGET_ALL_ENEMY_IN_AREA_CHANNELED = 28, 
     816    //TARGET_UNIT_AREA_ENEMY_CHANNEL 
     817    TARGET_UNIT_AREA_ALLY_CHANNEL      = 29, // 28,29 only used for effect 27, if interrupt channel, pstAA cancel 
    794818    TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER = 30,           // in TargetB used only with TARGET_ALL_AROUND_CASTER and in self casting range in TargetA 
     819    //TARGET_UNIT_AREA_ALLY 
    795820    TARGET_ALL_FRIENDLY_UNITS_IN_AREA  = 31, 
     821    //TARGET_UNIT_AREA_ALLY_GROUND 
    796822    TARGET_MINION                      = 32, 
     823    //TARGET_DEST_SUMMON 
    797824    TARGET_ALL_PARTY                   = 33, 
     825    //TARGET_UNIT_AREA_PARTY 
    798826    TARGET_ALL_PARTY_AROUND_CASTER_2   = 34,                // used in Tranquility 
     827    //TARGET_UNIT_AREA_PARTY_GROUND 
    799828    TARGET_SINGLE_PARTY                = 35, 
     829    //TARGET_UNIT_TARGET_PARTY 
     830    TARGET_DEST_CASTER_RANDOM_UNKNOWN  = 36, //unknown 
    800831    TARGET_AREAEFFECT_PARTY            = 37, 
     832    //TARGET_UNIT_PARTY_TARGET 
    801833    TARGET_SCRIPT                      = 38, 
     834    //TARGET_UNIT_NEARBY_ENTRY 
    802835    TARGET_SELF_FISHING                = 39, 
    803     TARGET_TOTEM_EARTH                 = 41, 
    804     TARGET_TOTEM_WATER                 = 42, 
    805     TARGET_TOTEM_AIR                   = 43, 
    806     TARGET_TOTEM_FIRE                  = 44, 
     836    //TARGET_UNIT_CASTER_FISHING 
     837    TARGET_OBJECT_USE                  = 40, 
     838    TARGET_DEST_CASTER_FRONT_LEFT      = 41, //earth totem 
     839    TARGET_DEST_CASTER_BACK_LEFT       = 42, //water totem 
     840    TARGET_DEST_CASTER_BACK_RIGHT      = 43, //air totem 
     841    TARGET_DEST_CASTER_FRONT_RIGHT     = 44, //fire totem 
    807842    TARGET_CHAIN_HEAL                  = 45, 
     843    //TARGET_UNIT_CHAINHEAL 
    808844    TARGET_SCRIPT_COORDINATES          = 46, 
    809     TARGET_DYNAMIC_OBJECT              = 47, 
    810     TARGET_SUMMON                      = 48, 
     845    //TARGET_DEST_TABLE_UNKNOWN 
     846    TARGET_DEST_CASTER_FRONT           = 47, 
     847    TARGET_DEST_CASTER_BACK            = 48, 
     848    TARGET_DEST_CASTER_RIGHT           = 49, 
     849    TARGET_DEST_CASTER_LEFT            = 50, 
     850    TARGET_OBJECT_AREA                 = 51, 
    811851    TARGET_AREAEFFECT_CUSTOM_2         = 52, 
     852    //TARGET_DUMMY 
    812853    TARGET_CURRENT_ENEMY_COORDINATES   = 53,                // set unit coordinates as dest, only 16 target B imlemented 
     854    //TARGET_DEST_TARGET_ENEMY 
     855    TARGET_UNIT_CONE_ENEMY_UNKNOWN     = 54, 
     856    TARGET_DEST_CASTER_FRONT_LEAP      = 55, // for a leap spell 
    813857    TARGET_RANDOM_RAID_MEMBER          = 56, 
     858    //TARGET_UNIT_AREA_RAID 
    814859    TARGET_SINGLE_FRIEND_2             = 57, 
     860    //TARGET_UNIT_TARGET_RAID 
     861    TARGET_UNIT_CONE_ALLY              = 59, 
     862    TARGET_UNIT_AREA_SCRIPT            = 60, 
    815863    TARGET_AREAEFFECT_PARTY_AND_CLASS  = 61, 
     864    //TARGET_UNIT_CLASS_TARGET 
     865    TARGET_TEST                        = 62, // for a test spell  
    816866    TARGET_DUELVSPLAYER_COORDINATES    = 63, 
    817     TARGET_BEHIND_VICTIM               = 65,                // uses in teleport behind spells 
     867    //TARGET_DEST_TARGET_ENEMY_UNKNOWN 
     868    TARGET_DEST_TARGET_FRONT           = 64, 
     869    TARGET_DEST_TARGET_BACK            = 65,                // uses in teleport behind spells 
     870    TARGET_DEST_TARGET_RIGHT           = 66, 
     871    TARGET_DEST_TARGET_LEFT            = 67, 
     872    TARGET_DEST_TARGET_ENEMY_UNKNOWN2  = 70, 
     873    TARGET_DEST_CASTER_RANDOM          = 72, 
     874    TARGET_DEST_CASTER_RADIUS          = 73, 
     875    TARGET_DEST_TARGET_RANDOM          = 74, 
     876    TARGET_DEST_TARGET_RADIUS          = 75, 
     877    TARGET_DEST_CHANNEL                = 76, 
    818878    TARGET_SINGLE_ENEMY                = 77, 
     879    //TARGET_UNIT_CHANNEL 
     880    TARGET_DEST_CASTER_FRONT_UNKNOWN   = 78, 
     881    TARGET_DEST_TABLE_UNKNOWN2         = 80, 
     882    TARGET_DEST_DEST_RANDOM            = 86, 
    819883    TARGET_SELF2                       = 87, 
     884    //TARGET_DEST_DEST 
     885    TARGET_UNIT_AREA_ALL_CHANNEL       = 88, 
    820886    TARGET_NONCOMBAT_PET               = 90, 
     887    //TARGET_UNIT_MINIPET 
    821888}; 
    822889 
  • trunk/src/game/Spell.cpp

    r44 r53  
    11841184    switch(cur) 
    11851185    { 
    1186         case TARGET_TOTEM_EARTH: 
    1187         case TARGET_TOTEM_WATER: 
    1188         case TARGET_TOTEM_AIR: 
    1189         case TARGET_TOTEM_FIRE: 
     1186        // destination around caster 
     1187        case TARGET_DEST_CASTER_FRONT_LEFT: 
     1188        case TARGET_DEST_CASTER_BACK_LEFT: 
     1189        case TARGET_DEST_CASTER_BACK_RIGHT: 
     1190        case TARGET_DEST_CASTER_FRONT_RIGHT: 
     1191        case TARGET_DEST_CASTER_FRONT: 
     1192        case TARGET_DEST_CASTER_BACK: 
     1193        case TARGET_DEST_CASTER_RIGHT: 
     1194        case TARGET_DEST_CASTER_LEFT: 
     1195        case TARGET_DEST_CASTER_RANDOM: 
     1196        case TARGET_DEST_CASTER_RADIUS: 
     1197        { 
     1198            float x, y, z, angle, dist; 
     1199 
     1200            if (m_spellInfo->EffectRadiusIndex[i]) 
     1201                dist = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i])); 
     1202            else 
     1203                dist = 3.0f;//do we need this? 
     1204            if (cur == TARGET_DEST_CASTER_RANDOM) 
     1205                dist *= rand_norm(); // This case we need to consider caster size 
     1206            else 
     1207                dist -= m_caster->GetObjectSize(); // Size is calculated in GetNearPoint(), but we do not need it  
     1208            //need a new function to remove this repeated work 
     1209 
     1210            switch(cur) 
     1211            { 
     1212                case TARGET_DEST_CASTER_FRONT_LEFT: angle = -M_PI/4;    break; 
     1213                case TARGET_DEST_CASTER_BACK_LEFT:  angle = -3*M_PI/4;  break; 
     1214                case TARGET_DEST_CASTER_BACK_RIGHT: angle = 3*M_PI/4;   break; 
     1215                case TARGET_DEST_CASTER_FRONT_RIGHT:angle = M_PI/4;     break; 
     1216                case TARGET_DEST_CASTER_FRONT:      angle = 0.0f;       break; 
     1217                case TARGET_DEST_CASTER_BACK:       angle = M_PI;       break; 
     1218                case TARGET_DEST_CASTER_RIGHT:      angle = M_PI/2;     break; 
     1219                case TARGET_DEST_CASTER_LEFT:       angle = -M_PI/2;    break; 
     1220                default:                            angle = rand_norm()*2*M_PI; break; 
     1221            } 
     1222 
     1223            m_caster->GetClosePoint(x, y, z, 0, dist, angle); 
     1224            m_targets.setDestination(x, y, z); // do not know if has ground visual 
     1225            TagUnitMap.push_back(m_caster); // may remove this in the future, if unitmap is empty, push m_caster 
     1226        }break; 
     1227 
     1228        // destination around target 
     1229        case TARGET_DEST_TARGET_FRONT: 
     1230        case TARGET_DEST_TARGET_BACK: 
     1231        case TARGET_DEST_TARGET_RIGHT: 
     1232        case TARGET_DEST_TARGET_LEFT: 
     1233        case TARGET_DEST_TARGET_RANDOM: 
     1234        case TARGET_DEST_TARGET_RADIUS: 
     1235        { 
     1236            Unit *target = m_targets.getUnitTarget(); 
     1237            if(!target) 
     1238            { 
     1239                sLog.outError("SPELL: no unit target for spell ID %u\n", m_spellInfo->Id); 
     1240                break; 
     1241            } 
     1242 
     1243            float x, y, z, angle, dist; 
     1244 
     1245            if (m_spellInfo->EffectRadiusIndex[i]) 
     1246                dist = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i])); 
     1247            else 
     1248                dist = 3.0f;//do we need this? 
     1249            if (cur == TARGET_DEST_TARGET_RANDOM) 
     1250                dist *= rand_norm(); // This case we need to consider caster size 
     1251            else 
     1252                dist -= target->GetObjectSize(); // Size is calculated in GetNearPoint(), but we do not need it  
     1253            //need a new function to remove this repeated work 
     1254 
     1255            switch(cur) 
     1256            { 
     1257                case TARGET_DEST_TARGET_FRONT:      angle = 0.0f;       break; 
     1258                case TARGET_DEST_TARGET_BACK:       angle = M_PI;       break; 
     1259                case TARGET_DEST_TARGET_RIGHT:      angle = M_PI/2;     break; 
     1260                case TARGET_DEST_TARGET_LEFT:       angle = -M_PI/2;    break; 
     1261                default:                            angle = rand_norm()*2*M_PI; break; 
     1262            } 
     1263 
     1264            target->GetClosePoint(x, y, z, 0, dist, angle); 
     1265            m_targets.setDestination(x, y, z); // do not know if has ground visual 
     1266            TagUnitMap.push_back(m_caster); // may remove this in the future, if unitmap is empty, push m_caster 
     1267        }break; 
     1268 
     1269        // destination around destination 
     1270        case TARGET_DEST_DEST_RANDOM: 
     1271        { 
     1272            if(!(m_targets.m_targetMask & TARGET_FLAG_DEST_LOCATION)) 
     1273            { 
     1274                sLog.outError("SPELL: no destination for spell ID %u\n", m_spellInfo->Id); 
     1275                break; 
     1276            } 
     1277            float x, y, z, dist, px, py, pz; 
     1278            dist = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i])); 
     1279            x = m_targets.m_destX; 
     1280            y = m_targets.m_destY; 
     1281            z = m_targets.m_destZ; 
     1282            m_caster->GetRandomPoint(x, y, z, dist, px, py, pz); 
     1283            m_targets.setDestination(px, py, pz); 
     1284            TagUnitMap.push_back(m_caster); 
     1285        }break; 
     1286        case TARGET_SELF2: 
     1287        { 
     1288            TagUnitMap.push_back(m_caster); 
     1289        }break; 
     1290 
    11901291        case TARGET_SELF: 
    1191         case TARGET_SELF2: 
    1192         case TARGET_DYNAMIC_OBJECT: 
    11931292        case TARGET_AREAEFFECT_CUSTOM: 
    11941293        case TARGET_AREAEFFECT_CUSTOM_2: 
    1195         case TARGET_SUMMON: 
    11961294        { 
    11971295            TagUnitMap.push_back(m_caster); 
     
    18651963            else 
    18661964                sLog.outError( "SPELL: unknown target coordinates for spell ID %u\n", m_spellInfo->Id ); 
    1867         }break; 
    1868         case TARGET_BEHIND_VICTIM: 
    1869         { 
    1870             Unit *pTarget = m_caster->getVictim(); 
    1871             if(!pTarget && m_caster->GetTypeId() == TYPEID_PLAYER) 
    1872                 pTarget = ObjectAccessor::GetUnit(*m_caster, ((Player*)m_caster)->GetSelection()); 
    1873  
    1874             if(pTarget) 
    1875             { 
    1876                 float _target_x, _target_y, _target_z; 
    1877                 pTarget->GetClosePoint(_target_x, _target_y, _target_z, m_caster->GetObjectSize(), CONTACT_DISTANCE, M_PI); 
    1878                 if(pTarget->IsWithinLOS(_target_x,_target_y,_target_z)) 
    1879                     m_targets.setDestination(_target_x, _target_y, _target_z); 
    1880             } 
    18811965        }break; 
    18821966        default: 
  • trunk/src/game/SpellEffects.cpp

    r44 r53  
    19201920            break; 
    19211921        } 
    1922         case TARGET_BEHIND_VICTIM: 
    1923         { 
    1924             // Get selected target for player (or victim for units) 
    1925             Unit *pTarget = NULL; 
    1926             if(m_caster->GetTypeId() == TYPEID_PLAYER) 
    1927                 pTarget = ObjectAccessor::GetUnit(*m_caster, ((Player*)m_caster)->GetSelection()); 
    1928             else 
    1929                 pTarget = m_caster->getVictim(); 
    1930             // No target present - return 
    1931             if (!pTarget) 
    1932                 return; 
    1933             // Init dest coordinates 
    1934             uint32 mapid = m_caster->GetMapId(); 
    1935             float x = m_targets.m_destX; 
    1936             float y = m_targets.m_destY; 
    1937             float z = m_targets.m_destZ; 
    1938             float orientation = pTarget->GetOrientation(); 
    1939             // Teleport 
    1940             if(unitTarget->GetTypeId() == TYPEID_PLAYER) 
    1941                 ((Player*)unitTarget)->TeleportTo(mapid, x, y, z, orientation, TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET | (unitTarget==m_caster ? TELE_TO_SPELL : 0)); 
    1942             else 
    1943             { 
    1944                 MapManager::Instance().GetMap(mapid, m_caster)->CreatureRelocation((Creature*)unitTarget, x, y, z, orientation); 
    1945                 WorldPacket data; 
    1946                 unitTarget->BuildTeleportAckMsg(&data, x, y, z, orientation); 
    1947                 unitTarget->SendMessageToSet(&data, false); 
    1948             } 
    1949             return; 
    1950         } 
    19511922        default: 
    19521923        {