uint32 OPvPWintergrasp::GetData(uint32 id) { // if can build more vehicles if(SiegeWorkshop *workshop = GetWorkshopByEngGuid(id)) return workshop->m_vehicles.size() < MAX_VEHICLE_PER_WORKSHOP ? 1 : 0; return 0; }
uint32 OPvPWintergrasp::GetData(uint32 id) { // if can build more vehicles if (SiegeWorkshop *workshop = GetWorkshopByEngGuid(id)) return CanBuildVehicle(workshop) ? 1 : 0; return 0; }
void OPvPWintergrasp::SetData(uint32 id, uint32 value) { if(id == DATA_ENGINEER_DIE) if(SiegeWorkshop *workshop = GetWorkshopByEngGuid(value)) workshop->DespawnAllVehicles(); }
void OPvPWintergrasp::OnCreatureCreate(Creature *creature, bool add) { uint32 entry = creature->GetEntry(); if(creature->isVehicle()) // vehicles { TeamId team; if(creature->getFaction() == WintergraspFaction[TEAM_ALLIANCE]) team = TEAM_ALLIANCE; else if(creature->getFaction() == WintergraspFaction[TEAM_HORDE]) team = TEAM_HORDE; else return; switch(entry) { case 27881: case 28094: case 28312: case 32627: if(uint32 engLowguid = GUID_LOPART(creature->GetOwnerGUID())) { if(SiegeWorkshop *workshop = GetWorkshopByEngGuid(engLowguid)) { if(add) { if(workshop->m_vehicles.size() >= MAX_VEHICLE_PER_WORKSHOP) { creature->setDeathState(DEAD); creature->SetRespawnTime(DAY); return; } workshop->m_vehicles.insert((Vehicle*)creature); } // TODO: now you have to wait until the corpse of vehicle disappear to build a new one else if(!workshop->m_vehicles.erase((Vehicle*)creature)) sLog.outError("OPvPWintergrasp::OnCreatureCreate: a vehicle is removed but it does not have record in workshop!"); } } //case 28366: tower if(add) { m_vehicles[team].insert((Vehicle*)creature); if(m_tenacityStack > 0) { if(team == TEAM_ALLIANCE) creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, m_tenacityStack); } else if(m_tenacityStack < 0) { if(team == TEAM_HORDE) creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, -m_tenacityStack); } } else m_vehicles[team].erase((Vehicle*)creature); break; } } else if(m_creEntryPair.find(entry) != m_creEntryPair.end()) // guards and npc { if(add) m_creatures.insert(creature); else m_creatures.erase(creature); } else if(entry == CRE_ENG_A || entry == CRE_ENG_H) // demolisher engineers { for(OutdoorPvP::OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) if(SiegeWorkshop *workshop = dynamic_cast<SiegeWorkshop*>(itr->second)) if(workshop->m_engGuid == creature->GetDBTableGUIDLow()) { workshop->m_engineer = add ? creature : NULL; break; } } }
void OPvPWintergrasp::OnCreatureCreate(Creature *creature, bool add) { uint32 entry = creature->GetEntry(); switch(GetCreatureType(entry)) { case CREATURE_SIEGE_VEHICLE: { if (!creature->isSummon()) return; TeamId team; if (add) { if (creature->getFaction() == WintergraspFaction[TEAM_ALLIANCE]) team = TEAM_ALLIANCE; else if (creature->getFaction() == WintergraspFaction[TEAM_HORDE]) team = TEAM_HORDE; else return; if (uint32 engLowguid = GUID_LOPART(((TempSummon*)creature)->GetSummonerGUID())) { if (SiegeWorkshop *workshop = GetWorkshopByEngGuid(engLowguid)) { if (CanBuildVehicle(workshop)) { m_vehicles[team].insert(creature); //workshop->m_vehicles.insert(creature); } else { creature->setDeathState(DEAD); creature->SetRespawnTime(DAY); return; } } } if (m_tenacityStack > 0) { if (team == TEAM_ALLIANCE) creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, m_tenacityStack); } else if (m_tenacityStack < 0) { if (team == TEAM_HORDE) creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, -m_tenacityStack); } } else // the faction may be changed in uncharm { // TODO: now you have to wait until the corpse of vehicle disappear to build a new one if (m_vehicles[TEAM_ALLIANCE].erase(creature)) team = TEAM_ALLIANCE; else if (m_vehicles[TEAM_HORDE].erase(creature)) team = TEAM_HORDE; else return; } SendUpdateWorldState(VehNumWorldState[team], m_vehicles[team].size()); break; } case CREATURE_ENGINEER: for (OutdoorPvP::OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) { if (SiegeWorkshop *workshop = dynamic_cast<SiegeWorkshop*>(itr->second)) if (workshop->m_engGuid == creature->GetDBTableGUIDLow()) { workshop->m_engineer = add ? creature : NULL; break; } } break; default: if (m_creEntryPair.find(entry) != m_creEntryPair.end()) // guards and npc { if (add) m_creatures.insert(creature); else m_creatures.erase(creature); } break; } }