[12099] Implement sending initial world states from Outdoor PvP scripts

Also fix sending world state dummies in case Outdoor PvP is disabled
This commit is contained in:
stfx 2012-08-17 18:50:01 +02:00 committed by Antz
parent e955c3bc8f
commit 2992c6e1f0
3 changed files with 170 additions and 85 deletions

View file

@ -8659,85 +8659,143 @@ static WorldStatePair EY_world_states[] =
{ 0x0, 0x0 } { 0x0, 0x0 }
}; };
static WorldStatePair SI_world_states[] = // Silithus
{
{ 2313, 0 }, // WORLD_STATE_SI_GATHERED_A
{ 2314, 0 }, // WORLD_STATE_SI_GATHERED_H
{ 2317, 0 } // WORLD_STATE_SI_SILITHYST_MAX
};
static WorldStatePair EP_world_states[] = // Eastern Plaguelands
{
{ 2327, 0 }, // WORLD_STATE_EP_TOWER_COUNT_ALLIANCE
{ 2328, 0 }, // WORLD_STATE_EP_TOWER_COUNT_HORDE
{ 2355, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_NEUTRAL
{ 2374, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_CONTEST_ALLIANCE
{ 2375, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_CONTEST_HORDE
{ 2376, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_PROGRESS_ALLIANCE
{ 2377, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_PROGRESS_HORDE
{ 2378, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_ALLIANCE
{ 2379, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_CROWNGUARD_HORDE
{ 2354, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_ALLIANCE
{ 2356, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_HORDE
{ 2357, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_PROGRESS_ALLIANCE
{ 2358, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_PROGRESS_HORDE
{ 2359, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_CONTEST_ALLIANCE
{ 2360, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_CONTEST_HORDE
{ 2361, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_EASTWALL_NEUTRAL
{ 2352, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_NEUTRAL
{ 2362, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_CONTEST_ALLIANCE
{ 2363, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_CONTEST_HORDE
{ 2364, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_PROGRESS_ALLIANCE
{ 2365, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_PROGRESS_HORDE
{ 2372, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_ALLIANCE
{ 2373, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_NORTHPASS_HORDE
{ 2353, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_PLAGUEWOOD_NEUTRAL
{ 2366, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_PLAGUEWOOD_CONTEST_ALLIANCE
{ 2367, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_PLAGUEWOOD_CONTEST_HORDE - not in dbc! sent for consistency's sake, and to match field count
{ 2368, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_PLAGUEWOOD_PROGRESS_ALLIANCE
{ 2369, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_PLAGUEWOOD_PROGRESS_HORDE
{ 2370, WORLD_STATE_REMOVE }, // WORLD_STATE_EP_PLAGUEWOOD_ALLIANCE
{ 2371, WORLD_STATE_REMOVE } // WORLD_STATE_EP_PLAGUEWOOD_HORDE
};
static WorldStatePair HP_world_states[] = // Hellfire Peninsula static WorldStatePair HP_world_states[] = // Hellfire Peninsula
{ {
{ 0x9ba, 0x1 }, // 2490 10 { 2490, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_TOWER_DISPLAY_A
{ 0x9b9, 0x1 }, // 2489 11 { 2489, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_TOWER_DISPLAY_H
{ 0x9b5, 0x0 }, // 2485 12 { 2485, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_BROKEN_HILL_NEUTRAL
{ 0x9b4, 0x1 }, // 2484 13 { 2484, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_BROKEN_HILL_HORDE
{ 0x9b3, 0x0 }, // 2483 14 { 2483, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_BROKEN_HILL_ALLIANCE
{ 0x9b2, 0x0 }, // 2482 15 { 2482, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_OVERLOOK_NEUTRAL
{ 0x9b1, 0x1 }, // 2481 16 { 2481, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_OVERLOOK_HORDE
{ 0x9b0, 0x0 }, // 2480 17 { 2480, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_OVERLOOK_ALLIANCE
{ 0x9ae, 0x0 }, // 2478 18 horde pvp objectives captured { 2478, 0 }, // WORLD_STATE_HP_TOWER_COUNT_HORDE
{ 0x9ac, 0x0 }, // 2476 19 { 2476, 0 }, // WORLD_STATE_HP_TOWER_COUNT_ALLIANCE
{ 0x9a8, 0x0 }, // 2472 20 { 2472, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_STADIUM_NEUTRAL
{ 0x9a7, 0x0 }, // 2471 21 { 2471, WORLD_STATE_REMOVE }, // WORLD_STATE_HP_STADIUM_ALLIANCE
{ 0x9a6, 0x1 }, // 2470 22 { 2470, WORLD_STATE_REMOVE } // WORLD_STATE_HP_STADIUM_HORDE
{ 0x0, 0x0 }
}; };
static WorldStatePair TF_world_states[] = // Terokkar Forest static WorldStatePair TF_world_states[] = // Terokkar Forest
{ {
{ 0xa41, 0x0 }, // 2625 10 { 2622, 0 }, // WORLD_STATE_TF_TOWER_COUNT_H
{ 0xa40, 0x14 }, // 2624 11 { 2621, 0 }, // WORLD_STATE_TF_TOWER_COUNT_A
{ 0xa3f, 0x0 }, // 2623 12 { 2620, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_TOWERS_CONTROLLED
{ 0xa3e, 0x0 }, // 2622 13 { 2695, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_SOUTH_EAST_TOWER_HORDE
{ 0xa3d, 0x5 }, // 2621 14 { 2694, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_SOUTH_EAST_TOWER_ALLIANCE
{ 0xa3c, 0x0 }, // 2620 15 { 2693, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_SOUTH_TOWER_NEUTRAL
{ 0xa87, 0x0 }, // 2695 16 { 2692, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_SOUTH_TOWER_HORDE
{ 0xa86, 0x0 }, // 2694 17 { 2691, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_SOUTH_TOWER_ALLIANCE
{ 0xa85, 0x0 }, // 2693 18 { 2690, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_EAST_TOWER_NEUTRAL
{ 0xa84, 0x0 }, // 2692 19 { 2689, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_EAST_TOWER_HORDE
{ 0xa83, 0x0 }, // 2691 20 { 2688, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_EAST_TOWER_ALLIANCE
{ 0xa82, 0x0 }, // 2690 21 { 2686, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_NORTH_TOWER_NEUTRAL
{ 0xa81, 0x0 }, // 2689 22 { 2685, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_NORTH_TOWER_HORDE
{ 0xa80, 0x0 }, // 2688 23 { 2684, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_NORTH_TOWER_ALLIANCE
{ 0xa7e, 0x0 }, // 2686 24 { 2683, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_WEST_TOWER_ALLIANCE
{ 0xa7d, 0x0 }, // 2685 25 { 2682, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_WEST_TOWER_HORDE
{ 0xa7c, 0x0 }, // 2684 26 { 2681, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_WEST_TOWER_NEUTRAL
{ 0xa7b, 0x0 }, // 2683 27 { 2512, 0 }, // WORLD_STATE_TF_TIME_MIN_FIRST_DIGIT
{ 0xa7a, 0x0 }, // 2682 28 { 2510, 0 }, // WORLD_STATE_TF_TIME_MIN_SECOND_DIGIT
{ 0xa79, 0x0 }, // 2681 29 { 2509, 0 }, // WORLD_STATE_TF_TIME_HOURS
{ 0x9d0, 0x5 }, // 2512 30 { 2508, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_LOCKED_NEUTRAL
{ 0x9ce, 0x0 }, // 2510 31 { 2696, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_SOUTH_EAST_TOWER_NEUTRAL
{ 0x9cd, 0x0 }, // 2509 32 { 2768, WORLD_STATE_REMOVE }, // WORLD_STATE_TF_LOCKED_HORDE
{ 0x9cc, 0x0 }, // 2508 33 { 2767, WORLD_STATE_REMOVE } // WORLD_STATE_TF_LOCKED_ALLIANCE
{ 0xa88, 0x0 }, // 2696 34
{ 0xad0, 0x0 }, // 2768 35
{ 0xacf, 0x1 }, // 2767 36
{ 0x0, 0x0 }
}; };
static WorldStatePair ZM_world_states[] = // Zangarmarsh static WorldStatePair ZM_world_states[] = // Zangarmarsh
{ {
{ 0x9e1, 0x0 }, // 2529 10 { 2653, 0x1 }, // WORLD_STATE_ZM_UNK
{ 0x9e0, 0x0 }, // 2528 11 { 2652, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_EAST_NEUTRAL
{ 0x9df, 0x0 }, // 2527 12 { 2651, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_EAST_HORDE
{ 0xa5d, 0x1 }, // 2526 13 { 2650, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_EAST_ALLIANCE
{ 0xa5c, 0x0 }, // 2525 14 { 2649, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_GRAVEYARD_HORDE
{ 0xa5b, 0x1 }, // 2524 15 { 2648, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_GRAVEYARD_ALLIANCE
{ 0xa5a, 0x0 }, // 2523 16 { 2647, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_GRAVEYARD_NEUTRAL
{ 0xa59, 0x1 }, // 2649 17 { 2646, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_WEST_NEUTRAL
{ 0xa58, 0x0 }, // 2648 18 { 2645, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_WEST_HORDE
{ 0xa57, 0x0 }, // 2647 19 { 2644, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_WEST_ALLIANCE
{ 0xa56, 0x0 }, // 2646 20 { 2560, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_EAST_UI_NEUTRAL
{ 0xa55, 0x1 }, // 2645 21 { 2559, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_EAST_UI_HORDE
{ 0xa54, 0x0 }, // 2644 22 { 2558, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_EAST_UI_ALLIANCE
{ 0x9e7, 0x0 }, // 2535 23 { 2557, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_WEST_UI_NEUTRAL
{ 0x9e6, 0x0 }, // 2534 24 { 2556, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_WEST_UI_HORDE
{ 0x9e5, 0x0 }, // 2533 25 { 2555, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_BEACON_WEST_UI_ALLIANCE
{ 0xa00, 0x0 }, // 2560 26 { 2658, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_FLAG_READY_HORDE
{ 0x9ff, 0x1 }, // 2559 27 { 2657, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_FLAG_NOT_READY_HORDE
{ 0x9fe, 0x0 }, // 2558 28 { 2656, WORLD_STATE_REMOVE }, // WORLD_STATE_ZM_FLAG_NOT_READY_ALLIANCE
{ 0x9fd, 0x0 }, // 2557 29 { 2655, WORLD_STATE_REMOVE } // WORLD_STATE_ZM_FLAG_READY_ALLIANCE
{ 0x9fc, 0x1 }, // 2556 30 };
{ 0x9fb, 0x0 }, // 2555 31
{ 0xa62, 0x0 }, // 2658 32 static WorldStatePair NA_world_states[] =
{ 0xa61, 0x1 }, // 2657 33 {
{ 0xa60, 0x1 }, // 2656 34 { 2503, 0 }, // WORLD_STATE_NA_GUARDS_HORDE
{ 0xa5f, 0x0 }, // 2655 35 { 2502, 0 }, // WORLD_STATE_NA_GUARDS_ALLIANCE
{ 0x0, 0x0 } { 2493, 0 }, // WORLD_STATE_NA_GUARDS_MAX
{ 2491, 0 }, // WORLD_STATE_NA_GUARDS_LEFT
{ 2762, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_NORTH_NEUTRAL_H
{ 2662, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_NORTH_NEUTRAL_A
{ 2663, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_NORTH_H
{ 2664, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_NORTH_A
{ 2760, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_SOUTH_NEUTRAL_H
{ 2670, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_SOUTH_NEUTRAL_A
{ 2668, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_SOUTH_H
{ 2669, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_SOUTH_A
{ 2761, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_WEST_NEUTRAL_H
{ 2667, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_WEST_NEUTRAL_A
{ 2665, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_WEST_H
{ 2666, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_WEST_A
{ 2763, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_EAST_NEUTRAL_H
{ 2659, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_EAST_NEUTRAL_A
{ 2660, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_EAST_H
{ 2661, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_WYVERN_EAST_A
{ 2671, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_HALAA_NEUTRAL
{ 2676, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_HALAA_NEUTRAL_A
{ 2677, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_HALAA_NEUTRAL_H
{ 2672, WORLD_STATE_REMOVE }, // WORLD_STATE_NA_HALAA_HORDE
{ 2673, WORLD_STATE_REMOVE } // WORLD_STATE_NA_HALAA_ALLIANCE
}; };
void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
@ -8778,17 +8836,31 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
FillInitialWorldState(data, count, 0x9bd, 0xF); // 2493 FillInitialWorldState(data, count, 0x9bd, 0xF); // 2493
FillInitialWorldState(data, count, 0x9bb, 0xF); // 2491 FillInitialWorldState(data, count, 0x9bb, 0xF); // 2491
} }
switch (zoneid) switch (zoneid)
{ {
case 1: case 1: // Dun Morogh
case 11: case 11: // Wetlands
case 12: case 12: // Elwynn Forest
case 38: case 38: // Loch Modan
case 40: case 40: // Westfall
case 51: case 51: // Searing Gorge
case 1519: case 1519: // Stormwind City
case 1537: case 1537: // Ironforge
case 2257: case 2257: // Deeprun Tram
case 3703: // Shattrath City
break;
case 139: // Eastern Plaguelands
if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(zoneid))
outdoorPvP->FillInitialWorldStates(data, count);
else
FillInitialWorldState(data, count, EP_world_states);
break;
case 1377: // Silithus
if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(zoneid))
outdoorPvP->FillInitialWorldStates(data, count);
else
FillInitialWorldState(data, count, SI_world_states);
break; break;
case 2597: // AV case 2597: // AV
if (bg && bg->GetTypeID() == BATTLEGROUND_AV) if (bg && bg->GetTypeID() == BATTLEGROUND_AV)
@ -8815,13 +8887,28 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
FillInitialWorldState(data, count, EY_world_states); FillInitialWorldState(data, count, EY_world_states);
break; break;
case 3483: // Hellfire Peninsula case 3483: // Hellfire Peninsula
FillInitialWorldState(data, count, HP_world_states); if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(zoneid))
outdoorPvP->FillInitialWorldStates(data, count);
else
FillInitialWorldState(data, count, HP_world_states);
break;
case 3518: // Nagrand
if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(zoneid))
outdoorPvP->FillInitialWorldStates(data, count);
else
FillInitialWorldState(data, count, NA_world_states);
break; break;
case 3519: // Terokkar Forest case 3519: // Terokkar Forest
FillInitialWorldState(data, count, TF_world_states); if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(zoneid))
outdoorPvP->FillInitialWorldStates(data, count);
else
FillInitialWorldState(data, count, TF_world_states);
break; break;
case 3521: // Zangarmarsh case 3521: // Zangarmarsh
FillInitialWorldState(data, count, ZM_world_states); if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(zoneid))
outdoorPvP->FillInitialWorldStates(data, count);
else
FillInitialWorldState(data, count, ZM_world_states);
break; break;
case 3698: // Nagrand Arena case 3698: // Nagrand Arena
if (bg && bg->GetTypeID() == BATTLEGROUND_NA) if (bg && bg->GetTypeID() == BATTLEGROUND_NA)
@ -8853,8 +8940,6 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
FillInitialWorldState(data, count, 0xbba, 0x0); // 3002 9 show FillInitialWorldState(data, count, 0xbba, 0x0); // 3002 9 show
} }
break; break;
case 3703: // Shattrath City
break;
default: default:
FillInitialWorldState(data, count, 0x914, 0x0); // 2324 7 FillInitialWorldState(data, count, 0x914, 0x0); // 2324 7
FillInitialWorldState(data, count, 0x913, 0x0); // 2323 8 FillInitialWorldState(data, count, 0x913, 0x0); // 2323 8

View file

@ -2155,7 +2155,7 @@ class MANGOS_DLL_SPEC Player : public Unit
bool CanUseCapturePoint(); bool CanUseCapturePoint();
/*********************************************************/ /*********************************************************/
/*** WORLD PVP SYSTEM ***/ /*** OUTDOOR PVP SYSTEM ***/
/*********************************************************/ /*********************************************************/
// returns true if the player is in active state for outdoor pvp objective capturing // returns true if the player is in active state for outdoor pvp objective capturing

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "12098" #define REVISION_NR "12099"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__