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