AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
wp_commandscript Class Reference
Inheritance diagram for wp_commandscript:
CommandScript ScriptObject

Public Member Functions

 wp_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static bool HandleWpAddCommand (ChatHandler *handler, const char *args)
 
static bool HandleWpLoadCommand (ChatHandler *handler, const char *args)
 
static bool HandleWpReloadCommand (ChatHandler *handler, const char *args)
 
static bool HandleWpUnLoadCommand (ChatHandler *handler, const char *)
 
static bool HandleWpEventCommand (ChatHandler *handler, const char *args)
 
static bool HandleWpModifyCommand (ChatHandler *handler, const char *args)
 
static bool HandleWpShowCommand (ChatHandler *handler, const char *args)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ wp_commandscript()

wp_commandscript::wp_commandscript ( )
inline
32: CommandScript("wp_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable wp_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

35 {
36 static ChatCommandTable wpCommandTable =
37 {
38 { "add", HandleWpAddCommand, SEC_ADMINISTRATOR, Console::No },
39 { "event", HandleWpEventCommand, SEC_ADMINISTRATOR, Console::No },
40 { "load", HandleWpLoadCommand, SEC_ADMINISTRATOR, Console::No },
41 { "modify", HandleWpModifyCommand, SEC_ADMINISTRATOR, Console::No },
42 { "unload", HandleWpUnLoadCommand, SEC_ADMINISTRATOR, Console::No },
43 { "reload", HandleWpReloadCommand, SEC_ADMINISTRATOR, Console::No },
44 { "show", HandleWpShowCommand, SEC_ADMINISTRATOR, Console::No }
45 };
46 static ChatCommandTable commandTable =
47 {
48 { "wp", wpCommandTable }
49 };
50 return commandTable;
51 }
@ SEC_ADMINISTRATOR
Definition Common.h:60
static bool HandleWpEventCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:271
static bool HandleWpLoadCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:136
static bool HandleWpReloadCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:215
static bool HandleWpModifyCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:543
static bool HandleWpUnLoadCommand(ChatHandler *handler, const char *)
Definition cs_wp.cpp:230
static bool HandleWpShowCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:739
static bool HandleWpAddCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:73
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46

References HandleWpAddCommand(), HandleWpEventCommand(), HandleWpLoadCommand(), HandleWpModifyCommand(), HandleWpReloadCommand(), HandleWpShowCommand(), HandleWpUnLoadCommand(), and SEC_ADMINISTRATOR.

◆ HandleWpAddCommand()

static bool wp_commandscript::HandleWpAddCommand ( ChatHandler handler,
const char *  args 
)
inlinestatic

Add a waypoint to a creature.

The user can either select an npc or provide its GUID.

The user can even select a visual waypoint - then the new waypoint is placed after the selected one - this makes insertion of new waypoints possible.

eg: .wp add 12345 -> adds a waypoint to the npc with the GUID 12345

.wp add -> adds a waypoint to the currently selected creature

Parameters
argsif the user did not provide a GUID, it is nullptr
Returns
true - command did succeed, false - something went wrong
74 {
75 // optional
76 char* path_number = nullptr;
77 uint32 pathid = 0;
78
79 if (*args)
80 path_number = strtok((char*)args, " ");
81
82 uint32 point = 0;
83 Creature* target = handler->getSelectedCreature();
84
85 if (!path_number)
86 {
87 if (target)
88 pathid = target->GetWaypointPath();
89 else
90 {
92
93 PreparedQueryResult result = WorldDatabase.Query(stmt);
94
95 uint32 maxpathid = result->Fetch()->Get<int32>();
96 pathid = maxpathid + 1;
97 handler->PSendSysMessage("{}{}|r", "|cff00ff00", "New path started.");
98 }
99 }
100 else
101 pathid = atoi(path_number);
102
103 // path_id -> ID of the Path
104 // point -> number of the waypoint (if not 0)
105
106 if (!pathid)
107 {
108 handler->PSendSysMessage("{}{}|r", "|cffff33ff", "Current creature haven't loaded path.");
109 return true;
110 }
111
113 stmt->SetData(0, pathid);
114 PreparedQueryResult result = WorldDatabase.Query(stmt);
115
116 if (result)
117 point = (*result)[0].Get<uint32>();
118
119 Player* player = handler->GetSession()->GetPlayer();
120 //Map* map = player->GetMap();
121
122 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_DATA);
123
124 stmt->SetData(0, pathid);
125 stmt->SetData(1, point + 1);
126 stmt->SetData(2, player->GetPositionX());
127 stmt->SetData(3, player->GetPositionY());
128 stmt->SetData(4, player->GetPositionZ());
129
130 WorldDatabase.Execute(stmt);
131
132 handler->PSendSysMessage("{}{}{}{}{}{}|r", "|cff00ff00", "PathID: |r|cff00ffff", pathid, "|r|cff00ff00: Waypoint |r|cff00ffff", point + 1, "|r|cff00ff00 created. ");
133 return true;
134 } // HandleWpAddCommand
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
std::int32_t int32
Definition Define.h:103
std::uint32_t uint32
Definition Define.h:107
@ WORLD_INS_WAYPOINT_DATA
Definition WorldDatabase.h:53
@ WORLD_SEL_WAYPOINT_DATA_MAX_ID
Definition WorldDatabase.h:59
@ WORLD_SEL_WAYPOINT_DATA_MAX_POINT
Definition WorldDatabase.h:66
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
WorldSession * GetSession()
Definition Chat.h:242
Creature * getSelectedCreature() const
Definition Chat.cpp:410
Definition Creature.h:43
uint32 GetWaypointPath() const
Definition Creature.h:350
Definition Player.h:1082
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
Player * GetPlayer() const
Definition WorldSession.h:376

References WorldSession::GetPlayer(), ChatHandler::getSelectedCreature(), ChatHandler::GetSession(), Creature::GetWaypointPath(), ChatHandler::PSendSysMessage(), PreparedStatementBase::SetData(), WORLD_INS_WAYPOINT_DATA, WORLD_SEL_WAYPOINT_DATA_MAX_ID, WORLD_SEL_WAYPOINT_DATA_MAX_POINT, and WorldDatabase.

Referenced by GetCommands().

◆ HandleWpEventCommand()

static bool wp_commandscript::HandleWpEventCommand ( ChatHandler handler,
const char *  args 
)
inlinestatic
272 {
273 if (!*args)
274 return false;
275
276 char* show_str = strtok((char*)args, " ");
277 std::string show = show_str;
278
279 // Check
280 if ((show != "add") && (show != "mod") && (show != "del") && (show != "listid"))
281 return false;
282
283 char* arg_id = strtok(nullptr, " ");
284 uint32 id = 0;
285
286 if (show == "add")
287 {
288 if (arg_id)
289 id = atoi(arg_id);
290
291 if (id)
292 {
294 stmt->SetData(0, id);
295 PreparedQueryResult result = WorldDatabase.Query(stmt);
296
297 if (!result)
298 {
300
301 stmt->SetData(0, id);
302
303 WorldDatabase.Execute(stmt);
304
305 handler->PSendSysMessage("{}{}{}|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id);
306 }
307 else
308 handler->PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: {}|r", id);
309 }
310 else
311 {
313
314 PreparedQueryResult result = WorldDatabase.Query(stmt);
315
316 id = result->Fetch()->Get<uint32>();
317
318 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
319
320 stmt->SetData(0, id + 1);
321
322 WorldDatabase.Execute(stmt);
323
324 handler->PSendSysMessage("{}{}{}|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", id + 1);
325 }
326
327 return true;
328 }
329
330 if (show == "listid")
331 {
332 if (!arg_id)
333 {
334 handler->PSendSysMessage("{}{}|r", "|cff33ffff", "Wp Event: You must provide waypoint script id.");
335 return true;
336 }
337
338 id = atoi(arg_id);
339
340 uint32 a2, a3, a4, a5, a6;
341 float a8, a9, a10, a11;
342 char const* a7;
343
345 stmt->SetData(0, id);
346 PreparedQueryResult result = WorldDatabase.Query(stmt);
347
348 if (!result)
349 {
350 handler->PSendSysMessage("{}{}{}|r", "|cff33ffff", "Wp Event: No waypoint scripts found on id: ", id);
351 return true;
352 }
353
354 Field* fields;
355
356 do
357 {
358 fields = result->Fetch();
359 a2 = fields[0].Get<uint32>();
360 a3 = fields[1].Get<uint32>();
361 a4 = fields[2].Get<uint32>();
362 a5 = fields[3].Get<uint32>();
363 a6 = fields[4].Get<uint32>();
364 a7 = fields[5].Get<std::string>().c_str();
365 a8 = fields[6].Get<float>();
366 a9 = fields[7].Get<float>();
367 a10 = fields[8].Get<float>();
368 a11 = fields[9].Get<float>();
369
370 handler->PSendSysMessage("|cffff33ffid:|r|cff00ffff {}|r|cff00ff00, guid: |r|cff00ffff{}|r|cff00ff00, delay: |r|cff00ffff{}|r|cff00ff00, command: |r|cff00ffff{}|r|cff00ff00, datalong: |r|cff00ffff{}|r|cff00ff00, datalong2: |r|cff00ffff{}|r|cff00ff00, datatext: |r|cff00ffff{}|r|cff00ff00, posx: |r|cff00ffff{}|r|cff00ff00, posy: |r|cff00ffff{}|r|cff00ff00, posz: |r|cff00ffff{}|r|cff00ff00, orientation: |r|cff00ffff{}|r", id, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
371 } while (result->NextRow());
372 }
373
374 if (show == "del")
375 {
376 if (!arg_id)
377 {
378 handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
379 return true;
380 }
381
382 id = atoi(arg_id);
383
385
386 stmt->SetData(0, id);
387
388 PreparedQueryResult result = WorldDatabase.Query(stmt);
389
390 if (result)
391 {
393
394 stmt->SetData(0, id);
395
396 WorldDatabase.Execute(stmt);
397
398 handler->PSendSysMessage("{}{}{}|r", "|cff00ff00", "Wp Event: Waypoint script removed: ", id);
399 }
400 else
401 handler->PSendSysMessage("|cffff33ffWp Event: ERROR: you have selected a non existing script: {}|r", id);
402
403 return true;
404 }
405
406 if (show == "mod")
407 {
408 if (!arg_id)
409 {
410 handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
411 return true;
412 }
413
414 id = atoi(arg_id);
415
416 if (!id)
417 {
418 handler->SendSysMessage("|cffff33ffERROR: No vallid waypoint script id not present.|r");
419 return true;
420 }
421
422 char* arg_2 = strtok(nullptr, " ");
423
424 if (!arg_2)
425 {
426 handler->SendSysMessage("|cffff33ffERROR: No argument present.|r");
427 return true;
428 }
429
430 std::string arg_string = arg_2;
431
432 if ((arg_string != "setid") && (arg_string != "delay") && (arg_string != "command")
433 && (arg_string != "datalong") && (arg_string != "datalong2") && (arg_string != "dataint") && (arg_string != "posx")
434 && (arg_string != "posy") && (arg_string != "posz") && (arg_string != "orientation"))
435 {
436 handler->SendSysMessage("|cffff33ffERROR: No valid argument present.|r");
437 return true;
438 }
439
440 char* arg_3;
441 std::string arg_str_2 = arg_2;
442 arg_3 = strtok(nullptr, " ");
443
444 if (!arg_3)
445 {
446 handler->SendSysMessage("|cffff33ffERROR: No additional argument present.|r");
447 return true;
448 }
449
450 if (arg_str_2 == "setid")
451 {
452 uint32 newid = atoi(arg_3);
453 handler->PSendSysMessage("{}{}|r|cff00ffff{}|r|cff00ff00{}|r|cff00ffff{}|r", "|cff00ff00", "Wp Event: Wypoint scipt guid: ", newid, " id changed: ", id);
454
456
457 stmt->SetData(0, newid);
458 stmt->SetData(1, id);
459
460 WorldDatabase.Execute(stmt);
461
462 return true;
463 }
464 else
465 {
467 stmt->SetData(0, id);
468 PreparedQueryResult result = WorldDatabase.Query(stmt);
469
470 if (!result)
471 {
472 handler->SendSysMessage("|cffff33ffERROR: You have selected an non existing waypoint script guid.|r");
473 return true;
474 }
475
476 if (arg_str_2 == "posx")
477 {
479
480 stmt->SetData(0, float(atof(arg_3)));
481 stmt->SetData(1, id);
482
483 WorldDatabase.Execute(stmt);
484
485 handler->PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff {}|r|cff00ff00 position_x updated.|r", id);
486 return true;
487 }
488 else if (arg_str_2 == "posy")
489 {
491
492 stmt->SetData(0, float(atof(arg_3)));
493 stmt->SetData(1, id);
494
495 WorldDatabase.Execute(stmt);
496
497 handler->PSendSysMessage("|cff00ff00Waypoint script: {} position_y updated.|r", id);
498 return true;
499 }
500 else if (arg_str_2 == "posz")
501 {
503
504 stmt->SetData(0, float(atof(arg_3)));
505 stmt->SetData(1, id);
506
507 WorldDatabase.Execute(stmt);
508
509 handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff{}|r|cff00ff00 position_z updated.|r", id);
510 return true;
511 }
512 else if (arg_str_2 == "orientation")
513 {
515
516 stmt->SetData(0, float(atof(arg_3)));
517 stmt->SetData(1, id);
518
519 WorldDatabase.Execute(stmt);
520
521 handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff{}|r|cff00ff00 orientation updated.|r", id);
522 return true;
523 }
524 else if (arg_str_2 == "dataint")
525 {
526 WorldDatabase.Execute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, atoi(arg_3), id); // Query can't be a prepared statement
527
528 handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff{}|r|cff00ff00 dataint updated.|r", id);
529 return true;
530 }
531 else
532 {
533 std::string arg_str_3 = arg_3;
534 WorldDatabase.EscapeString(arg_str_3);
535 WorldDatabase.Execute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, arg_str_3, id); // Query can't be a prepared statement
536 }
537 }
538 handler->PSendSysMessage("{}{}|r|cff00ffff{}:|r|cff00ff00 {} {}|r", "|cff00ff00", "Waypoint script:", id, arg_2, "updated.");
539 }
540 return true;
541 }
@ WORLD_UPD_WAYPOINT_SCRIPT_O
Definition WorldDatabase.h:81
@ WORLD_UPD_WAYPOINT_SCRIPT_Z
Definition WorldDatabase.h:80
@ WORLD_UPD_WAYPOINT_SCRIPT_X
Definition WorldDatabase.h:78
@ WORLD_INS_WAYPOINT_SCRIPT
Definition WorldDatabase.h:75
@ WORLD_DEL_WAYPOINT_SCRIPT
Definition WorldDatabase.h:76
@ WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID
Definition WorldDatabase.h:70
@ WORLD_SEL_WAYPOINT_SCRIPT_BY_ID
Definition WorldDatabase.h:86
@ WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID
Definition WorldDatabase.h:82
@ WORLD_UPD_WAYPOINT_SCRIPT_Y
Definition WorldDatabase.h:79
@ WORLD_UPD_WAYPOINT_SCRIPT_ID
Definition WorldDatabase.h:77
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:160
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112

References Field::Get(), ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), WORLD_DEL_WAYPOINT_SCRIPT, WORLD_INS_WAYPOINT_SCRIPT, WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID, WORLD_UPD_WAYPOINT_SCRIPT_ID, WORLD_UPD_WAYPOINT_SCRIPT_O, WORLD_UPD_WAYPOINT_SCRIPT_X, WORLD_UPD_WAYPOINT_SCRIPT_Y, WORLD_UPD_WAYPOINT_SCRIPT_Z, and WorldDatabase.

Referenced by GetCommands().

◆ HandleWpLoadCommand()

static bool wp_commandscript::HandleWpLoadCommand ( ChatHandler handler,
const char *  args 
)
inlinestatic
137 {
138 if (!*args)
139 return false;
140
141 // optional
142 char* path_number = nullptr;
143
144 if (*args)
145 path_number = strtok((char*)args, " ");
146
147 uint32 pathid = 0;
148 ObjectGuid::LowType guidLow = 0;
149 Creature* target = handler->getSelectedCreature();
150
151 // Did player provide a path_id?
152 if (!path_number)
153 return false;
154
155 if (!target)
156 {
158 return false;
159 }
160
161 if (target->GetEntry() == 1)
162 {
163 handler->SendErrorMessage("{}{}|r", "|cffff33ff", "You want to load path to a waypoint? Aren't you?");
164 return false;
165 }
166
167 pathid = atoi(path_number);
168
169 if (!pathid)
170 {
171 handler->PSendSysMessage("{}{}|r", "|cffff33ff", "No valid path number provided.");
172 return true;
173 }
174
175 guidLow = target->GetSpawnId();
176
178
179 stmt->SetData(0, guidLow);
180
181 PreparedQueryResult result = WorldDatabase.Query(stmt);
182
183 if (result)
184 {
185 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_ADDON_PATH);
186
187 stmt->SetData(0, pathid);
188 stmt->SetData(1, guidLow);
189 }
190 else
191 {
192 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_ADDON);
193
194 stmt->SetData(0, guidLow);
195 stmt->SetData(1, pathid);
196 }
197
198 WorldDatabase.Execute(stmt);
199
200 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
201
203 stmt->SetData(1, guidLow);
204
205 WorldDatabase.Execute(stmt);
206
207 target->LoadPath(pathid);
209 target->GetMotionMaster()->Initialize();
210 target->Say("Path loaded.", LANG_UNIVERSAL);
211
212 return true;
213 }
std::uint8_t uint8
Definition Define.h:109
@ LANG_SELECT_CREATURE
Definition Language.h:32
@ WAYPOINT_MOTION_TYPE
Definition MotionMaster.h:41
@ LANG_UNIVERSAL
Definition SharedDefines.h:735
@ WORLD_INS_CREATURE_ADDON
Definition WorldDatabase.h:72
@ WORLD_SEL_CREATURE_ADDON_BY_GUID
Definition WorldDatabase.h:74
@ WORLD_UPD_CREATURE_MOVEMENT_TYPE
Definition WorldDatabase.h:46
@ WORLD_UPD_CREATURE_ADDON_PATH
Definition WorldDatabase.h:71
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:216
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:65
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition Creature.h:87
void LoadPath(uint32 pathid)
Definition Creature.h:351
void Initialize()
Definition MotionMaster.cpp:73
uint32 LowType
Definition ObjectGuid.h:122
uint32 GetEntry() const
Definition Object.h:116
virtual void Say(std::string_view text, Language language, WorldObject const *target=nullptr)
Definition Unit.cpp:20953
MotionMaster * GetMotionMaster()
Definition Unit.h:1664

References Object::GetEntry(), Unit::GetMotionMaster(), ChatHandler::getSelectedCreature(), Creature::GetSpawnId(), MotionMaster::Initialize(), LANG_SELECT_CREATURE, LANG_UNIVERSAL, Creature::LoadPath(), ChatHandler::PSendSysMessage(), Unit::Say(), ChatHandler::SendErrorMessage(), PreparedStatementBase::SetData(), Creature::SetDefaultMovementType(), WAYPOINT_MOTION_TYPE, WORLD_INS_CREATURE_ADDON, WORLD_SEL_CREATURE_ADDON_BY_GUID, WORLD_UPD_CREATURE_ADDON_PATH, WORLD_UPD_CREATURE_MOVEMENT_TYPE, and WorldDatabase.

Referenced by GetCommands().

◆ HandleWpModifyCommand()

static bool wp_commandscript::HandleWpModifyCommand ( ChatHandler handler,
const char *  args 
)
inlinestatic
544 {
545 if (!*args)
546 return false;
547
548 // first arg: add del text emote spell waittime move
549 char* show_str = strtok((char*)args, " ");
550 if (!show_str)
551 {
552 return false;
553 }
554
555 std::string show = show_str;
556 // Check
557 // Remember: "show" must also be the name of a column!
558 if ((show != "delay") && (show != "action") && (show != "action_chance")
559 && (show != "move_type") && (show != "del") && (show != "move") && (show != "wpadd")
560 )
561 {
562 return false;
563 }
564
565 // Next arg is: <PATHID> <WPNUM> <ARGUMENT>
566 char* arg_str = nullptr;
567
568 // Did user provide a GUID
569 // or did the user select a creature?
570 // -> variable lowguid is filled with the GUID of the NPC
571 uint32 pathid = 0;
572 uint32 point = 0;
573 Creature* target = handler->getSelectedCreature();
574
575 if (!target || target->GetEntry() != VISUAL_WAYPOINT)
576 {
577 handler->SendSysMessage("|cffff33ffERROR: You must select a waypoint.|r");
578 return false;
579 }
580
581 // The visual waypoint
582 ObjectGuid::LowType wpSpawnId = target->GetSpawnId();
583
584 // User did select a visual waypoint?
585
586 // Check the creature
588 stmt->SetData(0, wpSpawnId);
589 PreparedQueryResult result = WorldDatabase.Query(stmt);
590
591 if (!result)
592 {
594 // Select waypoint number from database
595 // Since we compare float values, we have to deal with
596 // some difficulties.
597 // Here we search for all waypoints that only differ in one from 1 thousand
598 // (0.001) - There is no other way to compare C++ floats with mySQL floats
599 // See also: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
600 std::string maxDiff = "0.01";
601
603 stmt->SetData(0, target->GetPositionX());
604 stmt->SetData(1, maxDiff);
605 stmt->SetData(2, target->GetPositionY());
606 stmt->SetData(3, maxDiff);
607 stmt->SetData(4, target->GetPositionZ());
608 stmt->SetData(5, maxDiff);
609 PreparedQueryResult result = WorldDatabase.Query(stmt);
610
611 if (!result)
612 {
614 return true;
615 }
616 }
617
618 do
619 {
620 Field* fields = result->Fetch();
621 pathid = fields[0].Get<uint32>();
622 point = fields[1].Get<uint32>();
623 } while (result->NextRow());
624
625 // We have the waypoint number and the GUID of the "master npc"
626 // Text is enclosed in "<>", all other arguments not
627 arg_str = strtok((char*)nullptr, " ");
628
629 // Check for argument
630 if (show != "del" && show != "move" && arg_str == nullptr)
631 {
632 handler->PSendSysMessage(LANG_WAYPOINT_ARGUMENTREQ, show_str);
633 return false;
634 }
635
636 if (show == "del")
637 {
638 handler->PSendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff{}|r", pathid);
639
640 if (wpSpawnId != 0)
641 if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(target->GetGUID()))
642 {
643 wpCreature->CombatStop();
644 wpCreature->DeleteFromDB();
645 wpCreature->AddObjectToRemoveList();
646 }
647
649 stmt->SetData(0, pathid);
650 stmt->SetData(1, point);
651
652 WorldDatabase.Execute(stmt);
653
654 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT);
655 stmt->SetData(0, pathid);
656 stmt->SetData(1, point);
657
658 WorldDatabase.Execute(stmt);
659
661 return true;
662 } // del
663
664 if (show == "move")
665 {
666 handler->PSendSysMessage("|cff00ff00DEBUG: wp move, PathID: |r|cff00ffff{}|r", pathid);
667
668 Player* chr = handler->GetSession()->GetPlayer();
669 Map* map = chr->GetMap();
670 {
671 // What to do:
672 // Move the visual spawnpoint
673 // Respawn the owner of the waypoints
674 if (wpSpawnId != 0)
675 {
676 if (Creature* wpCreature = map->GetCreature(target->GetGUID()))
677 {
678 wpCreature->CombatStop();
679 wpCreature->DeleteFromDB();
680 wpCreature->AddObjectToRemoveList();
681 }
682 // re-create
683 Creature* wpCreature2 = new Creature;
684 if (!wpCreature2->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, 0, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
685 {
687 delete wpCreature2;
688 wpCreature2 = nullptr;
689 return false;
690 }
691
692 wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
693 // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
694 //TODO: Should we first use "Create" then use "LoadFromDB"?
695 if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetSpawnId(), map, true, true))
696 {
698 delete wpCreature2;
699 wpCreature2 = nullptr;
700 return false;
701 }
702 //sMapMgr->GetMap(npcCreature->GetMapId())->Add(wpCreature2);
703 }
704
706
707 stmt->SetData(0, chr->GetPositionX());
708 stmt->SetData(1, chr->GetPositionY());
709 stmt->SetData(2, chr->GetPositionZ());
710 stmt->SetData(3, pathid);
711 stmt->SetData(4, point);
712
713 WorldDatabase.Execute(stmt);
714
716 }
717 return true;
718 } // move
719
720 const char* text = arg_str;
721
722 if (text == 0)
723 {
724 // show_str check for present in list of correct values, no sql injection possible
725 WorldDatabase.Execute("UPDATE waypoint_data SET {}=nullptr WHERE id='{}' AND point='{}'", show_str, pathid, point); // Query can't be a prepared statement
726 }
727 else
728 {
729 // show_str check for present in list of correct values, no sql injection possible
730 std::string text2 = text;
731 WorldDatabase.EscapeString(text2);
732 WorldDatabase.Execute("UPDATE waypoint_data SET {}='{}' WHERE id='{}' AND point='{}'", show_str, text2, pathid, point); // Query can't be a prepared statement
733 }
734
735 handler->PSendSysMessage(LANG_WAYPOINT_CHANGED_NO, show_str);
736 return true;
737 }
@ LANG_WAYPOINT_REMOVED
Definition Language.h:283
@ LANG_WAYPOINT_CHANGED
Definition Language.h:278
@ LANG_WAYPOINT_CHANGED_NO
Definition Language.h:279
@ LANG_WAYPOINT_ARGUMENTREQ
Definition Language.h:275
@ LANG_WAYPOINT_VP_NOTCREATED
Definition Language.h:270
@ LANG_WAYPOINT_NOTFOUNDDBPROBLEM
Definition Language.h:265
@ LANG_WAYPOINT_NOTFOUNDSEARCH
Definition Language.h:264
#define VISUAL_WAYPOINT
Definition MotionMaster.h:34
@ WORLD_SEL_WAYPOINT_DATA_BY_WPGUID
Definition WorldDatabase.h:64
@ WORLD_DEL_WAYPOINT_DATA
Definition WorldDatabase.h:54
@ WORLD_UPD_WAYPOINT_DATA_POINT
Definition WorldDatabase.h:55
@ WORLD_UPD_WAYPOINT_DATA_POSITION
Definition WorldDatabase.h:56
@ WORLD_SEL_WAYPOINT_DATA_BY_POS
Definition WorldDatabase.h:67
bool LoadCreatureFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true, bool allowDuplicate=false)
Definition Creature.cpp:1698
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehId, float x, float y, float z, float ang, const CreatureData *data=nullptr)
Definition Creature.cpp:1131
void SaveToDB()
Definition Creature.cpp:1399
Definition Map.h:156
void AddObjectToRemoveList(WorldObject *obj)
Definition Map.cpp:1833
uint8 GetSpawnMode() const
Definition Map.h:267
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:487
Creature * GetCreature(ObjectGuid const guid)
Definition Map.cpp:2498
uint32 GetId() const
Definition Map.h:229
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
uint32 GetPhaseMaskForSpawn() const
Definition Player.cpp:13713
Map * GetMap() const
Definition Object.h:537
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References Map::AddObjectToRemoveList(), Creature::Create(), Map::GenerateLowGuid(), Field::Get(), Map::GetCreature(), Object::GetEntry(), Object::GetGUID(), Map::GetId(), WorldObject::GetMap(), Position::GetOrientation(), Player::GetPhaseMaskForSpawn(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::getSelectedCreature(), ChatHandler::GetSession(), Creature::GetSpawnId(), Map::GetSpawnMode(), LANG_WAYPOINT_ARGUMENTREQ, LANG_WAYPOINT_CHANGED, LANG_WAYPOINT_CHANGED_NO, LANG_WAYPOINT_NOTFOUNDDBPROBLEM, LANG_WAYPOINT_NOTFOUNDSEARCH, LANG_WAYPOINT_REMOVED, LANG_WAYPOINT_VP_NOTCREATED, Creature::LoadCreatureFromDB(), ChatHandler::PSendSysMessage(), Creature::SaveToDB(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), Unit, VISUAL_WAYPOINT, WORLD_DEL_WAYPOINT_DATA, WORLD_SEL_WAYPOINT_DATA_BY_POS, WORLD_SEL_WAYPOINT_DATA_BY_WPGUID, WORLD_UPD_WAYPOINT_DATA_POINT, WORLD_UPD_WAYPOINT_DATA_POSITION, and WorldDatabase.

Referenced by GetCommands().

◆ HandleWpReloadCommand()

static bool wp_commandscript::HandleWpReloadCommand ( ChatHandler handler,
const char *  args 
)
inlinestatic
216 {
217 if (!*args)
218 return false;
219
220 uint32 id = atoi(args);
221
222 if (!id)
223 return false;
224
225 handler->PSendSysMessage("{}{}|r|cff00ffff{}|r", "|cff00ff00", "Loading Path: ", id);
226 sWaypointMgr->ReloadPath(id);
227 return true;
228 }
#define sWaypointMgr
Definition WaypointMgr.h:78

References ChatHandler::PSendSysMessage(), and sWaypointMgr.

Referenced by GetCommands().

◆ HandleWpShowCommand()

static bool wp_commandscript::HandleWpShowCommand ( ChatHandler handler,
const char *  args 
)
inlinestatic
740 {
741 if (!*args)
742 return false;
743
744 // first arg: on, off, first, last
745 char* show_str = strtok((char*)args, " ");
746 if (!show_str)
747 return false;
748
749 // second arg: GUID (optional, if a creature is selected)
750 char* guid_str = strtok((char*)nullptr, " ");
751
752 uint32 pathid = 0;
753 Creature* target = handler->getSelectedCreature();
754
755 // Did player provide a PathID?
756
757 if (!guid_str)
758 {
759 // No PathID provided
760 // -> Player must have selected a creature
761
762 if (!target)
763 {
765 return false;
766 }
767
768 pathid = target->GetWaypointPath();
769 }
770 else
771 {
772 // PathID provided
773 // Warn if player also selected a creature
774 // -> Creature selection is ignored <-
775 if (target)
777
778 pathid = atoi((char*)guid_str);
779 }
780
781 std::string show = show_str;
782
783 //handler->PSendSysMessage("wpshow - show: {}", show);
784
785 // Show info for the selected waypoint
786 if (show == "info")
787 {
788 // Check if the user did specify a visual waypoint
789 if (!target || target->GetEntry() != VISUAL_WAYPOINT)
790 {
792 return false;
793 }
794
796
797 stmt->SetData(0, target->GetSpawnId());
798
799 PreparedQueryResult result = WorldDatabase.Query(stmt);
800
801 if (!result)
802 {
804 return false;
805 }
806
807 handler->SendSysMessage("|cff00ffffDEBUG: wp show info:|r");
808 do
809 {
810 Field* fields = result->Fetch();
811 pathid = fields[0].Get<uint32>();
812 uint32 point = fields[1].Get<uint32>();
813 uint32 delay = fields[2].Get<uint32>();
814 uint32 flag = fields[3].Get<uint32>();
815 uint32 ev_id = fields[4].Get<uint32>();
816 uint32 ev_chance = fields[5].Get<uint32>();
817
818 handler->PSendSysMessage("|cff00ff00Show info: for current point: |r|cff00ffff{}|r|cff00ff00, Path ID: |r|cff00ffff{}|r", point, pathid);
819 handler->PSendSysMessage("|cff00ff00Show info: delay: |r|cff00ffff{}|r", delay);
820 handler->PSendSysMessage("|cff00ff00Show info: Move flag: |r|cff00ffff{}|r", flag);
821 handler->PSendSysMessage("|cff00ff00Show info: Waypoint event: |r|cff00ffff{}|r", ev_id);
822 handler->PSendSysMessage("|cff00ff00Show info: Event chance: |r|cff00ffff{}|r", ev_chance);
823 } while (result->NextRow());
824
825 return true;
826 }
827
828 if (show == "on")
829 {
831
832 stmt->SetData(0, pathid);
833
834 PreparedQueryResult result = WorldDatabase.Query(stmt);
835
836 if (!result)
837 {
838 handler->SendErrorMessage("|cffff33ffPath no found.|r");
839 return false;
840 }
841
842 handler->PSendSysMessage("|cff00ff00DEBUG: wp on, PathID: |cff00ffff{}|r", pathid);
843
844 // Delete all visuals for this NPC
845 stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_WPGUID_BY_ID);
846
847 stmt->SetData(0, pathid);
848
849 PreparedQueryResult result2 = WorldDatabase.Query(stmt);
850
851 if (result2)
852 {
853 bool hasError = false;
854 do
855 {
856 Field* fields = result2->Fetch();
857 uint32 wpguid = fields[0].Get<uint32>();
858 Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid::Create<HighGuid::Unit>(VISUAL_WAYPOINT, wpguid));
859
860 if (!creature)
861 {
863 hasError = true;
864
866 stmt->SetData(0, wpguid);
867
868 WorldDatabase.Execute(stmt);
869 }
870 else
871 {
872 creature->CombatStop();
873 creature->DeleteFromDB();
874 creature->AddObjectToRemoveList();
875 }
876 } while (result2->NextRow());
877
878 if (hasError)
879 {
883 }
884 }
885
886 do
887 {
888 Field* fields = result->Fetch();
889 uint32 point = fields[0].Get<uint32>();
890 float x = fields[1].Get<float>();
891 float y = fields[2].Get<float>();
892 float z = fields[3].Get<float>();
893
895
896 Player* chr = handler->GetSession()->GetPlayer();
897 Map* map = chr->GetMap();
898 float o = chr->GetOrientation();
899
900 Creature* wpCreature = new Creature;
901 if (!wpCreature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, 0, x, y, z, o))
902 {
904 delete wpCreature;
905 return false;
906 }
907
908 wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
909
910 // Set "wpguid" column to the visual waypoint
912 stmt->SetData(0, wpCreature->GetSpawnId());
913 stmt->SetData(1, pathid);
914 stmt->SetData(2, point);
915
916 WorldDatabase.Execute(stmt);
917
918 // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
919 if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map, true, true))
920 {
922 delete wpCreature;
923 return false;
924 }
925
926 if (target)
927 {
928 wpCreature->SetDisplayId(target->GetDisplayId());
929 wpCreature->SetObjectScale(0.5f);
930 wpCreature->SetLevel(point > STRONG_MAX_LEVEL ? STRONG_MAX_LEVEL : point);
931 }
932 } while (result->NextRow());
933
934 handler->SendSysMessage("|cff00ff00Showing the current creature's path.|r");
935 return true;
936 }
937
938 if (show == "first")
939 {
940 handler->PSendSysMessage("|cff00ff00DEBUG: wp first, GUID: {}|r", pathid);
941
943 stmt->SetData(0, pathid);
944
945 PreparedQueryResult result = WorldDatabase.Query(stmt);
946 if (!result)
947 {
949 return false;
950 }
951
952 Field* fields = result->Fetch();
953 float x = fields[0].Get<float>();
954 float y = fields[1].Get<float>();
955 float z = fields[2].Get<float>();
957
958 Player* chr = handler->GetSession()->GetPlayer();
959 float o = chr->GetOrientation();
960 Map* map = chr->GetMap();
961
962 Creature* creature = new Creature;
963 if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, 0, x, y, z, o))
964 {
966 delete creature;
967 return false;
968 }
969
970 creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
971 if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map, true, true))
972 {
974 delete creature;
975 return false;
976 }
977
978 if (target)
979 {
980 creature->SetDisplayId(target->GetDisplayId());
981 creature->SetObjectScale(0.5f);
982 }
983
984 return true;
985 }
986
987 if (show == "last")
988 {
989 handler->PSendSysMessage("|cff00ff00DEBUG: wp last, PathID: |r|cff00ffff{}|r", pathid);
990
992 stmt->SetData(0, pathid);
993
994 PreparedQueryResult result = WorldDatabase.Query(stmt);
995 if (!result)
996 {
998 return false;
999 }
1000
1001 Field* fields = result->Fetch();
1002 float x = fields[0].Get<float>();
1003 float y = fields[1].Get<float>();
1004 float z = fields[2].Get<float>();
1005 float o = fields[3].Get<float>();
1007
1008 Player* chr = handler->GetSession()->GetPlayer();
1009 Map* map = chr->GetMap();
1010
1011 Creature* creature = new Creature;
1012 if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), id, 0, x, y, z, o))
1013 {
1015 delete creature;
1016 return false;
1017 }
1018
1019 creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
1020 if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map, true, true))
1021 {
1023 delete creature;
1024 return false;
1025 }
1026
1027 if (target)
1028 {
1029 creature->SetDisplayId(target->GetDisplayId());
1030 creature->SetObjectScale(0.5f);
1031 }
1032
1033 return true;
1034 }
1035
1036 if (show == "off")
1037 {
1039 stmt->SetArguments(1, 1, 1);
1040
1041 PreparedQueryResult result = WorldDatabase.Query(stmt);
1042 if (!result)
1043 {
1045 return false;
1046 }
1047
1048 bool hasError = false;
1049
1050 do
1051 {
1052 Field* fields = result->Fetch();
1053 ObjectGuid::LowType guid = fields[0].Get<uint32>();
1054 Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid::Create<HighGuid::Unit>(VISUAL_WAYPOINT, guid));
1055 if (!creature)
1056 {
1058 hasError = true;
1059
1061
1062 stmt->SetData(0, guid);
1063
1064 WorldDatabase.Execute(stmt);
1065 }
1066 else
1067 {
1068 creature->CombatStop();
1069 creature->DeleteFromDB();
1070 creature->AddObjectToRemoveList();
1071 }
1072 } while (result->NextRow());
1073
1074 // set "wpguid" column to "empty" - no visual waypoint spawned
1075 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_ALL_WPGUID);
1076
1077 WorldDatabase.Execute(stmt);
1078
1079 if (hasError)
1080 {
1084 }
1085
1087 return true;
1088 }
1089
1090 handler->PSendSysMessage("|cffff33ffDEBUG: wpshow - no valid command found|r");
1091 return true;
1092 }
#define STRONG_MAX_LEVEL
Definition DBCEnums.h:43
@ LANG_WAYPOINT_TOOFAR2
Definition Language.h:286
@ LANG_WAYPOINT_VP_NOTFOUND
Definition Language.h:269
@ LANG_WAYPOINT_NOTFOUNDLAST
Definition Language.h:263
@ LANG_WAYPOINT_NOTREMOVED
Definition Language.h:284
@ LANG_WAYPOINT_NOTFOUND
Definition Language.h:262
@ LANG_WAYPOINT_NOTCREATED
Definition Language.h:272
@ LANG_WAYPOINT_CREATSELECTED
Definition Language.h:266
@ LANG_WAYPOINT_VP_ALLREMOVED
Definition Language.h:271
@ LANG_WAYPOINT_TOOFAR1
Definition Language.h:285
@ LANG_WAYPOINT_VP_SELECT
Definition Language.h:268
@ LANG_WAYPOINT_TOOFAR3
Definition Language.h:287
@ WORLD_SEL_WAYPOINT_DATA_POS_LAST_BY_ID
Definition WorldDatabase.h:63
@ WORLD_SEL_WAYPOINT_DATA_POS_FIRST_BY_ID
Definition WorldDatabase.h:62
@ WORLD_SEL_WAYPOINT_DATA_POS_BY_ID
Definition WorldDatabase.h:61
@ WORLD_SEL_CREATURE_BY_ID
Definition WorldDatabase.h:88
@ WORLD_SEL_WAYPOINT_DATA_WPGUID_BY_ID
Definition WorldDatabase.h:68
@ WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID
Definition WorldDatabase.h:65
@ WORLD_UPD_WAYPOINT_DATA_WPGUID
Definition WorldDatabase.h:57
@ WORLD_DEL_CREATURE
Definition WorldDatabase.h:83
@ WORLD_UPD_WAYPOINT_DATA_ALL_WPGUID
Definition WorldDatabase.h:58
void SetObjectScale(float scale) override
Definition Creature.cpp:3514
void SetDisplayId(uint32 displayId, float displayScale=1.f) override
Definition Creature.cpp:3533
void SetArguments(Args &&... args)
Definition PreparedStatement.h:118
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition Unit.cpp:15511
uint32 GetDisplayId() const
Definition Unit.h:1878

References Creature::Create(), Map::GenerateLowGuid(), Field::Get(), Map::GetCreature(), Unit::GetDisplayId(), Object::GetEntry(), Map::GetId(), WorldObject::GetMap(), Position::GetOrientation(), Player::GetPhaseMaskForSpawn(), WorldSession::GetPlayer(), ChatHandler::getSelectedCreature(), ChatHandler::GetSession(), Creature::GetSpawnId(), Map::GetSpawnMode(), Creature::GetWaypointPath(), LANG_SELECT_CREATURE, LANG_WAYPOINT_CREATSELECTED, LANG_WAYPOINT_NOTCREATED, LANG_WAYPOINT_NOTFOUND, LANG_WAYPOINT_NOTFOUNDDBPROBLEM, LANG_WAYPOINT_NOTFOUNDLAST, LANG_WAYPOINT_NOTREMOVED, LANG_WAYPOINT_TOOFAR1, LANG_WAYPOINT_TOOFAR2, LANG_WAYPOINT_TOOFAR3, LANG_WAYPOINT_VP_ALLREMOVED, LANG_WAYPOINT_VP_NOTCREATED, LANG_WAYPOINT_VP_NOTFOUND, LANG_WAYPOINT_VP_SELECT, Creature::LoadCreatureFromDB(), ChatHandler::PSendSysMessage(), Creature::SaveToDB(), ChatHandler::SendErrorMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetArguments(), PreparedStatementBase::SetData(), Creature::SetDisplayId(), Unit::SetLevel(), Creature::SetObjectScale(), STRONG_MAX_LEVEL, Unit, VISUAL_WAYPOINT, WORLD_DEL_CREATURE, WORLD_SEL_CREATURE_BY_ID, WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID, WORLD_SEL_WAYPOINT_DATA_POS_BY_ID, WORLD_SEL_WAYPOINT_DATA_POS_FIRST_BY_ID, WORLD_SEL_WAYPOINT_DATA_POS_LAST_BY_ID, WORLD_SEL_WAYPOINT_DATA_WPGUID_BY_ID, WORLD_UPD_WAYPOINT_DATA_ALL_WPGUID, WORLD_UPD_WAYPOINT_DATA_WPGUID, and WorldDatabase.

Referenced by GetCommands().

◆ HandleWpUnLoadCommand()

static bool wp_commandscript::HandleWpUnLoadCommand ( ChatHandler handler,
const char *   
)
inlinestatic
231 {
232 Creature* target = handler->getSelectedCreature();
233
234 if (!target)
235 {
236 handler->PSendSysMessage("{}{}|r", "|cff33ffff", "You must select target.");
237 return true;
238 }
239
240 uint32 guildLow = target->GetSpawnId();
241
242 if (target->GetCreatureAddon())
243 {
244 if (target->GetCreatureAddon()->path_id != 0)
245 {
247 stmt->SetData(0, guildLow);
248
249 WorldDatabase.Execute(stmt);
250
251 target->UpdateWaypointID(0);
252
253 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
254 stmt->SetData(0, uint8(IDLE_MOTION_TYPE));
255 stmt->SetData(1, guildLow);
256
257 WorldDatabase.Execute(stmt);
258
259 target->LoadPath(0);
262 target->GetMotionMaster()->Initialize();
263 target->Say("Path unloaded.", LANG_UNIVERSAL);
264 return true;
265 }
266 handler->PSendSysMessage("{}{}|r", "|cffff33ff", "Target have no loaded path.");
267 }
268 return true;
269 }
@ IDLE_MOTION_TYPE
Definition MotionMaster.h:39
@ WORLD_DEL_CREATURE_ADDON
Definition WorldDatabase.h:73
void UpdateWaypointID(uint32 wpID)
Definition Creature.h:354
CreatureAddon const * GetCreatureAddon() const
Definition Creature.cpp:2700
void MoveTargetedHome(bool walk=false)
The unit will return this initial position (owner for pets and summoned creatures)....
Definition MotionMaster.cpp:259
uint32 path_id
Definition CreatureData.h:441

References Creature::GetCreatureAddon(), Unit::GetMotionMaster(), ChatHandler::getSelectedCreature(), Creature::GetSpawnId(), IDLE_MOTION_TYPE, MotionMaster::Initialize(), LANG_UNIVERSAL, Creature::LoadPath(), MotionMaster::MoveTargetedHome(), CreatureAddon::path_id, ChatHandler::PSendSysMessage(), Unit::Say(), PreparedStatementBase::SetData(), Creature::SetDefaultMovementType(), Creature::UpdateWaypointID(), WORLD_DEL_CREATURE_ADDON, WORLD_UPD_CREATURE_MOVEMENT_TYPE, and WorldDatabase.

Referenced by GetCommands().


The documentation for this class was generated from the following file: