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
 
virtual std::vector< Acore::ChatCommands::ChatCommandBuilderGetCommands () const =0
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 

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)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ wp_commandscript()

wp_commandscript::wp_commandscript ( )
inline
41: CommandScript("wp_commandscript") { }
Definition: ScriptMgr.h:850

Member Function Documentation

◆ GetCommands()

ChatCommandTable wp_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

44 {
45 static ChatCommandTable wpCommandTable =
46 {
47 { "add", SEC_ADMINISTRATOR, false, &HandleWpAddCommand, "" },
48 { "event", SEC_ADMINISTRATOR, false, &HandleWpEventCommand, "" },
49 { "load", SEC_ADMINISTRATOR, false, &HandleWpLoadCommand, "" },
50 { "modify", SEC_ADMINISTRATOR, false, &HandleWpModifyCommand, "" },
51 { "unload", SEC_ADMINISTRATOR, false, &HandleWpUnLoadCommand, "" },
52 { "reload", SEC_ADMINISTRATOR, false, &HandleWpReloadCommand, "" },
53 { "show", SEC_ADMINISTRATOR, false, &HandleWpShowCommand, "" }
54 };
55 static ChatCommandTable commandTable =
56 {
57 { "wp", SEC_ADMINISTRATOR, false, nullptr, "", wpCommandTable }
58 };
59 return commandTable;
60 }
@ SEC_ADMINISTRATOR
Definition: Common.h:69
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:50
static bool HandleWpEventCommand(ChatHandler *handler, const char *args)
Definition: cs_wp.cpp:282
static bool HandleWpLoadCommand(ChatHandler *handler, const char *args)
Definition: cs_wp.cpp:145
static bool HandleWpReloadCommand(ChatHandler *handler, const char *args)
Definition: cs_wp.cpp:226
static bool HandleWpModifyCommand(ChatHandler *handler, const char *args)
Definition: cs_wp.cpp:554
static bool HandleWpUnLoadCommand(ChatHandler *handler, const char *)
Definition: cs_wp.cpp:241
static bool HandleWpShowCommand(ChatHandler *handler, const char *args)
Definition: cs_wp.cpp:750
static bool HandleWpAddCommand(ChatHandler *handler, const char *args)
Definition: cs_wp.cpp:82

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
83 {
84 // optional
85 char* path_number = nullptr;
86 uint32 pathid = 0;
87
88 if (*args)
89 path_number = strtok((char*)args, " ");
90
91 uint32 point = 0;
92 Creature* target = handler->getSelectedCreature();
93
94 if (!path_number)
95 {
96 if (target)
97 pathid = target->GetWaypointPath();
98 else
99 {
101
102 PreparedQueryResult result = WorldDatabase.Query(stmt);
103
104 uint32 maxpathid = result->Fetch()->Get<int32>();
105 pathid = maxpathid + 1;
106 handler->PSendSysMessage("%s%s|r", "|cff00ff00", "New path started.");
107 }
108 }
109 else
110 pathid = atoi(path_number);
111
112 // path_id -> ID of the Path
113 // point -> number of the waypoint (if not 0)
114
115 if (!pathid)
116 {
117 handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Current creature haven't loaded path.");
118 return true;
119 }
120
122 stmt->SetData(0, pathid);
123 PreparedQueryResult result = WorldDatabase.Query(stmt);
124
125 if (result)
126 point = (*result)[0].Get<uint32>();
127
128 Player* player = handler->GetSession()->GetPlayer();
129 //Map* map = player->GetMap();
130
131 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_DATA);
132
133 stmt->SetData(0, pathid);
134 stmt->SetData(1, point + 1);
135 stmt->SetData(2, player->GetPositionX());
136 stmt->SetData(3, player->GetPositionY());
137 stmt->SetData(4, player->GetPositionZ());
138
139 WorldDatabase.Execute(stmt);
140
141 handler->PSendSysMessage("%s%s%u%s%u%s|r", "|cff00ff00", "PathID: |r|cff00ffff", pathid, "|r|cff00ff00: Waypoint |r|cff00ffff", point + 1, "|r|cff00ff00 created. ");
142 return true;
143 } // HandleWpAddCommand
std::int32_t int32
Definition: Define.h:104
std::uint32_t uint32
Definition: Define.h:108
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition: DatabaseEnvFwd.h:46
@ 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
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
WorldSession * GetSession()
Definition: Chat.h:122
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
Creature * getSelectedCreature() const
Definition: Chat.cpp:337
Definition: Creature.h:46
uint32 GetWaypointPath() const
Definition: Creature.h:338
Definition: Player.h:1046
Player * GetPlayer() const
Definition: WorldSession.h:361

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

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
146 {
147 if (!*args)
148 return false;
149
150 // optional
151 char* path_number = nullptr;
152
153 if (*args)
154 path_number = strtok((char*)args, " ");
155
156 uint32 pathid = 0;
157 ObjectGuid::LowType guidLow = 0;
158 Creature* target = handler->getSelectedCreature();
159
160 // Did player provide a path_id?
161 if (!path_number)
162 return false;
163
164 if (!target)
165 {
167 handler->SetSentErrorMessage(true);
168 return false;
169 }
170
171 if (target->GetEntry() == 1)
172 {
173 handler->PSendSysMessage("%s%s|r", "|cffff33ff", "You want to load path to a waypoint? Aren't you?");
174 handler->SetSentErrorMessage(true);
175 return false;
176 }
177
178 pathid = atoi(path_number);
179
180 if (!pathid)
181 {
182 handler->PSendSysMessage("%s%s|r", "|cffff33ff", "No valid path number provided.");
183 return true;
184 }
185
186 guidLow = target->GetSpawnId();
187
189
190 stmt->SetData(0, guidLow);
191
192 PreparedQueryResult result = WorldDatabase.Query(stmt);
193
194 if (result)
195 {
196 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_ADDON_PATH);
197
198 stmt->SetData(0, pathid);
199 stmt->SetData(1, guidLow);
200 }
201 else
202 {
203 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_ADDON);
204
205 stmt->SetData(0, guidLow);
206 stmt->SetData(1, pathid);
207 }
208
209 WorldDatabase.Execute(stmt);
210
211 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
212
214 stmt->SetData(1, guidLow);
215
216 WorldDatabase.Execute(stmt);
217
218 target->LoadPath(pathid);
220 target->GetMotionMaster()->Initialize();
221 target->Say("Path loaded.", LANG_UNIVERSAL);
222
223 return true;
224 }
std::uint8_t uint8
Definition: Define.h:110
@ 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
@ LANG_SELECT_CREATURE
Definition: Language.h:32
@ WAYPOINT_MOTION_TYPE
Definition: MotionMaster.h:39
@ LANG_UNIVERSAL
Definition: SharedDefines.h:707
void SetSentErrorMessage(bool val)
Definition: Chat.h:118
ObjectGuid::LowType GetSpawnId() const
Definition: Creature.h:67
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition: Creature.h:87
void LoadPath(uint32 pathid)
Definition: Creature.h:339
uint32 GetEntry() const
Definition: Object.h:109
uint32 LowType
Definition: ObjectGuid.h:124
virtual void Say(std::string_view text, Language language, WorldObject const *target=nullptr)
Definition: Unit.cpp:21306
MotionMaster * GetMotionMaster()
Definition: Unit.h:2262
void Initialize()
Definition: MotionMaster.cpp:72

References Object::GetEntry(), Unit::GetMotionMaster(), ChatHandler::getSelectedCreature(), Creature::GetSpawnId(), MotionMaster::Initialize(), LANG_SELECT_CREATURE, LANG_UNIVERSAL, Creature::LoadPath(), ChatHandler::PSendSysMessage(), Unit::Say(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), Creature::SetDefaultMovementType(), ChatHandler::SetSentErrorMessage(), 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
555 {
556 if (!*args)
557 return false;
558
559 // first arg: add del text emote spell waittime move
560 char* show_str = strtok((char*)args, " ");
561 if (!show_str)
562 {
563 return false;
564 }
565
566 std::string show = show_str;
567 // Check
568 // Remember: "show" must also be the name of a column!
569 if ((show != "delay") && (show != "action") && (show != "action_chance")
570 && (show != "move_type") && (show != "del") && (show != "move") && (show != "wpadd")
571 )
572 {
573 return false;
574 }
575
576 // Next arg is: <PATHID> <WPNUM> <ARGUMENT>
577 char* arg_str = nullptr;
578
579 // Did user provide a GUID
580 // or did the user select a creature?
581 // -> variable lowguid is filled with the GUID of the NPC
582 uint32 pathid = 0;
583 uint32 point = 0;
584 Creature* target = handler->getSelectedCreature();
585
586 if (!target || target->GetEntry() != VISUAL_WAYPOINT)
587 {
588 handler->SendSysMessage("|cffff33ffERROR: You must select a waypoint.|r");
589 return false;
590 }
591
592 // The visual waypoint
593 ObjectGuid::LowType wpSpawnId = target->GetSpawnId();
594
595 // User did select a visual waypoint?
596
597 // Check the creature
599 stmt->SetData(0, wpSpawnId);
600 PreparedQueryResult result = WorldDatabase.Query(stmt);
601
602 if (!result)
603 {
605 // Select waypoint number from database
606 // Since we compare float values, we have to deal with
607 // some difficulties.
608 // Here we search for all waypoints that only differ in one from 1 thousand
609 // (0.001) - There is no other way to compare C++ floats with mySQL floats
610 // See also: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
611 std::string maxDiff = "0.01";
612
614 stmt->SetData(0, target->GetPositionX());
615 stmt->SetData(1, maxDiff);
616 stmt->SetData(2, target->GetPositionY());
617 stmt->SetData(3, maxDiff);
618 stmt->SetData(4, target->GetPositionZ());
619 stmt->SetData(5, maxDiff);
620 PreparedQueryResult result = WorldDatabase.Query(stmt);
621
622 if (!result)
623 {
625 return true;
626 }
627 }
628
629 do
630 {
631 Field* fields = result->Fetch();
632 pathid = fields[0].Get<uint32>();
633 point = fields[1].Get<uint32>();
634 } while (result->NextRow());
635
636 // We have the waypoint number and the GUID of the "master npc"
637 // Text is enclosed in "<>", all other arguments not
638 arg_str = strtok((char*)nullptr, " ");
639
640 // Check for argument
641 if (show != "del" && show != "move" && arg_str == nullptr)
642 {
643 handler->PSendSysMessage(LANG_WAYPOINT_ARGUMENTREQ, show_str);
644 return false;
645 }
646
647 if (show == "del")
648 {
649 handler->PSendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff%u|r", pathid);
650
651 if (wpSpawnId != 0)
652 if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(target->GetGUID()))
653 {
654 wpCreature->CombatStop();
655 wpCreature->DeleteFromDB();
656 wpCreature->AddObjectToRemoveList();
657 }
658
660 stmt->SetData(0, pathid);
661 stmt->SetData(1, point);
662
663 WorldDatabase.Execute(stmt);
664
665 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT);
666 stmt->SetData(0, pathid);
667 stmt->SetData(1, point);
668
669 WorldDatabase.Execute(stmt);
670
672 return true;
673 } // del
674
675 if (show == "move")
676 {
677 handler->PSendSysMessage("|cff00ff00DEBUG: wp move, PathID: |r|cff00ffff%u|r", pathid);
678
679 Player* chr = handler->GetSession()->GetPlayer();
680 Map* map = chr->GetMap();
681 {
682 // What to do:
683 // Move the visual spawnpoint
684 // Respawn the owner of the waypoints
685 if (wpSpawnId != 0)
686 {
687 if (Creature* wpCreature = map->GetCreature(target->GetGUID()))
688 {
689 wpCreature->CombatStop();
690 wpCreature->DeleteFromDB();
691 wpCreature->AddObjectToRemoveList();
692 }
693 // re-create
694 Creature* wpCreature2 = new Creature;
695 if (!wpCreature2->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, 0, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation()))
696 {
698 delete wpCreature2;
699 wpCreature2 = nullptr;
700 return false;
701 }
702
703 wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
704 // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
705 //TODO: Should we first use "Create" then use "LoadFromDB"?
706 if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetSpawnId(), map, true, false, true))
707 {
709 delete wpCreature2;
710 wpCreature2 = nullptr;
711 return false;
712 }
713 //sMapMgr->GetMap(npcCreature->GetMapId())->Add(wpCreature2);
714 }
715
717
718 stmt->SetData(0, chr->GetPositionX());
719 stmt->SetData(1, chr->GetPositionY());
720 stmt->SetData(2, chr->GetPositionZ());
721 stmt->SetData(3, pathid);
722 stmt->SetData(4, point);
723
724 WorldDatabase.Execute(stmt);
725
727 }
728 return true;
729 } // move
730
731 const char* text = arg_str;
732
733 if (text == 0)
734 {
735 // show_str check for present in list of correct values, no sql injection possible
736 WorldDatabase.Execute("UPDATE waypoint_data SET {}=nullptr WHERE id='{}' AND point='{}'", show_str, pathid, point); // Query can't be a prepared statement
737 }
738 else
739 {
740 // show_str check for present in list of correct values, no sql injection possible
741 std::string text2 = text;
742 WorldDatabase.EscapeString(text2);
743 WorldDatabase.Execute("UPDATE waypoint_data SET {}='{}' WHERE id='{}' AND point='{}'", show_str, text2, pathid, point); // Query can't be a prepared statement
744 }
745
746 handler->PSendSysMessage(LANG_WAYPOINT_CHANGED_NO, show_str);
747 return true;
748 }
@ 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
@ LANG_WAYPOINT_REMOVED
Definition: Language.h:282
@ LANG_WAYPOINT_CHANGED
Definition: Language.h:277
@ LANG_WAYPOINT_CHANGED_NO
Definition: Language.h:278
@ LANG_WAYPOINT_ARGUMENTREQ
Definition: Language.h:274
@ LANG_WAYPOINT_VP_NOTCREATED
Definition: Language.h:269
@ LANG_WAYPOINT_NOTFOUNDDBPROBLEM
Definition: Language.h:264
@ LANG_WAYPOINT_NOTFOUNDSEARCH
Definition: Language.h:263
#define VISUAL_WAYPOINT
Definition: MotionMaster.h:32
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:1101
void SaveToDB()
Definition: Creature.cpp:1365
bool LoadCreatureFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true, bool gridLoad=false, bool allowDuplicate=false)
Definition: Creature.cpp:1661
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
Map * GetMap() const
Definition: Object.h:517
float GetPositionZ() const
Definition: Position.h:119
float GetOrientation() const
Definition: Position.h:120
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
uint32 GetPhaseMaskForSpawn() const
Definition: Player.cpp:13652
Definition: Map.h:312
void AddObjectToRemoveList(WorldObject *obj)
Definition: Map.cpp:2635
uint8 GetSpawnMode() const
Definition: Map.h:419
ObjectGuid::LowType GenerateLowGuid()
Definition: Map.h:632
Creature * GetCreature(ObjectGuid const guid)
Definition: Map.cpp:3293
uint32 GetId() const
Definition: Map.h:378

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(), 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
227 {
228 if (!*args)
229 return false;
230
231 uint32 id = atoi(args);
232
233 if (!id)
234 return false;
235
236 handler->PSendSysMessage("%s%s|r|cff00ffff%u|r", "|cff00ff00", "Loading Path: ", id);
237 sWaypointMgr->ReloadPath(id);
238 return true;
239 }
#define sWaypointMgr
Definition: WaypointMgr.h:77

References ChatHandler::PSendSysMessage(), and sWaypointMgr.

Referenced by GetCommands().

◆ HandleWpShowCommand()

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

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::SendSysMessage(), PreparedStatementBase::SetArguments(), PreparedStatementBase::SetData(), Creature::SetDisplayId(), Unit::SetLevel(), Creature::SetObjectScale(), ChatHandler::SetSentErrorMessage(), STRONG_MAX_LEVEL, 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
242 {
243 Creature* target = handler->getSelectedCreature();
244
245 if (!target)
246 {
247 handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select target.");
248 return true;
249 }
250
251 uint32 guildLow = target->GetSpawnId();
252
253 if (target->GetCreatureAddon())
254 {
255 if (target->GetCreatureAddon()->path_id != 0)
256 {
258 stmt->SetData(0, guildLow);
259
260 WorldDatabase.Execute(stmt);
261
262 target->UpdateWaypointID(0);
263
264 stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
265 stmt->SetData(0, uint8(IDLE_MOTION_TYPE));
266 stmt->SetData(1, guildLow);
267
268 WorldDatabase.Execute(stmt);
269
270 target->LoadPath(0);
273 target->GetMotionMaster()->Initialize();
274 target->Say("Path unloaded.", LANG_UNIVERSAL);
275 return true;
276 }
277 handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target have no loaded path.");
278 }
279 return true;
280 }
@ WORLD_DEL_CREATURE_ADDON
Definition: WorldDatabase.h:73
@ IDLE_MOTION_TYPE
Definition: MotionMaster.h:37
void UpdateWaypointID(uint32 wpID)
Definition: Creature.h:342
CreatureAddon const * GetCreatureAddon() const
Definition: Creature.cpp:2612
uint32 path_id
Definition: CreatureData.h:430
void MoveTargetedHome(bool walk=false)
Definition: MotionMaster.cpp:251

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().