Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CityBattle::onHordeCaptureEnemyBase(Player* player)
- {
- // if eastern kingdoms (alliance teritory) and zone Ironforge and horde character [capture]
- if (player->GetMapId() == 0 && player->GetZoneId() == 1519 && player->GetTeamId() == TEAM_HORDE)
- {
- GameObject* object = NULL;
- QueryResult resultObj = WorldDatabase.PQuery("SELECT `guid` FROM `gameobject` WHERE `id`='%u' AND `map`='0' LIMIT 1;", FLAG_ALLY);
- // if the flag exists and not already re-captured then go capture
- if (!resultObj)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("|cff00FF00The flag is already captured.|r");
- }
- else
- {
- // cant capture if your base is taken, first recap ur base then attack
- if (sCityBattle->isHordeCaptured)
- {
- ChatHandler(player->GetSession()).PSendSysMessage("You must recapture your base!");
- return; // skip
- }
- uint32 flag_guid = resultObj->Fetch()[0].GetUInt32();
- if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(flag_guid))
- object = ChatHandler(player->GetSession()).GetObjectFromPlayerMapByDbGuid(flag_guid);
- if (!object)
- return;
- object->SetRespawnTime(0); // not save respawn time
- object->Delete();
- object->DeleteFromDB();
- // get horde flag
- GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(FLAG_HORDE);
- if (!objectInfo)
- return;
- if (objectInfo->displayId && !sGameObjectDisplayInfoStore.LookupEntry(objectInfo->displayId))
- return;
- // prepare spawn object
- GameObject* objectFlag = new GameObject;
- Map* map = player->GetMap();
- ObjectGuid::LowType guidLow = map->GenerateLowGuid<HighGuid::GameObject>();
- Position pos(-8955.47f, 529.57f, 96.3554f, 3.75848f);
- G3D::Quat rot = G3D::Matrix3::fromEulerAnglesZYX(3.75848f, 0.f, 0.f);
- // check if can create flag
- if (!objectFlag->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), pos, rot, 0, GO_STATE_READY))
- {
- delete objectFlag;
- return;
- }
- // fill the gameobject data and save to the db
- objectFlag->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn());
- guidLow = objectFlag->GetSpawnId();
- // this will generate a new guid if the object is in an instance
- /*if (!objectFlag->LoadGameObjectFromDB(guidLow, player->GetMap()))
- {
- delete objectFlag;
- return; // skip everything
- }*/
- sObjectMgr->AddGameobjectToGrid(guidLow, sObjectMgr->GetGOData(guidLow));
- SessionMap const& smap = sWorld->GetAllSessions();
- for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
- {
- if (Player* pPlayer = iter->second->GetPlayer())
- {
- if (pPlayer->GetTeamId() == TEAM_HORDE)
- {
- ChatHandler(iter->second).PSendSysMessage(CAPTURE_IRONFORGE_HORDE_MSG, player->GetName().c_str());
- ChatHandler(iter->second).PSendSysMessage(HORDE_MSG_RATE_REWARD);
- sCityBattle->GiveRewardPlayer(pPlayer, capture_reward_mg, capture_reward_honor);
- sCityBattle->DiffRatesUpon(pPlayer, 1, false);
- }
- else // alliance
- {
- ChatHandler(iter->second).PSendSysMessage(CAPTURE_IRONFORGE_ALLY_MSG, player->GetName().c_str());
- ChatHandler(iter->second).PSendSysMessage(ALLY_MSG_RATE_LOSS);
- sCityBattle->DiffRatesUpon(pPlayer, 0, false);
- }
- pPlayer->PlayDirectSound(SOUND_PVP_FLAG_TAKEN_HORDE, pPlayer);
- }
- }
- sCityBattle->isHordeCaptured = false;
- sCityBattle->isAllianceCaptured = true;
- sCityBattle->ally_occupied_time = 0; // reset
- sCityBattle->horde_occupied_time = 0; // reset
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment