134 {
137 return false;
138
141 {
143 return false;
144 }
145
147 float const radius = radiusArg.value_or(5.0f);
148
152
154 if (radius <= 10.0f && target)
155 {
159 }
160
161 std::list<GameObject*> nearbyGOs;
165
166 int addedCount = 0;
167 int newGroupsCount = 0;
168
170 {
171 if (go->GetDistance(searchX, searchY, searchZ) > radius)
172 continue;
173
174 bool isTemplateMatch = false;
175 for (auto const& tpl : session.CurrentTemplate)
176 {
177 if (go->GetEntry() == tpl.Entry)
178 {
179 isTemplateMatch = true;
180 break;
181 }
182 }
183 if (!isTemplateMatch)
184 continue;
185
186 uint32 const spawnId = go->GetSpawnId();
187
188 bool alreadyCaptured = false;
189 for (auto const& group : session.CapturedGroups)
190 {
191 for (auto const& obj : group.FoundObjects)
192 {
193 if (obj.second == spawnId)
194 {
195 alreadyCaptured = true;
196 break;
197 }
198 }
199 if (alreadyCaptured)
200 break;
201 }
202 if (alreadyCaptured)
203 continue;
204
205
207 for (auto& group : session.CapturedGroups)
208 {
209 if (go->GetDistance(group.X, group.Y, group.Z) < 0.1f)
210 {
211 existingGroup = &group;
212 break;
213 }
214 }
215
216 if (existingGroup)
217 {
218 existingGroup->
FoundObjects.push_back({ go->GetEntry(), spawnId });
219 addedCount++;
220 }
221 else
222 {
224 newGroup.
X = go->GetPositionX();
225 newGroup.
Y = go->GetPositionY();
226 newGroup.
Z = go->GetPositionZ();
227 newGroup.
FoundObjects.push_back({ go->GetEntry(), spawnId });
228
230 newGroupsCount++;
231 addedCount++;
232 }
233 }
234
235 if (addedCount == 0)
236 {
237 handler->
SendErrorMessage(
"No new matching objects found in {}y radius.", radius);
238 return false;
239 }
240
241 handler->
PSendSysMessage(
"|cff00ff00Scan Complete.|r Added {} objects into {} new groups.", addedCount, newGroupsCount);
242
244 {
246 for (auto& p : lastGroup.FoundObjects)
247 {
249 }
250 }
251 return true;
252 }
std::uint32_t uint32
Definition Define.h:107
Definition GridNotifiers.h:1600
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:216
Player * GetPlayer() const
Definition Chat.cpp:36
GameObject * GetNearbyGameObject() const
Definition Chat.cpp:565
Definition GameObject.h:120
Definition ObjectGuid.h:118
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
Definition GridNotifiers.h:341
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165
Definition cs_pooltools.cpp:40
std::vector< std::pair< uint32, uint32 > > FoundObjects
Definition cs_pooltools.cpp:44
float Z
Definition cs_pooltools.cpp:43
float Y
Definition cs_pooltools.cpp:42
float X
Definition cs_pooltools.cpp:41
Definition cs_pooltools.cpp:48
std::vector< NodeGroup > CapturedGroups
Definition cs_pooltools.cpp:51
std::vector< PoolTemplateItem > CurrentTemplate
Definition cs_pooltools.cpp:50
float GetPositionZ() const
Definition Position.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122