void Corpse::SaveToDB() { // prevent DB data inconsistence problems and duplicates CharacterDatabase.BeginTransaction(); DeleteFromDB(); std::ostringstream ss; ss << "INSERT INTO corpse (guid,player,position_x,position_y,position_z,orientation,zone,map,data,time,corpse_type,instance,phaseMask) VALUES (" << GetGUIDLow() << ", " << GUID_LOPART(GetOwnerGUID()) << ", " << GetPositionX() << ", " << GetPositionY() << ", " << GetPositionZ() << ", " << GetOrientation() << ", " << GetZoneId() << ", " << GetMapId() << ", '"; for (uint16 i = 0; i < m_valuesCount; ++i) ss << GetUInt32Value(i) << " "; ss << "'," << uint64(m_time) <<", " << uint32(GetType()) << ", " << int(GetInstanceId()) << ", " << uint16(GetPhaseMask()) << ")"; // prevent out of range error CharacterDatabase.Execute(ss.str().c_str()); CharacterDatabase.CommitTransaction(); }
void Corpse::SaveToDB() { // bones should not be saved to DB (would be deleted on startup anyway) MANGOS_ASSERT(GetType() != CORPSE_BONES); // prevent DB data inconsistence problems and duplicates CharacterDatabase.BeginTransaction(); DeleteFromDB(); std::ostringstream ss; ss << "INSERT INTO corpse (guid,player,position_x,position_y,position_z,orientation,zone,map,data,time,corpse_type,instance) VALUES (" << GetGUIDLow() << ", " << GUID_LOPART(GetOwnerGUID()) << ", " << GetPositionX() << ", " << GetPositionY() << ", " << GetPositionZ() << ", " << GetOrientation() << ", " << GetZoneId() << ", " << GetMapId() << ", '"; for(uint16 i = 0; i < m_valuesCount; ++i) ss << GetUInt32Value(i) << " "; ss << "'," << uint64(m_time) <<", " << uint32(GetType()) << ", " << int(GetInstanceId()) << ")"; CharacterDatabase.Execute( ss.str().c_str() ); CharacterDatabase.CommitTransaction(); }
void Creature::SaveToDB() { std::stringstream ss; ss << "DELETE FROM creatures WHERE id=" << GetGUIDLow(); sDatabase.Execute(ss.str().c_str()); ss.rdbuf()->str(""); ss << "INSERT INTO creatures (id, mapId, zoneId, name_id, positionX, positionY, positionZ, orientation, data) VALUES ( " << GetGUIDLow() << ", " << GetMapId() << ", " << GetZoneId() << ", " << GetUInt32Value(OBJECT_FIELD_ENTRY) << ", " << m_positionX << ", " << m_positionY << ", " << m_positionZ << ", " << m_orientation << ", '"; for( uint16 index = 0; index < m_valuesCount; index ++ ) ss << GetUInt32Value(index) << " "; ss << "\")"; sDatabase.Execute( ss.str( ).c_str( ) ); }
void Corpse::SaveToDB() { // prevent DB data inconsistence problems and duplicates RealmDataDatabase.BeginTransaction(); DeleteFromDB(); static SqlStatementID saveCorpse; SqlStatement stmt = RealmDataDatabase.CreateStatement(saveCorpse, "INSERT INTO corpse (guid,player,position_x,position_y,position_z,orientation,zone,map,data,time,corpse_type,instance) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); stmt.addUInt64(GetGUIDLow()); stmt.addUInt64(GUID_LOPART(GetOwnerGUID())); stmt.addFloat(GetPositionX()); stmt.addFloat(GetPositionY()); stmt.addFloat(GetPositionZ()); stmt.addFloat(GetOrientation()); stmt.addUInt32(GetZoneId()); stmt.addUInt32(GetMapId()); stmt.addString(GetUInt32ValuesString()); stmt.addUInt64(m_time); stmt.addUInt32(GetType()); stmt.addInt32(GetInstanceId()); stmt.Execute(); RealmDataDatabase.CommitTransaction(); }
void Corpse::SaveToDB() { // prevent DB data inconsistence problems and duplicates SQLTransaction trans = CharacterDatabase.BeginTransaction(); DeleteFromDB(trans); std::ostringstream ss; ss << "INSERT INTO corpse (guid,player,position_x,position_y,position_z,orientation,zone,map,displayId,itemCache,bytes1,bytes2,guild,flags,dynFlags,time,corpse_type,instance,phaseMask) VALUES (" << GetGUIDLow() << ", " << GUID_LOPART(GetOwnerGUID()) << ", " << GetPositionX() << ", " << GetPositionY() << ", " << GetPositionZ() << ", " << GetOrientation() << ", " << GetZoneId() << ", " << GetMapId() << ", " << GetUInt32Value(CORPSE_FIELD_DISPLAY_ID) << ", '"; for (uint16 i = 0; i < EQUIPMENT_SLOT_END; ++i) ss << GetUInt32Value(CORPSE_FIELD_ITEM+i) << " "; ss << "', " << GetUInt32Value(CORPSE_FIELD_BYTES_1) << ", " << GetUInt32Value(CORPSE_FIELD_BYTES_2) << ", " << GetUInt32Value(CORPSE_FIELD_GUILD) << ", " << GetUInt32Value(CORPSE_FIELD_FLAGS) << ", " << GetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS) << ", " << uint64(m_time) << ", " << uint32(GetType()) << ", " << int(GetInstanceId()) << ", " << uint16(GetPhaseMask()) << ")"; // prevent out of range error trans->Append(ss.str().c_str()); CharacterDatabase.CommitTransaction(trans); }
void Battlefield::KickPlayerFromBattlefield(uint64 guid) { if (Player* player = ObjectAccessor::FindPlayer(guid)) { if (player->GetZoneId() == GetZoneId() && !player->IsGameMaster()) player->TeleportTo(KickPosition); } }
void Battlefield::KickAfkPlayers() { // xinef: optimization, dont lookup player twice for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) if (player->isAFK() && player->GetZoneId() == GetZoneId() && !player->IsGameMaster()) player->TeleportTo(KickPosition); }
///////////////// // Summoned Go's //guardians are temporary spawn that will inherit master faction and will follow them. Apart from that they have their own mind Unit* GameObject::CreateTemporaryGuardian(uint32 guardian_entry,uint32 duration,float angle, Unit* u_caster, uint8 Slot) { CreatureProto * proto = CreatureProtoStorage.LookupEntry(guardian_entry); CreatureInfo * info = CreatureNameStorage.LookupEntry(guardian_entry); if(!proto || !info) { OUT_DEBUG("Warning : Missing summon creature template %u !",guardian_entry); return NULL; } uint32 lvl = u_caster->getLevel(); LocationVector v = GetPositionNC(); float m_followAngle = angle + v.o; float x = v.x +(3*(cosf(m_followAngle))); float y = v.y +(3*(sinf(m_followAngle))); Creature* p = NULL; p = GetMapMgr()->CreateCreature(guardian_entry); if(p == NULL) return NULL; p->SetInstanceID(GetMapMgr()->GetInstanceID()); p->Load(proto, x, y, v.z, angle); if (lvl != 0) { /* power */ p->SetPowerType(POWER_TYPE_MANA); p->SetUInt32Value(UNIT_FIELD_MAXPOWER1,p->GetUInt32Value(UNIT_FIELD_MAXPOWER1)+28+10*lvl); p->SetUInt32Value(UNIT_FIELD_POWER1,p->GetUInt32Value(UNIT_FIELD_POWER1)+28+10*lvl); /* health */ p->SetUInt32Value(UNIT_FIELD_MAXHEALTH,p->GetUInt32Value(UNIT_FIELD_MAXHEALTH)+28+30*lvl); p->SetUInt32Value(UNIT_FIELD_HEALTH,p->GetUInt32Value(UNIT_FIELD_HEALTH)+28+30*lvl); /* level */ p->SetUInt32Value(UNIT_FIELD_LEVEL, lvl); } p->SetSummonedByGUID(GetGUID()); p->SetCreatedByGUID(GetGUID()); p->SetZoneId(GetZoneId()); p->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE,u_caster->GetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE)); p->_setFaction(); p->GetAIInterface()->Init(p,AITYPE_PET,MOVEMENTTYPE_NONE,u_caster); p->GetAIInterface()->SetUnitToFollow(TO_UNIT(this)); p->GetAIInterface()->SetUnitToFollowAngle(angle); p->GetAIInterface()->SetFollowDistance(3.0f); p->PushToWorld(GetMapMgr()); if(duration) sEventMgr.AddEvent(TO_UNIT(this), &Unit::SummonExpireSlot,Slot, EVENT_SUMMON_EXPIRE, duration, 1,EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT ); return p; }
void GameObject::getFishLoot(Loot *fishloot) { fishloot->clear(); uint32 subzone = GetAreaId(); // if subzone loot exist use it if(LootTemplates_Fishing.HaveLootFor(subzone)) fishloot->FillLoot(subzone, LootTemplates_Fishing, NULL); // else use zone loot else fishloot->FillLoot(GetZoneId(), LootTemplates_Fishing, NULL); }
void GameObject::getFishLoot(Loot *fishloot) { fishloot->clear(); uint32 subzone = GetAreaId(); // if subzone loot exist use it if(LootTemplates_Fishing.find(subzone) != LootTemplates_Fishing.end()) FillLoot(fishloot, subzone, LootTemplates_Fishing, NULL); // else use zone loot else FillLoot(fishloot, GetZoneId(), LootTemplates_Fishing, NULL); }
void Battlefield::KickPlayerFromBattlefield(uint64 guid) { if (Player* player = sObjectAccessor->FindPlayer(guid)) { if (player->GetZoneId() == GetZoneId()) player->TeleportTo(KickPosition); if (player->GetTeamId() >= 2) return; m_InvitedPlayers[player->GetTeamId()].erase(player->GetGUID()); m_PlayersInWar[player->GetTeamId()].erase(player->GetGUID()); } }
// Called in WorldSession::HandleBfEntryInviteResponse void Battlefield::PlayerAcceptInviteToWar(Player* player) { if (!IsWarTime()) return; if (AddOrSetPlayerToCorrectBfGroup(player)) { player->GetSession()->SendBfEntered(GetQueueId(), player->GetZoneId() != GetZoneId(), player->GetTeamId() == GetAttackerTeam()); m_PlayersInWar[player->GetTeamId()].insert(player->GetGUID()); m_InvitedPlayers[player->GetTeamId()].erase(player->GetGUID()); if (player->isAFK()) player->ToggleAFK(); OnPlayerJoinWar(player); //for scripting } }
uint32 TerrainInfo::GetZoneId(GridPair const& gridPair) const { float x = ((float)gridPair.x_coord - CENTER_GRID_ID - 0.5) * SIZE_OF_GRIDS + CENTER_GRID_OFFSET; float y = ((float)gridPair.y_coord - CENTER_GRID_ID - 0.5) * SIZE_OF_GRIDS + CENTER_GRID_OFFSET; return GetZoneId(x, y, 0.0f); }
void Player::SendInitialWorldstates(){ WorldPacket data( SMSG_INIT_WORLD_STATES, 100 ); m_mapMgr->GetWorldStatesHandler().BuildInitWorldStatesForZone( GetZoneId(), GetAreaID(), data ); m_session->SendPacket( &data ); }
void GameObject::Use(Unit* user) { // by default spell caster is user Unit* spellCaster = user; uint32 spellId = 0; switch(GetGoType()) { case GAMEOBJECT_TYPE_DOOR: //0 case GAMEOBJECT_TYPE_BUTTON: //1 //doors/buttons never really despawn, only reset to default state/flags UseDoorOrButton(); // activate script sWorld.ScriptsStart(sGameObjectScripts, GetDBTableGUIDLow(), spellCaster, this); return; case GAMEOBJECT_TYPE_QUESTGIVER: //2 { if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; player->PrepareQuestMenu( GetGUID() ); player->SendPreparedQuest( GetGUID() ); return; } //Sitting: Wooden bench, chairs enzz case GAMEOBJECT_TYPE_CHAIR: //7 { GameObjectInfo const* info = GetGOInfo(); if(!info) return; if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; // a chair may have n slots. we have to calculate their positions and teleport the player to the nearest one // check if the db is sane if(info->chair.slots > 0) { float lowestDist = DEFAULT_VISIBILITY_DISTANCE; float x_lowest = GetPositionX(); float y_lowest = GetPositionY(); // the object orientation + 1/2 pi // every slot will be on that straight line float orthogonalOrientation = GetOrientation()+M_PI*0.5f; // find nearest slot for(uint32 i=0; i<info->chair.slots; i++) { // the distance between this slot and the center of the go - imagine a 1D space float relativeDistance = (info->size*i)-(info->size*(info->chair.slots-1)/2.0f); float x_i = GetPositionX() + relativeDistance * cos(orthogonalOrientation); float y_i = GetPositionY() + relativeDistance * sin(orthogonalOrientation); // calculate the distance between the player and this slot float thisDistance = player->GetDistance2d(x_i, y_i); /* debug code. It will spawn a npc on each slot to visualize them. Creature* helper = player->SummonCreature(14496, x_i, y_i, GetPositionZ(), GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10000); std::ostringstream output; output << i << ": thisDist: " << thisDistance; helper->MonsterSay(output.str().c_str(), LANG_UNIVERSAL, 0); */ if(thisDistance <= lowestDist) { lowestDist = thisDistance; x_lowest = x_i; y_lowest = y_i; } } player->TeleportTo(GetMapId(), x_lowest, y_lowest, GetPositionZ(), GetOrientation(),TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET); } else { // fallback, will always work player->TeleportTo(GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation(),TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET); } player->SetStandState(PLAYER_STATE_SIT_LOW_CHAIR+info->chair.height); return; } //big gun, its a spell/aura case GAMEOBJECT_TYPE_GOOBER: //10 { GameObjectInfo const* info = GetGOInfo(); if(user->GetTypeId()==TYPEID_PLAYER) { Player* player = (Player*)user; // show page if(info->goober.pageId) { WorldPacket data(SMSG_GAMEOBJECT_PAGETEXT, 8); data << GetGUID(); player->GetSession()->SendPacket(&data); } // possible quest objective for active quests player->CastedCreatureOrGO(info->id, GetGUID(), 0); } // cast this spell later if provided spellId = info->goober.spellId; break; } case GAMEOBJECT_TYPE_CAMERA: //13 { GameObjectInfo const* info = GetGOInfo(); if(!info) return; if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; if(info->camera.cinematicId) { WorldPacket data(SMSG_TRIGGER_CINEMATIC, 4); data << info->camera.cinematicId; player->GetSession()->SendPacket(&data); } return; } //fishing bobber case GAMEOBJECT_TYPE_FISHINGNODE: //17 { if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; if(player->GetGUID() != GetOwnerGUID()) return; switch(getLootState()) { case GO_READY: // ready for loot { // 1) skill must be >= base_zone_skill // 2) if skill == base_zone_skill => 5% chance // 3) chance is linear dependence from (base_zone_skill-skill) uint32 subzone = GetAreaId(); int32 zone_skill = objmgr.GetFishingBaseSkillLevel( subzone ); if(!zone_skill) zone_skill = objmgr.GetFishingBaseSkillLevel( GetZoneId() ); //provide error, no fishable zone or area should be 0 if(!zone_skill) sLog.outErrorDb("Fishable areaId %u are not properly defined in `skill_fishing_base_level`.",subzone); int32 skill = player->GetSkillValue(SKILL_FISHING); int32 chance = skill - zone_skill + 5; int32 roll = irand(1,100); DEBUG_LOG("Fishing check (skill: %i zone min skill: %i chance %i roll: %i",skill,zone_skill,chance,roll); if(skill >= zone_skill && chance >= roll) { // prevent removing GO at spell cancel player->RemoveGameObject(this,false); SetOwnerGUID(player->GetGUID()); //fish catched player->UpdateFishingSkill(); GameObject* ok = LookupFishingHoleAround(DEFAULT_VISIBILITY_DISTANCE); if (ok) { player->SendLoot(ok->GetGUID(),LOOT_FISHINGHOLE); SetLootState(GO_JUST_DEACTIVATED); } else player->SendLoot(GetGUID(),LOOT_FISHING); } else { // fish escaped, can be deleted now SetLootState(GO_JUST_DEACTIVATED); WorldPacket data(SMSG_FISH_ESCAPED, 0); player->GetSession()->SendPacket(&data); } break; } case GO_JUST_DEACTIVATED: // nothing to do, will be deleted at next update break; default: { SetLootState(GO_JUST_DEACTIVATED); WorldPacket data(SMSG_FISH_NOT_HOOKED, 0); player->GetSession()->SendPacket(&data); break; } } if(player->m_currentSpells[CURRENT_CHANNELED_SPELL]) { player->m_currentSpells[CURRENT_CHANNELED_SPELL]->SendChannelUpdate(0); player->m_currentSpells[CURRENT_CHANNELED_SPELL]->finish(); } return; } case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18 { if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; Unit* caster = GetOwner(); GameObjectInfo const* info = GetGOInfo(); if( !caster || caster->GetTypeId()!=TYPEID_PLAYER ) return; // accept only use by player from same group for caster except caster itself if(((Player*)caster)==player || !((Player*)caster)->IsInSameRaidWith(player)) return; AddUniqueUse(player); // full amount unique participants including original summoner if(GetUniqueUseCount() < info->summoningRitual.reqParticipants) return; // in case summoning ritual caster is GO creator spellCaster = caster; if(!caster->m_currentSpells[CURRENT_CHANNELED_SPELL]) return; spellId = info->summoningRitual.spellId; // finish spell caster->m_currentSpells[CURRENT_CHANNELED_SPELL]->SendChannelUpdate(0); caster->m_currentSpells[CURRENT_CHANNELED_SPELL]->finish(); // can be deleted now SetLootState(GO_JUST_DEACTIVATED); // go to end function to spell casting break; } case GAMEOBJECT_TYPE_SPELLCASTER: //22 { SetUInt32Value(GAMEOBJECT_FLAGS,2); GameObjectInfo const* info = GetGOInfo(); if(!info) return; if(info->spellcaster.partyOnly) { Unit* caster = GetOwner(); if( !caster || caster->GetTypeId()!=TYPEID_PLAYER ) return; if(user->GetTypeId()!=TYPEID_PLAYER || !((Player*)user)->IsInSameRaidWith((Player*)caster)) return; } spellId = info->spellcaster.spellId; AddUse(); break; } case GAMEOBJECT_TYPE_MEETINGSTONE: //23 { GameObjectInfo const* info = GetGOInfo(); if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; Player* targetPlayer = ObjectAccessor::FindPlayer(player->GetSelection()); // accept only use by player from same group for caster except caster itself if(!targetPlayer || targetPlayer == player || !targetPlayer->IsInSameGroupWith(player)) return; //required lvl checks! uint8 level = player->getLevel(); if (level < info->meetingstone.minLevel || level > info->meetingstone.maxLevel) return; level = targetPlayer->getLevel(); if (level < info->meetingstone.minLevel || level > info->meetingstone.maxLevel) return; spellId = 23598; break; } case GAMEOBJECT_TYPE_FLAGSTAND: // 24 { if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; if( player->isAllowUseBattleGroundObject() ) { // in battleground check BattleGround *bg = player->GetBattleGround(); if(!bg) return; // BG flag click // AB: // 15001 // 15002 // 15003 // 15004 // 15005 bg->EventPlayerClickedOnFlag(player, this); return; //we don;t need to delete flag ... it is despawned! } break; } case GAMEOBJECT_TYPE_FLAGDROP: // 26 { if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; if( player->isAllowUseBattleGroundObject() ) { // in battleground check BattleGround *bg = player->GetBattleGround(); if(!bg) return; // BG flag dropped // WS: // 179785 - Silverwing Flag // 179786 - Warsong Flag // EotS: // 184142 - Netherstorm Flag GameObjectInfo const* info = GetGOInfo(); if(info) { switch(info->id) { case 179785: // Silverwing Flag // check if it's correct bg if(bg->GetTypeID() == BATTLEGROUND_WS) bg->EventPlayerClickedOnFlag(player, this); break; case 179786: // Warsong Flag if(bg->GetTypeID() == BATTLEGROUND_WS) bg->EventPlayerClickedOnFlag(player, this); break; case 184142: // Netherstorm Flag if(bg->GetTypeID() == BATTLEGROUND_EY) bg->EventPlayerClickedOnFlag(player, this); break; } } //this cause to call return, all flags must be deleted here!! spellId = 0; Delete(); } break; } case GAMEOBJECT_TYPE_BARBER_CHAIR: //32 { GameObjectInfo const* info = GetGOInfo(); if(!info) return; if(user->GetTypeId()!=TYPEID_PLAYER) return; Player* player = (Player*)user; // fallback, will always work player->TeleportTo(GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation(),TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET); WorldPacket data(SMSG_ENABLE_BARBER_SHOP, 0); player->GetSession()->SendPacket(&data); player->SetStandState(PLAYER_STATE_SIT_LOW_CHAIR+info->barberChair.chairheight); return; } default: sLog.outDebug("Unknown Object Type %u", GetGoType()); break; } if(!spellId) return; SpellEntry const *spellInfo = sSpellStore.LookupEntry( spellId ); if(!spellInfo) { sLog.outError("WORLD: unknown spell id %u at use action for gameobject (Entry: %u GoType: %u )", spellId,GetEntry(),GetGoType()); return; } Spell *spell = new Spell(spellCaster, spellInfo, false); // spell target is user of GO SpellCastTargets targets; targets.setUnitTarget( user ); spell->prepare(&targets); }
void Creature::OnGossipSelect(Player* player, uint32 option) { GossipMenu* gossipmenu = player->PlayerTalkClass->GetGossipMenu(); uint32 action=gossipmenu->GetItem(option).m_gAction; uint32 zoneid=GetZoneId(); uint64 guid=GetGUID(); GossipOption const *gossip=GetGossipOption( action ); uint32 textid; if(!gossip) { zoneid=0; gossip=GetGossipOption( action ); if(!gossip) return; } textid=GetGossipTextId( action, zoneid); if(textid==0) textid=GetNpcTextId(); switch (gossip->Action) { case GOSSIP_OPTION_GOSSIP: player->PlayerTalkClass->SendTalking( textid ); break; case GOSSIP_OPTION_SPIRITHEALER: if( player->isDead() ) player->GetSession()->SendSpiritResurrect(); break; case GOSSIP_OPTION_QUESTGIVER: player->PrepareQuestMenu( guid ); player->SendPreparedQuest( guid ); break; case GOSSIP_OPTION_VENDOR: case GOSSIP_OPTION_ARMORER: player->GetSession()->SendListInventory(guid); break; case GOSSIP_OPTION_STABLEPET: player->GetSession()->SendStablePet(guid); break; case GOSSIP_OPTION_TRAINER: player->GetSession()->SendTrainerList(guid); break; case GOSSIP_OPTION_UNLEARNTALENTS: player->PlayerTalkClass->CloseGossip(); player->SendTalentWipeConfirm(guid); break; case GOSSIP_OPTION_TAXIVENDOR: player->GetSession()->SendTaxiMenu(guid); break; case GOSSIP_OPTION_INNKEEPER: player->PlayerTalkClass->CloseGossip(); player->SetBindPoint( guid ); break; case GOSSIP_OPTION_BANKER: player->GetSession()->SendShowBank( guid ); break; case GOSSIP_OPTION_PETITIONER: case GOSSIP_OPTION_TABARDVENDOR: player->GetSession()->SendTabardVendorActivate( guid ); break; case GOSSIP_OPTION_AUCTIONEER: player->GetSession()->SendAuctionHello( guid, this ); break; case GOSSIP_OPTION_GUARD: case GOSSIP_GUARD_SPELLTRAINER: case GOSSIP_GUARD_SKILLTRAINER: prepareGossipMenu( player,gossip->Id ); sendPreparedGossip( player ); break; default: OnPoiSelect( player, gossip ); break; } }
// Called when a player leave the zone void Battlefield::HandlePlayerLeaveZone(Player* player, uint32 /*zone*/) { if (IsWarTime()) { // If the player is participating to the battle if (m_PlayersInWar[player->GetTeamId()].find(player->GetGUID()) != m_PlayersInWar[player->GetTeamId()].end()) { m_PlayersInWar[player->GetTeamId()].erase(player->GetGUID()); player->GetSession()->SendBfLeaveMessage(GetQueueId(), GetState(), player->GetZoneId() == GetZoneId()); if (Group* group = player->GetGroup()) // Remove the player from the raid group group->RemoveMember(player->GetGUID()); OnPlayerLeaveWar(player); } } for (BfCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) itr->second->HandlePlayerLeave(player); m_InvitedPlayers[player->GetTeamId()].erase(player->GetGUID()); m_PlayersWillBeKick[player->GetTeamId()].erase(player->GetGUID()); m_players[player->GetTeamId()].erase(player->GetGUID()); SendRemoveWorldStates(player); RemovePlayerFromResurrectQueue(player->GetGUID()); OnPlayerLeaveZone(player); }
void Corpse::SaveToDB() { //save corpse to DB std::stringstream ss; ss << "DELETE FROM corpses WHERE guid = " << GetLowGUID(); CharacterDatabase.Execute(ss.str().c_str()); ss.rdbuf()->str(""); ss << "INSERT INTO corpses (guid, positionX, positionY, positionZ, orientation, zoneId, mapId, data, instanceId) VALUES (" << GetLowGUID() << ", '" << GetPositionX() << "', '" << GetPositionY() << "', '" << GetPositionZ() << "', '" << GetOrientation() << "', '" << GetZoneId() << "', '" << GetMapId() << "', '"; for (uint16 i = 0; i < m_valuesCount; i++) ss << GetUInt32Value(i) << " "; ss << "', " << GetInstanceID() << " )"; CharacterDatabase.Execute(ss.str().c_str()); }
uint32 TerrainInfo::GetZoneId(Cell const& cell) const { return GetZoneId(cell.gridPair()); }
void Battlefield::KickPlayerFromBattlefield(ObjectGuid guid) { if (Player* player = ObjectAccessor::FindPlayer(guid)) if (player->GetZoneId() == GetZoneId()) player->TeleportTo(KickPosition); }
void GameObject::getFishLoot(Loot *fishloot) { uint32 zone = GetZoneId(); FillLoot(fishloot, zone, LootTemplates_Fishing); }