Ejemplo n.º 1
0
void BattlegroundSA::EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint8 hitType, uint32 destroyedEvent)
{
    if (!go || !go->GetGOInfo())
        return;

    switch(hitType)
    {
        case BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED://under attack
            SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name);
            break;
        case BG_OBJECT_DMG_HIT_TYPE_DAMAGED:
            break;
        case BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED:
            {
                uint32 i = GetGateIDFromDestroyEventID(destroyedEvent);
                GateStatus[i] = BG_SA_GATE_DAMAGED;
                uint32 uws = GetWorldStateFromGateID(i);
                if (uws)
                    UpdateWorldState(uws, GateStatus[i]);
                break;
            }
        case BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED:
            break;
        case BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED://handled at DestroyGate()
            if (destroyedEvent == 19837)
                SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED);
            else
                SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name);
            break;
    }
}
Ejemplo n.º 2
0
void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType)
{
    if (!go || !go->GetGOInfo())
        return;

    if (eventType == go->GetGOInfo()->building.damagedEvent)
    {
        uint32 i = GetGateIDFromDestroyEventID(eventType);
        GateStatus[i] = BG_SA_GATE_DAMAGED;
        uint32 uws = GetWorldStateFromGateID(i);
        if (uws)
            UpdateWorldState(uws, GateStatus[i]);
    }

    if (eventType == go->GetGOInfo()->building.destroyedEvent)
    {
        if (go->GetGOInfo()->building.destroyedEvent == 19837)
            SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED);
        else
            SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name.c_str());
    }

    if (eventType == go->GetGOInfo()->building.damageEvent)
        SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name.c_str());
}
Ejemplo n.º 3
0
void BattlegroundIC::DestroyGate(Player* pl, GameObject* /*go*/, uint32 destroyedEvent)
{
    uint16 gateID=GetGateIDFromDestroyEventID(destroyedEvent);

    if(m_IC_DoorData[gateID].state==BG_IC_GATE_DESTROYED)
        return;

    uint16 ObjectId=m_IC_DoorData[gateID].object_build;
    if (!GetBGObject(ObjectId))
        return;

    if (GetBGObject(ObjectId)->GetGOValue()->building.health == 0)
    {
        UpdateWorldState(m_IC_DoorData[gateID].worldstate[0], 0);
        UpdateWorldState(m_IC_DoorData[gateID].worldstate[1], 1);
        switch(gateID)
        {
        case BG_IC_H_FRONT:
        case BG_IC_H_WEST:
        case BG_IC_H_EAST:
            {
                for (int i = 0 ; i < MAX_BG_IC_OBJ; ++i)
                {
                    uint8 id=BG_IC_OBJ[i].id;
                    switch(BG_IC_OBJ[i].type)
                    {
                    case IC_TYPE_LAST_DOOR_H:
                        if(GetBGObject(id)) GetBGObject(id)->SetGoState(GO_STATE_ACTIVE);         
                    }
                }
                if (GetBGObject(m_IC_NodeData[BG_IC_ALLIANCE_KEEP].object_flag))
                    GetBGObject(m_IC_NodeData[BG_IC_ALLIANCE_KEEP].object_flag)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);

            }
            break;
        case BG_IC_A_FRONT:
        case BG_IC_A_WEST:
        case BG_IC_A_EAST:
            {
                for (int i = 0 ; i < MAX_BG_IC_OBJ; ++i)
                {
                    uint8 id=BG_IC_OBJ[i].id;
                    switch(BG_IC_OBJ[i].type)
                    {
                    case IC_TYPE_LAST_DOOR_A:
                        if(GetBGObject(id)) GetBGObject(id)->SetGoState(GO_STATE_ACTIVE);         
                    }
                }
                if (GetBGObject(m_IC_NodeData[BG_IC_HORDE_KEEP].object_flag))
                    GetBGObject(m_IC_NodeData[BG_IC_HORDE_KEEP].object_flag)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
            }
            break;
        }
    }
}
Ejemplo n.º 4
0
void BattlegroundSA::DestroyGate(Player* player, GameObject* go)
{
    uint32 i = GetGateIDFromDestroyEventID(go->GetGOInfo()->building.destroyedEvent);
    if (!GateStatus[i])
        return;

    if (GameObject* g = GetBGObject(i))
    {
        if (g->GetGOValue()->Building.Health == 0)
        {
            GateStatus[i] = BG_SA_GATE_DESTROYED;
            uint32 uws = GetWorldStateFromGateID(i);
            if (uws)
                UpdateWorldState(uws, GateStatus[i]);
            bool rewardHonor = true;
            gateDestroyed = true;
            switch (i)
            {
                case BG_SA_GREEN_GATE:
                    if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)
                        rewardHonor = false;
                    break;
                case BG_SA_BLUE_GATE:
                    if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED)
                        rewardHonor = false;
                    break;
                case BG_SA_RED_GATE:
                    if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED)
                        rewardHonor = false;
                    break;
                case BG_SA_PURPLE_GATE:
                    if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED)
                        rewardHonor = false;
                    break;
            }

            if (i < 5)
                DelObject(i+9);
            UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1);
            if (rewardHonor)
                UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1));
        }
    }
}