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
33: CommandScript("wp_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable wp_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

36 {
37 static ChatCommandTable wpCommandTable =
38 {
46 };
47 static ChatCommandTable commandTable =
48 {
49 { "wp", wpCommandTable }
50 };
51 return commandTable;
52 }
static bool HandleWpEventCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:272
static bool HandleWpLoadCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:137
static bool HandleWpReloadCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:216
static bool HandleWpModifyCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:544
static bool HandleWpUnLoadCommand(ChatHandler *handler, const char *)
Definition cs_wp.cpp:231
static bool HandleWpShowCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:740
static bool HandleWpAddCommand(ChatHandler *handler, const char *args)
Definition cs_wp.cpp:74
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_WP_SHOW
Definition RBAC.h:599
@ RBAC_PERM_COMMAND_WP_MODIFY
Definition RBAC.h:596
@ RBAC_PERM_COMMAND_WP_UNLOAD
Definition RBAC.h:597
@ RBAC_PERM_COMMAND_WP_LOAD
Definition RBAC.h:595
@ RBAC_PERM_COMMAND_WP_ADD
Definition RBAC.h:593
@ RBAC_PERM_COMMAND_WP_EVENT
Definition RBAC.h:594
@ RBAC_PERM_COMMAND_WP_RELOAD
Definition RBAC.h:598

References HandleWpAddCommand(), HandleWpEventCommand(), HandleWpLoadCommand(), HandleWpModifyCommand(), HandleWpReloadCommand(), HandleWpShowCommand(), HandleWpUnLoadCommand(), rbac::RBAC_PERM_COMMAND_WP_ADD, rbac::RBAC_PERM_COMMAND_WP_EVENT, rbac::RBAC_PERM_COMMAND_WP_LOAD, rbac::RBAC_PERM_COMMAND_WP_MODIFY, rbac::RBAC_PERM_COMMAND_WP_RELOAD, rbac::RBAC_PERM_COMMAND_WP_SHOW, and rbac::RBAC_PERM_COMMAND_WP_UNLOAD.

◆ 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
75 {
76 // optional
77 char* path_number = nullptr;
78 uint32 pathid = 0;
79
80 if (*args)
81 path_number = strtok((char*)args, " ");
82
83 uint32 point = 0;
84 Creature* target = handler->getSelectedCreature();
85
86 if (!path_number)
87 {
88 if (target)
89 pathid = target->GetWaypointPath();
90 else
91 {
93
94 PreparedQueryResult result = WorldDatabase.Query(stmt);
95
96 uint32 maxpathid = result->Fetch()->Get<int32>();
97 pathid = maxpathid + 1;
98 handler->PSendSysMessage("{}{}|r", "|cff00ff00", "New path started.");
99 }
100 }
101 else
102 pathid = atoi(path_number);
103
104 // path_id -> ID of the Path
105 // point -> number of the waypoint (if not 0)
106
107 if (!pathid)
108 {
109 handler->PSendSysMessage("{}{}|r", "|cffff33ff", "Current creature haven't loaded path.");
110 return true;
111 }
112
114 stmt->SetData(0, pathid);
115 PreparedQueryResult result = WorldDatabase.Query(stmt);
116
117 if (result)
118 point = (*result)[0].Get<uint32>();
119
120 Player* player = handler->GetSession()->GetPlayer();
121 //Map* map = player->GetMap();
122
123 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_DATA);
124
125 stmt->SetData(0, pathid);
126 stmt->SetData(1, point + 1);
127 stmt->SetData(2, player->GetPositionX());
128 stmt->SetData(3, player->GetPositionY());
129 stmt->SetData(4, player->GetPositionZ());
130
131 WorldDatabase.Execute(stmt);
132
133 handler->PSendSysMessage("{}{}{}{}{}{}|r", "|cff00ff00", "PathID: |r|cff00ffff", pathid, "|r|cff00ff00: Waypoint |r|cff00ffff", point + 1, "|r|cff00ff00 created. ");
134 return true;
135 } // 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:219
WorldSession * GetSession()
Definition Chat.h:242
Creature * getSelectedCreature() const
Definition Chat.cpp:418
Definition Creature.h:47
uint32 GetWaypointPath() const
Definition Creature.h:357
Definition Player.h:1084
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:454

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
273 {
274 if (!*args)
275 return false;
276
277 char* show_str = strtok((char*)args, " ");
278 std::string show = show_str;
279
280 // Check
281 if ((show != "add") && (show != "mod") && (show != "del") && (show != "listid"))
282 return false;
283
284 char* arg_id = strtok(nullptr, " ");
285 uint32 id = 0;
286
287 if (show == "add")
288 {
289 if (arg_id)
290 id = atoi(arg_id);
291
292 if (id)
293 {
295 stmt->SetData(0, id);
296 PreparedQueryResult result = WorldDatabase.Query(stmt);
297
298 if (!result)
299 {
301
302 stmt->SetData(0, id);
303
304 WorldDatabase.Execute(stmt);
305
306 handler->PSendSysMessage("{}{}{}|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id);
307 }
308 else
309 handler->PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: {}|r", id);
310 }
311 else
312 {
314
315 PreparedQueryResult result = WorldDatabase.Query(stmt);
316
317 id = result->Fetch()->Get<uint32>();
318
319 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
320
321 stmt->SetData(0, id + 1);
322
323 WorldDatabase.Execute(stmt);
324
325 handler->PSendSysMessage("{}{}{}|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", id + 1);
326 }
327
328 return true;
329 }
330
331 if (show == "listid")
332 {
333 if (!arg_id)
334 {
335 handler->PSendSysMessage("{}{}|r", "|cff33ffff", "Wp Event: You must provide waypoint script id.");
336 return true;
337 }
338
339 id = atoi(arg_id);
340
341 uint32 a2, a3, a4, a5, a6;
342 float a8, a9, a10, a11;
343 char const* a7;
344
346 stmt->SetData(0, id);
347 PreparedQueryResult result = WorldDatabase.Query(stmt);
348
349 if (!result)
350 {
351 handler->PSendSysMessage("{}{}{}|r", "|cff33ffff", "Wp Event: No waypoint scripts found on id: ", id);
352 return true;
353 }
354
355 Field* fields;
356
357 do
358 {
359 fields = result->Fetch();
360 a2 = fields[0].Get<uint32>();
361 a3 = fields[1].Get<uint32>();
362 a4 = fields[2].Get<uint32>();
363 a5 = fields[3].Get<uint32>();
364 a6 = fields[4].Get<uint32>();
365 a7 = fields[5].Get<std::string>().c_str();
366 a8 = fields[6].Get<float>();
367 a9 = fields[7].Get<float>();
368 a10 = fields[8].Get<float>();
369 a11 = fields[9].Get<float>();
370
371 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);
372 } while (result->NextRow());
373 }
374
375 if (show == "del")
376 {
377 if (!arg_id)
378 {
379 handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
380 return true;
381 }
382
383 id = atoi(arg_id);
384
386
387 stmt->SetData(0, id);
388
389 PreparedQueryResult result = WorldDatabase.Query(stmt);
390
391 if (result)
392 {
394
395 stmt->SetData(0, id);
396
397 WorldDatabase.Execute(stmt);
398
399 handler->PSendSysMessage("{}{}{}|r", "|cff00ff00", "Wp Event: Waypoint script removed: ", id);
400 }
401 else
402 handler->PSendSysMessage("|cffff33ffWp Event: ERROR: you have selected a non existing script: {}|r", id);
403
404 return true;
405 }
406
407 if (show == "mod")
408 {
409 if (!arg_id)
410 {
411 handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
412 return true;
413 }
414
415 id = atoi(arg_id);
416
417 if (!id)
418 {
419 handler->SendSysMessage("|cffff33ffERROR: No vallid waypoint script id not present.|r");
420 return true;
421 }
422
423 char* arg_2 = strtok(nullptr, " ");
424
425 if (!arg_2)
426 {
427 handler->SendSysMessage("|cffff33ffERROR: No argument present.|r");
428 return true;
429 }
430
431 std::string arg_string = arg_2;
432
433 if ((arg_string != "setid") && (arg_string != "delay") && (arg_string != "command")
434 && (arg_string != "datalong") && (arg_string != "datalong2") && (arg_string != "dataint") && (arg_string != "posx")
435 && (arg_string != "posy") && (arg_string != "posz") && (arg_string != "orientation"))
436 {
437 handler->SendSysMessage("|cffff33ffERROR: No valid argument present.|r");
438 return true;
439 }
440
441 char* arg_3;
442 std::string arg_str_2 = arg_2;
443 arg_3 = strtok(nullptr, " ");
444
445 if (!arg_3)
446 {
447 handler->SendSysMessage("|cffff33ffERROR: No additional argument present.|r");
448 return true;
449 }
450
451 if (arg_str_2 == "setid")
452 {
453 uint32 newid = atoi(arg_3);
454 handler->PSendSysMessage("{}{}|r|cff00ffff{}|r|cff00ff00{}|r|cff00ffff{}|r", "|cff00ff00", "Wp Event: Wypoint scipt guid: ", newid, " id changed: ", id);
455
457
458 stmt->SetData(0, newid);
459 stmt->SetData(1, id);
460
461 WorldDatabase.Execute(stmt);
462
463 return true;
464 }
465 else
466 {
468 stmt->SetData(0, id);
469 PreparedQueryResult result = WorldDatabase.Query(stmt);
470
471 if (!result)
472 {
473 handler->SendSysMessage("|cffff33ffERROR: You have selected an non existing waypoint script guid.|r");
474 return true;
475 }
476
477 if (arg_str_2 == "posx")
478 {
480
481 stmt->SetData(0, float(atof(arg_3)));
482 stmt->SetData(1, id);
483
484 WorldDatabase.Execute(stmt);
485
486 handler->PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff {}|r|cff00ff00 position_x updated.|r", id);
487 return true;
488 }
489 else if (arg_str_2 == "posy")
490 {
492
493 stmt->SetData(0, float(atof(arg_3)));
494 stmt->SetData(1, id);
495
496 WorldDatabase.Execute(stmt);
497
498 handler->PSendSysMessage("|cff00ff00Waypoint script: {} position_y updated.|r", id);
499 return true;
500 }
501 else if (arg_str_2 == "posz")
502 {
504
505 stmt->SetData(0, float(atof(arg_3)));
506 stmt->SetData(1, id);
507
508 WorldDatabase.Execute(stmt);
509
510 handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff{}|r|cff00ff00 position_z updated.|r", id);
511 return true;
512 }
513 else if (arg_str_2 == "orientation")
514 {
516
517 stmt->SetData(0, float(atof(arg_3)));
518 stmt->SetData(1, id);
519
520 WorldDatabase.Execute(stmt);
521
522 handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff{}|r|cff00ff00 orientation updated.|r", id);
523 return true;
524 }
525 else if (arg_str_2 == "dataint")
526 {
527 WorldDatabase.Execute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, atoi(arg_3), id); // Query can't be a prepared statement
528
529 handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff{}|r|cff00ff00 dataint updated.|r", id);
530 return true;
531 }
532 else
533 {
534 std::string arg_str_3 = arg_3;
535 WorldDatabase.EscapeString(arg_str_3);
536 WorldDatabase.Execute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, arg_str_3, id); // Query can't be a prepared statement
537 }
538 }
539 handler->PSendSysMessage("{}{}|r|cff00ffff{}:|r|cff00ff00 {} {}|r", "|cff00ff00", "Waypoint script:", id, arg_2, "updated.");
540 }
541 return true;
542 }
@ 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:168
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
138 {
139 if (!*args)
140 return false;
141
142 // optional
143 char* path_number = nullptr;
144
145 if (*args)
146 path_number = strtok((char*)args, " ");
147
148 uint32 pathid = 0;
149 ObjectGuid::LowType guidLow = 0;
150 Creature* target = handler->getSelectedCreature();
151
152 // Did player provide a path_id?
153 if (!path_number)
154 return false;
155
156 if (!target)
157 {
159 return false;
160 }
161
162 if (target->GetEntry() == 1)
163 {
164 handler->SendErrorMessage("{}{}|r", "|cffff33ff", "You want to load path to a waypoint? Aren't you?");
165 return false;
166 }
167
168 pathid = atoi(path_number);
169
170 if (!pathid)
171 {
172 handler->PSendSysMessage("{}{}|r", "|cffff33ff", "No valid path number provided.");
173 return true;
174 }
175
176 guidLow = target->GetSpawnId();
177
179
180 stmt->SetData(0, guidLow);
181
182 PreparedQueryResult result = WorldDatabase.Query(stmt);
183
184 if (result)
185 {
186 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_ADDON_PATH);
187
188 stmt->SetData(0, pathid);
189 stmt->SetData(1, guidLow);
190 }
191 else
192 {
193 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_ADDON);
194
195 stmt->SetData(0, guidLow);
196 stmt->SetData(1, pathid);
197 }
198
199 WorldDatabase.Execute(stmt);
200
201 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
202
204 stmt->SetData(1, guidLow);
205
206 WorldDatabase.Execute(stmt);
207
208 target->LoadPath(pathid);
210 target->GetMotionMaster()->Initialize();
211 target->Say("Path loaded.", LANG_UNIVERSAL);
212
213 return true;
214 }
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:723
@ 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:224
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:69
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition Creature.h:92
void LoadPath(uint32 pathid)
Definition Creature.h:358
void Initialize()
Definition MotionMaster.cpp:75
uint32 LowType
Definition ObjectGuid.h:122
uint32 GetEntry() const
Definition Object.h:117
virtual void Say(std::string_view text, Language language, WorldObject const *target=nullptr)
Definition Unit.cpp:17175
MotionMaster * GetMotionMaster()
Definition Unit.h:1759

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
545 {
546 if (!*args)
547 return false;
548
549 // first arg: add del text emote spell waittime move
550 char* show_str = strtok((char*)args, " ");
551 if (!show_str)
552 {
553 return false;
554 }
555
556 std::string show = show_str;
557 // Check
558 // Remember: "show" must also be the name of a column!
559 if ((show != "delay") && (show != "action") && (show != "action_chance")
560 && (show != "move_type") && (show != "del") && (show != "move") && (show != "wpadd")
561 )
562 {
563 return false;
564 }
565
566 // Next arg is: <PATHID> <WPNUM> <ARGUMENT>
567 char* arg_str = nullptr;
568
569 // Did user provide a GUID
570 // or did the user select a creature?
571 // -> variable lowguid is filled with the GUID of the NPC
572 uint32 pathid = 0;
573 uint32 point = 0;
574 Creature* target = handler->getSelectedCreature();
575
576 if (!target || target->GetEntry() != VISUAL_WAYPOINT)
577 {
578 handler->SendSysMessage("|cffff33ffERROR: You must select a waypoint.|r");
579 return false;
580 }
581
582 // The visual waypoint
583 ObjectGuid::LowType wpSpawnId = target->GetSpawnId();
584
585 // User did select a visual waypoint?
586
587 // Check the creature
589 stmt->SetData(0, wpSpawnId);
590 PreparedQueryResult result = WorldDatabase.Query(stmt);
591
592 if (!result)
593 {
595 // Select waypoint number from database
596 // Since we compare float values, we have to deal with
597 // some difficulties.
598 // Here we search for all waypoints that only differ in one from 1 thousand
599 // (0.001) - There is no other way to compare C++ floats with mySQL floats
600 // See also: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
601 std::string maxDiff = "0.01";
602
604 stmt->SetData(0, target->GetPositionX());
605 stmt->SetData(1, maxDiff);
606 stmt->SetData(2, target->GetPositionY());
607 stmt->SetData(3, maxDiff);
608 stmt->SetData(4, target->GetPositionZ());
609 stmt->SetData(5, maxDiff);
610 PreparedQueryResult result = WorldDatabase.Query(stmt);
611
612 if (!result)
613 {
615 return true;
616 }
617 }
618
619 do
620 {
621 Field* fields = result->Fetch();
622 pathid = fields[0].Get<uint32>();
623 point = fields[1].Get<uint32>();
624 } while (result->NextRow());
625
626 // We have the waypoint number and the GUID of the "master npc"
627 // Text is enclosed in "<>", all other arguments not
628 arg_str = strtok((char*)nullptr, " ");
629
630 // Check for argument
631 if (show != "del" && show != "move" && arg_str == nullptr)
632 {
633 handler->PSendSysMessage(LANG_WAYPOINT_ARGUMENTREQ, show_str);
634 return false;
635 }
636
637 if (show == "del")
638 {
639 handler->PSendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff{}|r", pathid);
640
641 if (wpSpawnId != 0)
642 if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(target->GetGUID()))
643 {
644 wpCreature->CombatStop();
645 wpCreature->DeleteFromDB();
646 wpCreature->AddObjectToRemoveList();
647 }
648
650 stmt->SetData(0, pathid);
651 stmt->SetData(1, point);
652
653 WorldDatabase.Execute(stmt);
654
655 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT);
656 stmt->SetData(0, pathid);
657 stmt->SetData(1, point);
658
659 WorldDatabase.Execute(stmt);
660
662 return true;
663 } // del
664
665 if (show == "move")
666 {
667 handler->PSendSysMessage("|cff00ff00DEBUG: wp move, PathID: |r|cff00ffff{}|r", pathid);
668
669 Player* chr = handler->GetSession()->GetPlayer();
670 Map* map = chr->GetMap();
671 {
672 // What to do:
673 // Move the visual spawnpoint
674 // Respawn the owner of the waypoints
675 if (wpSpawnId != 0)
676 {
677 if (Creature* wpCreature = map->GetCreature(target->GetGUID()))
678 {
679 wpCreature->CombatStop();
680 wpCreature->DeleteFromDB();
681 wpCreature->AddObjectToRemoveList();
682 }
683 // re-create
684 Creature* wpCreature2 = new Creature;
685 if (!wpCreature2->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, 0, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
686 {
688 delete wpCreature2;
689 wpCreature2 = nullptr;
690 return false;
691 }
692
693 wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
694 // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
695 //TODO: Should we first use "Create" then use "LoadFromDB"?
696 if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetSpawnId(), map, true, true))
697 {
699 delete wpCreature2;
700 wpCreature2 = nullptr;
701 return false;
702 }
703 //sMapMgr->GetMap(npcCreature->GetMapId())->Add(wpCreature2);
704 }
705
707
708 stmt->SetData(0, chr->GetPositionX());
709 stmt->SetData(1, chr->GetPositionY());
710 stmt->SetData(2, chr->GetPositionZ());
711 stmt->SetData(3, pathid);
712 stmt->SetData(4, point);
713
714 WorldDatabase.Execute(stmt);
715
717 }
718 return true;
719 } // move
720
721 const char* text = arg_str;
722
723 if (text == 0)
724 {
725 // show_str check for present in list of correct values, no sql injection possible
726 WorldDatabase.Execute("UPDATE waypoint_data SET {}=nullptr WHERE id='{}' AND point='{}'", show_str, pathid, point); // Query can't be a prepared statement
727 }
728 else
729 {
730 // show_str check for present in list of correct values, no sql injection possible
731 std::string text2 = text;
732 WorldDatabase.EscapeString(text2);
733 WorldDatabase.Execute("UPDATE waypoint_data SET {}='{}' WHERE id='{}' AND point='{}'", show_str, text2, pathid, point); // Query can't be a prepared statement
734 }
735
736 handler->PSendSysMessage(LANG_WAYPOINT_CHANGED_NO, show_str);
737 return true;
738 }
@ LANG_WAYPOINT_REMOVED
Definition Language.h:290
@ LANG_WAYPOINT_CHANGED
Definition Language.h:285
@ LANG_WAYPOINT_CHANGED_NO
Definition Language.h:286
@ LANG_WAYPOINT_ARGUMENTREQ
Definition Language.h:282
@ LANG_WAYPOINT_VP_NOTCREATED
Definition Language.h:277
@ LANG_WAYPOINT_NOTFOUNDDBPROBLEM
Definition Language.h:272
@ LANG_WAYPOINT_NOTFOUNDSEARCH
Definition Language.h:271
#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:1679
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:1151
void SaveToDB()
Definition Creature.cpp:1380
Definition Map.h:166
void AddObjectToRemoveList(WorldObject *obj)
Definition Map.cpp:1774
uint8 GetSpawnMode() const
Definition Map.h:269
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:519
uint32 GetId() const
Definition Map.h:232
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2349
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
uint32 GetPhaseMaskForSpawn() const
Definition Player.cpp:13829
Map * GetMap() const
Definition Object.h:625
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
217 {
218 if (!*args)
219 return false;
220
221 uint32 id = atoi(args);
222
223 if (!id)
224 return false;
225
226 handler->PSendSysMessage("{}{}|r|cff00ffff{}|r", "|cff00ff00", "Loading Path: ", id);
227 sWaypointMgr->ReloadPath(id);
228 return true;
229 }
#define sWaypointMgr
Definition WaypointMgr.h:54

References ChatHandler::PSendSysMessage(), and sWaypointMgr.

Referenced by GetCommands().

◆ HandleWpShowCommand()

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

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

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: