Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
UnitMethods.h
Go to the documentation of this file.
1/*
2* Copyright (C) 2010 - 2013 Eluna Lua Engine <http://emudevs.com/>
3* This program is free software licensed under GPL version 3
4* Please see the included DOCS/LICENSE.TXT for more information
5*/
6
7#ifndef UNITMETHODS_H
8#define UNITMETHODS_H
9
10namespace LuaUnit
11{
12 int Attack(lua_State* L, Unit* unit)
13 {
14 Unit* who = sEluna->CHECK_UNIT(L, 1);
15 bool meleeAttack = luaL_optbool(L, 2, false);
16
17 if (!who)
18 sEluna->Push(L, false);
19 else
20 sEluna->Push(L, unit->Attack(who, meleeAttack));
21 return 1;
22 }
23
24 int ClearThreatList(lua_State* L, Unit* unit)
25 {
27 return 0;
28 }
29
30 int SetOwnerGUID(lua_State* L, Unit* unit)
31 {
32 uint64 guid = sEluna->CHECK_ULONG(L, 1);
33
34 unit->SetOwnerGUID(ObjectGuid(guid));
35 return 0;
36 }
37
38 int GetOwner(lua_State* L, Unit* unit)
39 {
40 sEluna->Push(L, unit->GetOwner());
41 return 1;
42 }
43
44 int GetOwnerGUID(lua_State* L, Unit* unit)
45 {
46 sEluna->Push(L, unit->GetOwnerGUID());
47 return 1;
48 }
49
50 int GetMap(lua_State* L, Unit* unit)
51 {
52 Map* map = unit->GetMap();
53 sEluna->Push(L, map);
54 return 1;
55 }
56
57 int GetRelativePoint(lua_State* L, Unit* unit)
58 {
59 float dist = luaL_checknumber(L, 1);
60 float rad = luaL_checknumber(L, 2);
61
62 float o = Position::NormalizeOrientation(unit->GetOrientation() + rad);
63 sEluna->Push(L, unit->GetPositionX() + (dist * cosf(o)));
64 sEluna->Push(L, unit->GetPositionY() + (dist * sinf(o)));
65 sEluna->Push(L, o);
66 return 3;
67 }
68
69 int Mount(lua_State* L, Unit* unit)
70 {
71 uint32 displayId = luaL_checkunsigned(L, 1);
72
73 unit->Mount(displayId);
74 return 0;
75 }
76
77 int Dismount(lua_State* L, Unit* unit)
78 {
79 if (unit->IsMounted())
80 {
81 unit->Dismount();
83 }
84 return 0;
85 }
86
87 int IsMounted(lua_State* L, Unit* unit)
88 {
89 sEluna->Push(L, unit->IsMounted());
90 return 1;
91 }
92
93 int IsWithinLoS(lua_State* L, Unit* unit)
94 {
95 float x = luaL_checknumber(L, 1);
96 float y = luaL_checknumber(L, 2);
97 float z = luaL_checknumber(L, 3);
98
99 sEluna->Push(L, unit->IsWithinLOS(x, y, z));
100 return 1;
101 }
102
103 /*int IsRooted(lua_State* L, Unit* unit)
104 {
105 sEluna->Push(L, unit->isRooted());
106 return 1;
107 }*/
108
109 int IsFullHealth(lua_State* L, Unit* unit)
110 {
111 sEluna->Push(L, unit->IsFullHealth());
112 return 1;
113 }
114
115 int IsWithinDistInMap(lua_State* L, Unit* unit)
116 {
117 WorldObject* obj = sEluna->CHECK_WORLDOBJECT(L, 1);
118 if (!obj)
119 return 0;
120 float radius = luaL_checknumber(L, 2);
121
122 sEluna->Push(L, unit->IsWithinDistInMap(obj, radius));
123 return 1;
124 }
125
126 int IsInAccessiblePlaceFor(lua_State* L, Unit* unit)
127 {
128 Creature* creature = sEluna->CHECK_CREATURE(L, 1);
129 if (!creature)
130 return 0;
131
132 sEluna->Push(L, unit->isInAccessiblePlaceFor(creature));
133 return 1;
134 }
135
136 int GetMountDisplayId(lua_State* L, Unit* unit)
137 {
138 sEluna->Push(L, unit->GetMountID());
139 return 1;
140 }
141
142 int GetDistance(lua_State* L, Unit* unit)
143 {
144 WorldObject* obj = sEluna->CHECK_WORLDOBJECT(L, 1);
145 if (obj && obj->IsInWorld())
146 sEluna->Push(L, unit->GetDistance(obj));
147 else
148 {
149 float X = luaL_checknumber(L, 1);
150 float Y = luaL_checknumber(L, 2);
151 float Z = luaL_checknumber(L, 3);
152 sEluna->Push(L, unit->GetDistance(X, Y, Z));
153 }
154 return 1;
155 }
156
157 int GetCreatorGUID(lua_State* L, Unit* unit)
158 {
159 sEluna->Push(L, unit->GetCreatorGUID());
160 return 1;
161 }
162
163 int GetMinionGUID(lua_State* L, Unit* unit)
164 {
165 sEluna->Push(L, unit->GetPetGUID());
166 return 1;
167 }
168
169 int GetCharmerGUID(lua_State* L, Unit* unit)
170 {
171 sEluna->Push(L, unit->GetCharmerGUID());
172 return 1;
173 }
174
175 int GetCharmGUID(lua_State* L, Unit* unit)
176 {
177 sEluna->Push(L, unit->GetCharmGUID());
178 return 1;
179 }
180
181 int GetPetGUID(lua_State* L, Unit* unit)
182 {
183 sEluna->Push(L, unit->GetPetGUID());
184 return 1;
185 }
186
187 int GetCritterGUID(lua_State* L, Unit* unit)
188 {
189 sEluna->Push(L, unit->GetCritterGUID());
190 return 1;
191 }
192
193 int GetControllerGUID(lua_State* L, Unit* unit)
194 {
195 sEluna->Push(L, unit->GetCharmerOrOwnerGUID());
196 return 1;
197 }
198
199 int GetControllerGUIDS(lua_State* L, Unit* unit)
200 {
201 sEluna->Push(L, unit->GetCharmerOrOwnerOrOwnGUID());
202 return 1;
203 }
204
205 int GetStat(lua_State* L, Unit* unit)
206 {
207 uint32 stat = luaL_checkunsigned(L, 1);
208
209 if (stat >= MAX_STATS)
210 return 0;
211
212 sEluna->Push(L, unit->GetStat((Stats)stat));
213 return 1;
214 }
215
216 int GetBaseSpellPower(lua_State* L, Unit* unit)
217 {
218 uint32 spellschool = luaL_checkunsigned(L, 1);
219
220 if (spellschool >= MAX_SPELL_SCHOOL)
221 return 0;
222
223 sEluna->Push(L, unit->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + spellschool));
224 return 1;
225 }
226
227 int SetPvP(lua_State* L, Unit* unit)
228 {
229 bool apply = luaL_optbool(L, 1, true);
230
231 unit->SetPvP(apply);
232 return 0;
233 }
234
235 int SetFFA(lua_State* L, Unit* unit)
236 {
237 bool apply = luaL_optbool(L, 1, true);
238
239 if (apply)
241 else
243
244 return 0;
245 }
246
247 int SetSanctuary(lua_State* L, Unit* unit)
248 {
249 bool apply = luaL_optbool(L, 1, true);
250
251 if (apply)
252 {
254 unit->CombatStop();
255 unit->CombatStopWithPets();
256 }
257 else
259
260 return 0;
261 }
262
263 int IsAuctioneer(lua_State* L, Unit* unit)
264 {
265 sEluna->Push(L, unit->IsAuctioner());
266 return 1;
267 }
268
269 int IsGuildMaster(lua_State* L, Unit* unit)
270 {
271 sEluna->Push(L, unit->IsGuildMaster());
272 return 1;
273 }
274
275 int IsInnkeeper(lua_State* L, Unit* unit)
276 {
277 sEluna->Push(L, unit->IsInnkeeper());
278 return 1;
279 }
280
281 int IsTrainer(lua_State* L, Unit* unit)
282 {
283 sEluna->Push(L, unit->IsTrainer());
284 return 1;
285 }
286
287 int IsGossip(lua_State* L, Unit* unit)
288 {
289 sEluna->Push(L, unit->IsGossip());
290 return 1;
291 }
292
293 int IsTaxi(lua_State* L, Unit* unit)
294 {
295 sEluna->Push(L, unit->IsTaxi());
296 return 1;
297 }
298
299 int IsSpiritHealer(lua_State* L, Unit* unit)
300 {
301 sEluna->Push(L, unit->IsSpiritHealer());
302 return 1;
303 }
304
305 int IsSpiritGuide(lua_State* L, Unit* unit)
306 {
307 sEluna->Push(L, unit->IsSpiritGuide());
308 return 1;
309 }
310
311 int IsTabardDesigner(lua_State* L, Unit* unit)
312 {
313 sEluna->Push(L, unit->IsTabardDesigner());
314 return 1;
315 }
316
317 int IsServiceProvider(lua_State* L, Unit* unit)
318 {
319 sEluna->Push(L, unit->IsServiceProvider());
320 return 1;
321 }
322
323 int IsSpiritService(lua_State* L, Unit* unit)
324 {
325 sEluna->Push(L, unit->IsSpiritService());
326 return 1;
327 }
328
329 int HealthBelowPct(lua_State* L, Unit* unit)
330 {
331 sEluna->Push(L, unit->HealthBelowPct(luaL_checkint(L, 1)));
332 return 1;
333 }
334
335 int HealthAbovePct(lua_State* L, Unit* unit)
336 {
337 sEluna->Push(L, unit->HealthAbovePct(luaL_checkint(L, 1)));
338 return 1;
339 }
340
341 int Emote(lua_State* L, Unit* unit)
342 {
343 unit->HandleEmoteCommand(luaL_checkunsigned(L, 1));
344 return 0;
345 }
346
347 int CountPctFromCurHealth(lua_State* L, Unit* unit)
348 {
349 sEluna->Push(L, unit->CountPctFromCurHealth(luaL_checkint(L, 1)));
350 return 1;
351 }
352
353 int CountPctFromMaxHealth(lua_State* L, Unit* unit)
354 {
355 sEluna->Push(L, unit->CountPctFromMaxHealth(luaL_checkint(L, 1)));
356 return 1;
357 }
358
359 int SetSheath(lua_State* L, Unit* unit)
360 {
361 uint32 sheathed = luaL_checkunsigned(L, 1);
362 if (sheathed >= MAX_SHEATH_STATE)
363 return 0;
364
365 unit->SetSheath((SheathState)sheathed);
366 return 0;
367 }
368
369 int IsUnderWater(lua_State* L, Unit* unit)
370 {
371 sEluna->Push(L, unit->IsUnderWater());
372 return 1;
373 }
374
375 int IsInWater(lua_State* L, Unit* unit)
376 {
377 sEluna->Push(L, unit->IsInWater());
378 return 1;
379 }
380
381 int GetVictim(lua_State* L, Unit* unit)
382 {
383 sEluna->Push(L, unit->GetVictim());
384 return 1;
385 }
386
387 int GetNearbyTarget(lua_State* L, Unit* unit)
388 {
389 float dist = luaL_optnumber(L, 1, 5.0f);
390 Unit* exclude = sEluna->CHECK_UNIT(L, 2);
391
392 sEluna->Push(L, unit->SelectNearbyTarget(exclude, dist));
393 return 1;
394 }
395
396 int SendChatMessageToPlayer(lua_State* L, Unit* unit)
397 {
398 //@TODO
399 //uint8 type = luaL_checkunsigned(L, 1);
400 //uint32 lang = luaL_checkunsigned(L, 2);
401 //const char* msg = luaL_checkstring(L, 3);
402 //Player* target = sEluna->CHECK_PLAYER(L, 4);
403 //if (!target || type == CHAT_MSG_CHANNEL)
404 // return 0;
405
406 //WorldPacket* data = new WorldPacket();
407 //uint32 messageLength = (uint32)strlen(msg) + 1;
408 //data->Initialize(SMSG_MESSAGECHAT, 100);
409 //*data << (uint8)type;
410 //*data << lang;
411 //*data << unit->GetGUIDLow();
412 //*data << uint32(0);
413 //*data << unit->GetGUIDLow();
414 //*data << messageLength;
415 //*data << msg;
416 //if (unit->ToPlayer() && type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
417 // *data << uint8(unit->ToPlayer()->GetChatTag());
418 //else
419 // *data << uint8(0);
420 //target->GetSession()->SendPacket(data);
421 return 0;
422 }
423
424 int GetCurrentSpell(lua_State* L, Unit* unit)
425 {
426 uint32 type = luaL_checkunsigned(L, 1);
427 if (type >= CURRENT_MAX_SPELL)
428 {
429 luaL_error(L, "Invalid spell type (%d)", type);
430 return 0;
431 }
432 sEluna->Push(L, unit->GetCurrentSpell(type));
433 return 1;
434 }
435
436 int SummonGameObject(lua_State* L, Unit* unit)
437 {
438 uint32 entry = luaL_checkunsigned(L, 1);
439 float x = luaL_checknumber(L, 2);
440 float y = luaL_checknumber(L, 3);
441 float z = luaL_checknumber(L, 4);
442 float o = luaL_checknumber(L, 5);
443 uint32 respawnDelay = luaL_optunsigned(L, 6, 30);
444 sEluna->Push(L, unit->SummonGameObject(entry, x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, respawnDelay));
445 return 1;
446 }
447
448 int SpawnCreature(lua_State* L, Unit* unit)
449 {
450 uint32 entry = luaL_checkunsigned(L, 1);
451 float x = luaL_checknumber(L, 2);
452 float y = luaL_checknumber(L, 3);
453 float z = luaL_checknumber(L, 4);
454 float o = luaL_checknumber(L, 5);
455 uint32 spawnType = luaL_optunsigned(L, 6, 0);
456 uint32 despawnTimer = luaL_optunsigned(L, 7, 0);
457
458 TempSummonType type;
459 switch (spawnType)
460 {
461 case 1:
463 break;
464 case 2:
466 break;
467 case 3:
469 break;
470 case 5:
472 break;
473 case 6:
475 break;
476 case 7:
478 break;
479 case 8:
481 break;
482 }
483 sEluna->Push(L, unit->SummonCreature(entry, x, y, z, o, type, despawnTimer));
484 return 1;
485 }
486
487 int DealDamage(lua_State* L, Unit* unit)
488 {
489 Unit* target = sEluna->CHECK_UNIT(L, 1);
490 uint32 amount = luaL_checkunsigned(L, 2);
491
492 if (!target)
493 unit->DealDamage(unit, amount);
494 else
495 unit->DealDamage(target, amount);
496 return 0;
497 }
498
499 int GetStandState(lua_State* L, Unit* unit)
500 {
501 sEluna->Push(L, unit->getStandState());
502 return 0;
503 }
504
505 int KnockbackFrom(lua_State* L, Unit* unit)
506 {
507 float x = luaL_checknumber(L, 1);
508 float y = luaL_checknumber(L, 2);
509 float speedXY = luaL_checknumber(L, 3);
510 float speedZ = luaL_checknumber(L, 4);
511 unit->KnockbackFrom(x, y, speedXY, speedZ);
512 return 0;
513 }
514
515 int JumpTo(lua_State* L, Unit* unit)
516 {
517 WorldObject* obj = sEluna->CHECK_WORLDOBJECT(L, 1);
518 float speedZ = luaL_checknumber(L, 2);
519 if (!obj)
520 return 0;
521
522 unit->JumpTo(obj, speedZ);
523 return 0;
524 }
525
526 int Jump(lua_State* L, Unit* unit)
527 {
528 float speedXY = luaL_checknumber(L, 1);
529 float speedZ = luaL_checknumber(L, 2);
530 bool forward = luaL_optbool(L, 3, true);
531 unit->JumpTo(speedXY, speedZ, forward);
532 return 0;
533 }
534
535 int JumpToCoords(lua_State* L, Unit* unit)
536 {
537 float x = luaL_checknumber(L, 1);
538 float y = luaL_checknumber(L, 2);
539 float z = luaL_checknumber(L, 3);
540 float speedXY = luaL_checknumber(L, 4);
541 float speedZ = luaL_checknumber(L, 5);
542 unit->GetMotionMaster()->MoveJump(x, y, z, speedXY, speedZ);
543 return 0;
544 }
545
546 int MoveCharge(lua_State* L, Unit* unit)
547 {
548 float x = luaL_checknumber(L, 1);
549 float y = luaL_checknumber(L, 2);
550 float z = luaL_checknumber(L, 3);
551 float speed = luaL_checknumber(L, 4);
552 unit->GetMotionMaster()->MoveCharge(x, y, z, speed);
553 return 0;
554 }
555
556 int MoveChase(lua_State* L, Unit* unit)
557 {
558 Unit* target = sEluna->CHECK_UNIT(L, 1);
559 float dist = luaL_optnumber(L, 2, 0.0f);
560 float angle = luaL_optnumber(L, 3, 0.0f);
561 unit->GetMotionMaster()->MoveChase(target, dist, angle);
562 return 0;
563 }
564
565 int SetName(lua_State* L, Unit* unit)
566 {
567 const char* name = luaL_checkstring(L, 1);
568 if (std::string(name).length() > 0)
569 unit->SetName(name);
570 return 0;
571 }
572
573 int SetStunned(lua_State* L, Unit* unit)
574 {
575 bool apply = luaL_optbool(L, 1, true);
576 unit->SetControlled(apply, UNIT_STATE_STUNNED);
577 return 0;
578 }
579
580 int SetRooted(lua_State* L, Unit* unit)
581 {
582 bool apply = luaL_optbool(L, 1, true);
583 unit->SetControlled(apply, UNIT_STATE_ROOT);
584 return 0;
585 }
586
587 int SetConfused(lua_State* L, Unit* unit)
588 {
589 bool apply = luaL_optbool(L, 1, true);
591 return 0;
592 }
593
594 int SetFeared(lua_State* L, Unit* unit)
595 {
596 bool apply = luaL_optbool(L, 1, true);
597 unit->SetControlled(apply, UNIT_STATE_FLEEING);
598 return 0;
599 }
600
601 int MoveTo(lua_State* L, Unit* unit)
602 {
603 //@TODO
604 float id = luaL_checknumber(L, 1);
605 float x = luaL_checknumber(L, 2);
606 float y = luaL_checknumber(L, 3);
607 float z = luaL_checknumber(L, 4);
608 bool generatePath = luaL_optbool(L, 5, true);
609 Position movePosition = { x, y, z };
610 unit->GetMotionMaster()->MovePoint(id, movePosition);
611 return 0;
612 }
613
614 int MoveFollow(lua_State* L, Unit* unit)
615 {
616 Unit* target = sEluna->CHECK_UNIT(L, 1);
617 float dist = luaL_checknumber(L, 2);
618 float angle = luaL_checknumber(L, 3);
619 unit->GetMotionMaster()->MoveFollow(target, dist, angle);
620 return 0;
621 }
622
623 int MoveClear(lua_State* L, Unit* unit)
624 {
625 unit->GetMotionMaster()->Clear();
626 return 0;
627 }
628
629 int MoveRandom(lua_State* L, Unit* unit)
630 {
631 float radius = luaL_checknumber(L, 1);
632 unit->GetMotionMaster()->MoveRandom(radius);
633 return 0;
634 }
635
636 int MoveRotate(lua_State* L, Unit* unit)
637 {
638 uint32 time = luaL_checkunsigned(L, 1);
639 bool left = luaL_optbool(L, 2, true);
641 return 0;
642 }
643
644 int SetSpeed(lua_State* L, Unit* unit)
645 {
646 uint32 type = luaL_checkunsigned(L, 1);
647 float rate = luaL_checknumber(L, 2);
648 bool forced = luaL_optbool(L, 3, false);
649 if (type >= MAX_MOVE_TYPE)
650 luaL_error(L, "Invalid movement type (%d)", type);
651 else
652 unit->SetSpeed((UnitMoveType)type, rate, forced);
653 return 0;
654 }
655
656 int GetDisplayId(lua_State* L, Unit* unit)
657 {
658 sEluna->Push(L, unit->GetDisplayId());
659 return 1;
660 }
661
662 int GetNativeDisplayId(lua_State* L, Unit* unit)
663 {
664 sEluna->Push(L, unit->GetNativeDisplayId());
665 return 1;
666 }
667
668 int GetLevel(lua_State* L, Unit* unit)
669 {
670 sEluna->Push(L, unit->getLevel());
671 return 1;
672 }
673
674 int GetHealth(lua_State* L, Unit* unit)
675 {
676 sEluna->Push(L, unit->GetHealth());
677 return 1;
678 }
679
680 int GetPower(lua_State* L, Unit* unit)
681 {
682 int type = luaL_optint(L, 1, -1);
683 if (type == -1)
684 {
685
686 switch (unit->getClass())
687 {
688 case 1:
689 type = POWER_RAGE;
690 break;
691 case 4:
692 type = POWER_ENERGY;
693 break;
694 case 6:
695 type = POWER_RUNIC_POWER;
696 break;
697 case 2:
698 case 3:
699 case 5:
700 case 7:
701 case 8:
702 case 9:
703 case 11:
704 type = POWER_MANA;
705 break;
706 default:
707 type = POWER_MANA;
708 }
709 }
710 else if (type >= POWER_ALL)
711 {
712 luaL_error(L, "Invalid power type (%d)", type);
713 return 0;
714 }
715
716 sEluna->Push(L, unit->GetPower((Powers) type));
717 return 1;
718 }
719
720 int GetMaxPower(lua_State* L, Unit* unit)
721 {
722 int type = luaL_optint(L, 1, -1);
723 if (type == -1)
724 {
725
726 switch (unit->getClass())
727 {
728 case 1:
729 type = POWER_RAGE;
730 break;
731 case 4:
732 type = POWER_ENERGY;
733 break;
734 case 6:
735 type = POWER_RUNIC_POWER;
736 break;
737 case 2:
738 case 3:
739 case 5:
740 case 7:
741 case 8:
742 case 9:
743 case 11:
744 type = POWER_MANA;
745 break;
746 default:
747 type = POWER_MANA;
748 }
749 }
750 else if (type < 0 || type >= POWER_ALL)
751 {
752 luaL_error(L, "Invalid index (%d)", type);
753 return 0;
754 }
755
756 sEluna->Push(L, unit->GetMaxPower((Powers) type));
757 return 1;
758 }
759
760 int GetPowerType(lua_State* L, Unit* unit)
761 {
762 sEluna->Push(L, unit->getPowerType());
763 return 1;
764 }
765
766 int GetMaxHealth(lua_State* L, Unit* unit)
767 {
768 sEluna->Push(L, unit->GetMaxHealth());
769 return 1;
770 }
771
772 int GetHealthPct(lua_State* L, Unit* unit)
773 {
774 sEluna->Push(L, unit->GetHealthPct());
775 return 1;
776 }
777
778 int GetPowerPct(lua_State* L, Unit* unit)
779 {
780 float percent = (unit->GetPower(unit->getPowerType()) / unit->GetMaxPower(unit->getPowerType())) * 100;
781 sEluna->Push(L, percent);
782 return 1;
783 }
784
785 int GetGender(lua_State* L, Unit* unit)
786 {
787 sEluna->Push(L, unit->getGender());
788 return 1;
789 }
790
791 int GetRace(lua_State* L, Unit* unit)
792 {
793 sEluna->Push(L, unit->getRace());
794 return 1;
795 }
796
797 int GetClass(lua_State* L, Unit* unit)
798 {
799 sEluna->Push(L, unit->getClass());
800 return 1;
801 }
802
803 int GetCreatureType(lua_State* L, Unit* unit)
804 {
805 sEluna->Push(L, unit->GetCreatureType());
806 return 1;
807 }
808
809 int GetClassAsString(lua_State* L, Unit* unit)
810 {
811 const char* str = NULL;
812 switch (unit->getClass())
813 {
814 case 1:
815 str = "Warrior";
816 break;
817 case 2:
818 str = "Paladin";
819 break;
820 case 3:
821 str = "Hunter";
822 break;
823 case 4:
824 str = "Rogue";
825 break;
826 case 5:
827 str = "Priest";
828 break;
829 case 6:
830 str = "Death Knight";
831 break;
832 case 7:
833 str = "Shaman";
834 break;
835 case 8:
836 str = "Mage";
837 break;
838 case 9:
839 str = "Warlock";
840 break;
841 case 11:
842 str = "Druid";
843 break;
844 default:
845 str = "NULL";
846 break;
847 }
848
849 sEluna->Push(L, str);
850 return 1;
851 }
852
853 int GetFaction(lua_State* L, Unit* unit)
854 {
855 sEluna->Push(L, unit->getFaction());
856 return 1;
857 }
858
859 int SetFaction(lua_State* L, Unit* unit)
860 {
861 uint32 factionId = luaL_checkunsigned(L, 1);
862 unit->setFaction(factionId);
863 return 0;
864 }
865
866 int SetLevel(lua_State* L, Unit* unit)
867 {
868 uint32 newLevel = luaL_checkunsigned(L, 1);
869 unit->SetLevel(newLevel);
870 return 0;
871 }
872
873 int SetPhaseMask(lua_State* L, Unit* unit)
874 {
875 uint32 phaseMask = luaL_checkunsigned(L, 1);
876 bool Update = luaL_optbool(L, 2, true);
877 unit->SetPhaseMask(phaseMask, Update);
878 return 0;
879 }
880
881 int SetHealth(lua_State* L, Unit* unit)
882 {
883 uint32 amt = luaL_checkunsigned(L, 1);
884 unit->SetHealth(amt);
885 return 0;
886 }
887
888 int SetMaxHealth(lua_State* L, Unit* unit)
889 {
890 uint32 amt = luaL_checkunsigned(L, 1);
891 unit->SetMaxHealth(amt);
892 return 0;
893 }
894
895 int SetPower(lua_State* L, Unit* unit)
896 {
897 int type = luaL_checkinteger(L, 1);
898 uint32 amt = luaL_checkunsigned(L, 2);
899
900 switch (type)
901 {
902 case POWER_MANA:
903 unit->SetPower(POWER_MANA, amt);
904 break;
905 case POWER_RAGE:
906 unit->SetPower(POWER_RAGE, amt);
907 break;
908 case POWER_ENERGY:
909 unit->SetPower(POWER_ENERGY, amt);
910 break;
912 unit->SetPower(POWER_RUNIC_POWER, amt);
913 break;
914 default:
915 luaL_error(L, "Invalid power type (%d)", type);
916 break;
917 }
918 return 0;
919 }
920
921 int SetMaxPower(lua_State* L, Unit* unit)
922 {
923 int type = luaL_checkinteger(L, 1);
924 int amt = luaL_checkunsigned(L, 2);
925
926 switch (type)
927 {
928 case POWER_MANA:
929 unit->SetMaxPower(POWER_MANA, amt);
930 break;
931 case POWER_RAGE:
932 unit->SetMaxPower(POWER_RAGE, amt);
933 break;
934 case POWER_ENERGY:
935 unit->SetMaxPower(POWER_ENERGY, amt);
936 break;
938 unit->SetMaxPower(POWER_RUNIC_POWER, amt);
939 break;
940 default:
941 luaL_error(L, "Invalid power type (%d)", type);
942 break;
943 }
944 return 0;
945 }
946
947 int SetDisplayId(lua_State* L, Unit* unit)
948 {
949 uint32 model = luaL_checkunsigned(L, 1);
950 unit->SetDisplayId(model);
951 return 0;
952 }
953
954 int SetNativeDisplayId(lua_State* L, Unit* unit)
955 {
956 uint32 model = luaL_checkunsigned(L, 1);
957 unit->SetNativeDisplayId(model);
958 return 0;
959 }
960
961 int SetFacing(lua_State* L, Unit* unit)
962 {
963 float o = luaL_checknumber(L, 1);
964 unit->SetFacingTo(o);
965 return 0;
966 }
967
968 int SetCreatorGUID(lua_State* L, Unit* unit)
969 {
970 uint64 guid = sEluna->CHECK_ULONG(L, 1);
971 unit->SetCreatorGUID(ObjectGuid(guid));
972 return 0;
973 }
974
975 int SetMinionGUID(lua_State* L, Unit* unit)
976 {
977 uint64 guid = sEluna->CHECK_ULONG(L, 1);
978 unit->SetPetGUID(ObjectGuid(guid)); // TC MinionGuid methods = same field as Mangos PetGuid
979 return 0;
980 }
981
982 int SetCharmerGUID(lua_State* L, Unit* unit)
983 {
984 uint64 guid = sEluna->CHECK_ULONG(L, 1);
985 unit->SetCharmerGUID(ObjectGuid(guid));
986 return 0;
987 }
988
989 int SetPetGUID(lua_State* L, Unit* unit)
990 {
991 uint64 guid = sEluna->CHECK_ULONG(L, 1);
992 unit->SetPetGUID(ObjectGuid(guid));
993 return 0;
994 }
995
996 int SetCritterGUID(lua_State* L, Unit* unit)
997 {
998 uint64 guid = sEluna->CHECK_ULONG(L, 1);
999 unit->SetCritterGUID(ObjectGuid(guid));
1000 return 0;
1001 }
1002
1003 int SetWaterWalk(lua_State* L, Unit* unit)
1004 {
1005 bool enable = luaL_optbool(L, 1, true);
1006
1007 unit->SetWaterWalking(enable);
1008 return 0;
1009 }
1010
1011 int IsAlive(lua_State* L, Unit* unit)
1012 {
1013 sEluna->Push(L, unit->IsAlive());
1014 return 1;
1015 }
1016
1017 int IsDead(lua_State* L, Unit* unit)
1018 {
1019 sEluna->Push(L, unit->isDead());
1020 return 1;
1021 }
1022
1023 int IsDying(lua_State* L, Unit* unit)
1024 {
1025 sEluna->Push(L, unit->isDying());
1026 return 1;
1027 }
1028
1029 int IsBanker(lua_State* L, Unit* unit)
1030 {
1031 sEluna->Push(L, unit->IsBanker());
1032 return 1;
1033 }
1034
1035 int IsVendor(lua_State* L, Unit* unit)
1036 {
1037 sEluna->Push(L, unit->IsVendor());
1038 return 1;
1039 }
1040
1041 int IsBattleMaster(lua_State* L, Unit* unit)
1042 {
1043 sEluna->Push(L, unit->IsBattleMaster());
1044 return 1;
1045 }
1046
1047 int IsCharmed(lua_State* L, Unit* unit)
1048 {
1049 sEluna->Push(L, unit->IsCharmed());
1050 return 1;
1051 }
1052
1053 int IsArmorer(lua_State* L, Unit* unit)
1054 {
1055 sEluna->Push(L, unit->IsArmorer());
1056 return 1;
1057 }
1058
1059 int IsAttackingPlayer(lua_State* L, Unit* unit)
1060 {
1061 sEluna->Push(L, unit->isAttackingPlayer());
1062 return 1;
1063 }
1064
1065 int IsInWorld(lua_State* L, Unit* unit)
1066 {
1067 sEluna->Push(L, unit->IsInWorld());
1068 return 1;
1069 }
1070
1071 int IsPvPFlagged(lua_State* L, Unit* unit)
1072 {
1073 sEluna->Push(L, unit->IsPvP());
1074 return 1;
1075 }
1076
1077 int IsInCombat(lua_State* L, Unit* unit)
1078 {
1079 sEluna->Push(L, unit->IsInCombat());
1080 return 1;
1081 }
1082
1083 int SendUnitWhisper(lua_State* L, Unit* unit)
1084 {
1085 //@TODO
1086 const char* msg = luaL_checkstring(L, 1);
1087 uint32 lang = luaL_checkunsigned(L, 2);
1088 ObjectGuid receiver(uint64(luaL_checknumber(L, 3)));
1089 bool bossWhisper = luaL_optbool(L, 4, false);
1090
1091 WorldObject* target = receiver ? ElunaGetWorldObject(*unit, receiver) : NULL;
1092 if (target && target->ToPlayer() && unit->ToPlayer() && std::string(msg).length() > 0)
1093 unit->ToPlayer()->Whisper(msg, Language(lang), target->ToPlayer()->GetGUID());
1094 return 0;
1095 }
1096
1097 int SendUnitEmote(lua_State* L, Unit* unit)
1098 {
1099 //@TODO
1100 const char* msg = luaL_checkstring(L, 1);
1101 ObjectGuid receiver(uint64(luaL_checknumber(L, 2)));
1102 bool bossEmote = luaL_optbool(L, 3, false);
1103
1104
1105 WorldObject* target = receiver ? ElunaGetWorldObject(*unit, receiver) : NULL;
1106
1107 if (unit->ToPlayer() && std::string(msg).length() > 0)
1108 unit->ToPlayer()->TextEmote(msg);
1109 return 0;
1110 }
1111
1112 int SendUnitSay(lua_State* L, Unit* unit)
1113 {
1114 //@TODO
1115 const char* msg = luaL_checkstring(L, 1);
1116 uint32 language = luaL_checknumber(L, 2);
1117 ObjectGuid guid(uint64(luaL_checknumber(L, 3)));
1118
1119 WorldObject* target = guid ? ElunaGetWorldObject(*unit, guid) : NULL;
1120
1121 if (unit->ToPlayer() && std::string(msg).length() > 0)
1122 unit->ToPlayer()->Say(msg, Language(language));
1123 return 0;
1124 }
1125
1126 int SendUnitYell(lua_State* L, Unit* unit)
1127 {
1128 //@TODO
1129 const char* msg = luaL_checkstring(L, 1);
1130 uint32 language = luaL_checknumber(L, 2);
1131 ObjectGuid guid(uint64(luaL_checknumber(L, 3)));
1132
1133 WorldObject* target = guid ? ElunaGetWorldObject(*unit, guid) : NULL;
1134
1135 if (unit->ToPlayer() && std::string(msg).length() > 0)
1136 unit->ToPlayer()->Yell(msg, Language(language));
1137 return 0;
1138 }
1139
1140 int DeMorph(lua_State* L, Unit* unit)
1141 {
1142 unit->DeMorph();
1143 return 0;
1144 }
1145
1146 int CastSpell(lua_State* L, Unit* unit)
1147 {
1148 Object* obj = sEluna->CHECK_OBJECT(L, 1);
1149 if (!obj)
1150 return 0;
1151 uint32 spell = luaL_checkunsigned(L, 2);
1152 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell);
1153 if (!spellInfo)
1154 return 0;
1155 bool triggered = luaL_optbool(L, 3, true);
1156
1157 SpellCastTargets targets;
1158 if (Unit* unitTarget = obj->ToUnit())
1159 targets.SetUnitTarget(unitTarget);
1160 else if (GameObject* goTarget = obj->ToGameObject())
1161 targets.SetGOTarget(goTarget);
1162 else if (obj->GetTypeId() == TYPEID_ITEM)
1163 {
1164 if (Item* itemTarget = (Item*)obj)
1165 targets.SetItemTarget(itemTarget);
1166 }
1167 else
1168 return 0;
1169
1170 unit->CastSpell(targets, spellInfo, NULL, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE);
1171 return 0;
1172 }
1173
1174 int CastSpellAoF(lua_State* L, Unit* unit)
1175 {
1176 float _x = luaL_checknumber(L, 1);
1177 float _y = luaL_checknumber(L, 2);
1178 float _z = luaL_checknumber(L, 3);
1179 uint32 spell = luaL_checkunsigned(L, 4);
1180 bool triggered = luaL_optbool(L, 5, true);
1181 unit->CastSpell(_x, _y, _z, spell, triggered);
1182 return 0;
1183 }
1184
1185 int GetAura(lua_State* L, Unit* unit)
1186 {
1187 //@TODO
1188 //uint32 spellID = luaL_checkunsigned(L, 1);
1189 //sEluna->Push(L, unit->GetAura(spellID));
1190 return 1;
1191 }
1192
1193 int GetCombatTime(lua_State* L, Unit* unit)
1194 {
1195 sEluna->Push(L, unit->GetCombatTimer());
1196 return 1;
1197 }
1198
1199 int ClearInCombat(lua_State* L, Unit* unit)
1200 {
1201 unit->ClearInCombat();
1202 return 0;
1203 }
1204
1205 int StopSpellCast(lua_State* L, Unit* unit)
1206 {
1207 uint32 spellId = luaL_optunsigned(L, 1, 0);
1208 unit->CastStop(spellId);
1209 return 0;
1210 }
1211
1212 int InterruptSpell(lua_State* L, Unit* unit)
1213 {
1214 int spellType = luaL_checkint(L, 1);
1215 bool delayed = luaL_optbool(L, 2, true);
1216 bool instant = luaL_optbool(L, 3, true);
1217 switch (spellType)
1218 {
1219 case 0:
1220 spellType = CURRENT_MELEE_SPELL;
1221 break;
1222 case 1:
1223 spellType = CURRENT_GENERIC_SPELL;
1224 break;
1225 case 2:
1226 spellType = CURRENT_CHANNELED_SPELL;
1227 break;
1228 case 3:
1229 spellType = CURRENT_AUTOREPEAT_SPELL;
1230 break;
1231 }
1232 unit->InterruptSpell((CurrentSpellTypes)spellType, delayed, instant);
1233 return 0;
1234 }
1235
1236 int AddAura(lua_State* L, Unit* unit)
1237 {
1238 //@TODO
1239 //uint32 spellId = luaL_checkunsigned(L, 1);
1240 //Unit* target = sEluna->CHECK_UNIT(L, 2);
1241 //if (!target)
1242 // return 0;
1243 //sEluna->Push(L, unit->AddAura(spellId, target));
1244 return 1;
1245 }
1246
1247 int RemoveAura(lua_State* L, Unit* unit)
1248 {
1249 uint32 spellId = luaL_checkunsigned(L, 1);
1250 unit->RemoveAurasDueToSpell(spellId);
1251 return 0;
1252 }
1253
1254 int RemoveAllAuras(lua_State* L, Unit* unit)
1255 {
1256 unit->RemoveAllAuras();
1257 return 0;
1258 }
1259
1260 int PlayDirectSound(lua_State* L, Unit* unit)
1261 {
1262 uint32 soundId = luaL_checkunsigned(L, 1);
1263 Player* player = sEluna->CHECK_PLAYER(L, 2);
1264 if (!sSoundEntriesStore.LookupEntry(soundId))
1265 return 0;
1266
1267 if (player)
1268 unit->PlayDirectSound(soundId, player);
1269 else
1270 unit->PlayDirectSound(soundId);
1271 return 0;
1272 }
1273
1274 int PlayDistanceSound(lua_State* L, Unit* unit)
1275 {
1276 uint32 soundId = luaL_checkunsigned(L, 1);
1277 Player* player = sEluna->CHECK_PLAYER(L, 2);
1278 if (!sSoundEntriesStore.LookupEntry(soundId))
1279 return 0;
1280
1281 if (player)
1282 unit->PlayDistanceSound(soundId, player);
1283 return 0;
1284 }
1285
1286 int Kill(lua_State* L, Unit* unit)
1287 {
1288 Unit* target = sEluna->CHECK_UNIT(L, 1);
1289 bool durLoss = luaL_optbool(L, 2, true);
1290 unit->Kill((target ? target : unit), durLoss);
1291 return 0;
1292 }
1293
1294 int RegisterEvent(lua_State* L, Unit* unit)
1295 {
1296 luaL_checktype(L, 1, LUA_TFUNCTION);
1297 uint32 delay = luaL_checkunsigned(L, 2);
1298 uint32 repeats = luaL_checkunsigned(L, 3);
1299
1300 lua_settop(L, 1);
1301 int functionRef = lua_ref(L, true);
1302 sEluna->Push(L, sEluna->m_EventMgr.AddEvent(&unit->m_Events, functionRef, delay, repeats, unit));
1303 return 1;
1304 }
1305
1306 int RemoveEventById(lua_State* L, Unit* unit)
1307 {
1308 int eventId = luaL_checkinteger(L, 1);
1309 sEluna->m_EventMgr.RemoveEvent(&unit->m_Events, eventId);
1310 return 0;
1311 }
1312
1313 int RemoveEvents(lua_State* L, Unit* unit)
1314 {
1315 sEluna->m_EventMgr.RemoveEvents(&unit->m_Events);
1316 return 0;
1317 }
1318
1319 /* Vehicle */
1320 int GetVehicle(lua_State* L, Unit* unit)
1321 {
1322 sEluna->Push(L, unit->GetVehicle());
1323 return 1;
1324 }
1325
1326 int GetFriendlyUnitsInRange(lua_State* L, Unit* unit) // error in compile TODO
1327 {
1328 // float range = luaL_optnumber(L, 1, SIZE_OF_GRIDS);
1329
1330 // UnitList list;
1331 // //WoWSource::AnyFriendlyUnitInObjectRangeCheck checker(unit, unit, range);
1332 // //WoWSource::UnitListSearcher<WoWSource::AnyFriendlyUnitInObjectRangeCheck> searcher(unit, list, checker);
1333 // Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(unit, unit, range);
1334 // Trinity::UnitListSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(unit, list, u_check);
1335 // unit->VisitNearbyObject(range, searcher);
1336 // Eluna::ObjectGUIDCheck guidCheck(unit->GetGUID());
1337 // list.remove_if (guidCheck);
1338
1339 // lua_newtable(L);
1340 // int tbl = lua_gettop(L);
1341 // uint32 i = 0;
1342
1343 // for (UnitList::const_iterator it = list.begin(); it != list.end(); ++it)
1344 // {
1345 // sEluna->Push(L, ++i);
1346 // sEluna->Push(L, *it);
1347 // lua_settable(L, tbl);
1348 // }
1349
1350 // lua_settop(L, tbl);
1351 return 1;
1352 }
1353
1354 int GetUnfriendlyUnitsInRange(lua_State* L, Unit* unit) // error in compile TODO
1355 {
1356 // float range = luaL_optnumber(L, 1, SIZE_OF_GRIDS);
1357
1358 // UnitList list;
1359 // //WoWSource::AnyUnfriendlyUnitInObjectRangeCheck checker(unit, unit, range);
1360 // //WoWSource::UnitListSearcher<WoWSource::AnyUnfriendlyUnitInObjectRangeCheck> searcher(unit, list, checker);
1361 // Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(unit, unit, range);
1362 // Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(unit, list, u_check);
1363 // unit->VisitNearbyObject(range, searcher);
1364 // Eluna::ObjectGUIDCheck guidCheck(unit->GetGUID());
1365 // list.remove_if (guidCheck);
1366
1367 // lua_newtable(L);
1368 // int tbl = lua_gettop(L);
1369 // uint32 i = 0;
1370
1371 // for (UnitList::const_iterator it = list.begin(); it != list.end(); ++it)
1372 // {
1373 // sEluna->Push(L, ++i);
1374 // sEluna->Push(L, *it);
1375 // lua_settable(L, tbl);
1376 // }
1377
1378 // lua_settop(L, tbl);
1379 return 1;
1380 }
1381
1382 int AttackStop(lua_State* L, Unit* unit)
1383 {
1384 sEluna->Push(L, unit->AttackStop());
1385 return 1;
1386 }
1387
1388 int SetCanFly(lua_State* L, Unit* unit)
1389 {
1390 bool apply = luaL_optbool(L, 1, true);
1391 unit->SetCanFly(apply);
1392 return 0;
1393 }
1394
1395 int SetVisible(lua_State* L, Unit* unit)
1396 {
1397 bool x = luaL_optbool(L, 1, true);
1398 unit->SetVisible(x);
1399 return 0;
1400 }
1401
1402 int IsVisible(lua_State* L, Unit* unit)
1403 {
1404 sEluna->Push(L, unit->IsVisible());
1405 return 1;
1406 }
1407
1408 int IsMoving(lua_State* L, Unit* unit)
1409 {
1410 sEluna->Push(L, unit->isMoving());
1411 return 1;
1412 }
1413
1414 int IsFlying(lua_State* L, Unit* unit)
1415 {
1416 sEluna->Push(L, unit->IsFlying());
1417 return 1;
1418 }
1419
1420 int IsStopped(lua_State* L, Unit* unit)
1421 {
1422 sEluna->Push(L, unit->IsStopped());
1423 return 1;
1424 }
1425
1426 int IsQuestGiver(lua_State* L, Unit* unit)
1427 {
1428 sEluna->Push(L, unit->IsQuestGiver());
1429 return 1;
1430 }
1431
1432 int RestoreDisplayId(lua_State* L, Unit* unit)
1433 {
1434 unit->RestoreDisplayId();
1435 return 0;
1436 }
1437
1438 int RestoreFaction(lua_State* L, Unit* unit)
1439 {
1440 unit->RestoreFaction();
1441 return 0;
1442 }
1443
1444 int RemoveBindSightAuras(lua_State* L, Unit* unit)
1445 {
1446 unit->RemoveBindSightAuras();
1447 return 0;
1448 }
1449
1450 int RemoveCharmAuras(lua_State* L, Unit* unit)
1451 {
1452 unit->RemoveCharmAuras();
1453 return 0;
1454 }
1455
1456 int StopMoving(lua_State* L, Unit* unit)
1457 {
1458 unit->StopMoving();
1459 return 0;
1460 }
1461
1462 int AddUnitState(lua_State* L, Unit* unit)
1463 {
1464 uint32 state = luaL_checkunsigned(L, 1);
1465
1466 unit->AddUnitState(state);
1467 return 0;
1468 }
1469
1470 int ClearUnitState(lua_State* L, Unit* unit)
1471 {
1472 uint32 state = luaL_checkunsigned(L, 1);
1473
1474 unit->ClearUnitState(state);
1475 return 0;
1476 }
1477
1478 int HasUnitState(lua_State* L, Unit* unit)
1479 {
1480 uint32 state = luaL_checkunsigned(L, 1);
1481
1482 sEluna->Push(L, unit->HasUnitState(state));
1483 return 1;
1484 }
1485
1486 int DisableMelee(lua_State* L, Unit* unit)
1487 {
1488 bool apply = luaL_optbool(L, 1, true);
1489
1490 if (apply)
1492 else
1494 return 0;
1495 }
1496
1497 int SummonGuardian(lua_State* L, Unit* unit)
1498 {
1499 uint32 entry = luaL_checkunsigned(L, 1);
1500 float x = luaL_checknumber(L, 2);
1501 float y = luaL_checknumber(L, 3);
1502 float z = luaL_checknumber(L, 4);
1503 float o = luaL_checknumber(L, 5);
1504 uint32 desp = luaL_optunsigned(L, 6, 0);
1505
1506 SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(61);
1507 if (!properties)
1508 return 0;
1509 Position pos;
1510 pos.Relocate(x,y,z,o);
1511 TempSummon* summon = unit->GetMap()->SummonCreature(entry, pos, properties, desp, unit);
1512
1513 if (!summon)
1514 return 0;
1516 ((Guardian*)summon)->InitStatsForLevel(unit->getLevel());
1517 if (properties && properties->Category == SUMMON_CATEGORY_ALLY)
1518 summon->setFaction(unit->getFaction());
1519 if (summon->GetEntry() == 27893)
1520 {
1521 if (uint32 weapon = unit->GetUInt32Value(PLAYER_FIELD_VISIBLE_ITEMS + 16))
1522 {
1523 summon->SetDisplayId(11686);
1525 }
1526 else
1527 summon->SetDisplayId(1126);
1528 }
1529 summon->AI()->EnterEvadeMode();
1530
1531 sEluna->Push(L, summon);
1532 return 1;
1533 }
1534};
1535#endif
DBCStorage< SummonPropertiesEntry > sSummonPropertiesStore(SummonPropertiesfmt)
DBCStorage< SoundEntriesEntry > sSoundEntriesStore(SoundEntriesfmt)
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
static constexpr TempSummonType TEMPSUMMON_DEAD_DESPAWN
static constexpr TempSummonType TEMPSUMMON_MANUAL_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_DESPAWN
WorldObject * ElunaGetWorldObject(WorldObject const &context, uint64 guid)
static constexpr TempSummonType TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
static constexpr TypeID TYPEID_ITEM
static constexpr TempSummonType TEMPSUMMON_CORPSE_TIMED_DESPAWN
static constexpr TempSummonType TEMPSUMMON_CORPSE_DESPAWN
#define sEluna
Definition LuaEngine.h:710
@ ROTATE_DIRECTION_RIGHT
@ ROTATE_DIRECTION_LEFT
TempSummonType
Definition Object.h:67
#define MAX_STATS
Powers
@ POWER_RAGE
@ POWER_ALL
@ POWER_RUNIC_POWER
@ POWER_ENERGY
@ POWER_MANA
Language
Stats
#define MAX_SPELL_SCHOOL
@ SUMMON_CATEGORY_ALLY
@ SPELL_AURA_MOUNTED
#define sSpellMgr
Definition SpellMgr.h:744
@ UNIT_MASK_GUARDIAN
Definition Unit.h:807
#define MAX_MOVE_TYPE
Definition Unit.h:566
@ TRIGGERED_FULL_MASK
Will ignore most target checks (mostly DBC target checks).
Definition Unit.h:435
@ TRIGGERED_NONE
Definition Unit.h:416
#define CURRENT_MAX_SPELL
Definition Unit.h:1115
CurrentSpellTypes
Definition Unit.h:1107
@ CURRENT_CHANNELED_SPELL
Definition Unit.h:1110
@ CURRENT_GENERIC_SPELL
Definition Unit.h:1109
@ CURRENT_MELEE_SPELL
Definition Unit.h:1108
@ CURRENT_AUTOREPEAT_SPELL
Definition Unit.h:1111
SheathState
Definition Unit.h:244
#define MAX_SHEATH_STATE
Definition Unit.h:250
@ UNIT_BYTE2_FLAG_FFA_PVP
Definition Unit.h:257
@ UNIT_BYTE2_FLAG_SANCTUARY
Definition Unit.h:258
@ UNIT_STATE_CANNOT_AUTOATTACK
Definition Unit.h:546
@ UNIT_STATE_CONFUSED
Definition Unit.h:523
@ UNIT_STATE_ROOT
Definition Unit.h:522
@ UNIT_STATE_FLEEING
Definition Unit.h:519
@ UNIT_STATE_STUNNED
Definition Unit.h:515
UnitMoveType
Definition Unit.h:554
@ UNIT_FIELD_VIRTUAL_ITEM_ID
@ UNIT_FIELD_SHAPESHIFT_FORM
@ PLAYER_FIELD_MOD_DAMAGE_DONE_POS
@ PLAYER_FIELD_VISIBLE_ITEMS
virtual void EnterEvadeMode()
void SetDisplayId(uint32 modelId) OVERRIDE
CreatureAI * AI() const
Definition Creature.h:483
Definition Item.h:202
Definition Map.h:238
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=NULL, uint32 duration=0, Unit *summoner=NULL, uint32 spellId=0, uint32 vehId=0)
Definition Object.cpp:2564
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=EVENT_JUMP)
void MoveRotate(uint32 time, RotateDirection direction)
void MoveFollow(Unit *target, float dist, float angle, MovementSlot slot=MOTION_SLOT_ACTIVE)
void MoveChase(Unit *target, float dist=0.0f, float angle=0.0f)
void MoveCharge(float x, float y, float z, float speed=SPEED_CHARGE, uint32 id=EVENT_CHARGE, bool generatePath=false)
void MoveRandom(float spawndist=0.0f)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
void Clear(bool reset=true)
uint64 GetGUID() const
Definition Object.h:119
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:325
Player * ToPlayer()
Definition Object.h:204
bool IsInWorld() const
Definition Object.h:114
TypeID GetTypeId() const
Definition Object.h:131
GameObject * ToGameObject()
Definition Object.h:213
uint32 GetEntry() const
Definition Object.h:125
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:1345
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:1038
Unit * ToUnit()
Definition Object.h:210
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:1322
void Yell(std::string const &text, const Language language)
Handles yelled message in regular chat based on declared language and in config pre-defined Range.
Definition Player.cpp:15807
void Whisper(std::string const &text, const Language language, uint64 receiver)
Handles whispers from Addons and players based on sender, receiver's guid and language.
Definition Player.cpp:15840
void TextEmote(std::string const &text)
Outputs an universal text which is supposed to be an action.
Definition Player.cpp:15817
void Say(std::string const &text, const Language language)
Handles said message in regular chat based on declared language and in config pre-defined Range.
Definition Player.cpp:15797
void SetItemTarget(Item *item)
Definition Spell.cpp:303
void SetGOTarget(GameObject *target)
Definition Spell.cpp:258
void SetUnitTarget(Unit *target)
Definition Spell.cpp:228
Definition Unit.h:1367
void ClearUnitState(uint32 f)
Definition Unit.h:1489
bool IsStopped() const
Definition Unit.h:2614
void CastStop(uint32 except_spellid=0)
bool IsCharmed() const
Definition Unit.h:2136
Vehicle * GetVehicle() const
Definition Unit.h:2743
void SetVisible(bool x)
Definition Unit.cpp:4163
bool IsBattleMaster() const
Definition Unit.h:1849
bool HealthAbovePct(int32 pct) const
Definition Unit.h:1621
float GetHealthPct() const
Definition Unit.h:1629
uint8 getGender() const
Definition Unit.h:1551
void setFaction(uint32 faction)
Definition Unit.h:1699
bool IsGuildMaster() const
Definition Unit.h:1845
Unit * SelectNearbyTarget(Unit *exclude=NULL, float dist=NOMINAL_MELEE_RANGE) const
Definition Unit.cpp:6043
void SetFacingTo(float ori)
Definition Unit.cpp:9114
void Kill(Unit *victim, bool durabilityLoss=true)
Definition Unit.cpp:6342
Unit * GetOwner() const
Definition Unit.cpp:2339
uint64 GetCharmGUID() const
Definition Unit.h:2079
uint32 GetCombatTimer() const
Definition Unit.h:1904
void CombatStop(bool includingCast=false)
uint64 GetCreatorGUID() const
Definition Unit.h:2055
uint32 getFaction() const
Definition Unit.h:1695
bool IsInnkeeper() const
Definition Unit.h:1857
bool IsTabardDesigner() const
Definition Unit.h:1869
void RestoreFaction()
Definition Unit.cpp:7135
void SetControlled(bool apply, UnitState state)
Definition Unit.cpp:6669
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void SetPower(Powers power, int32 val)
Definition Unit.cpp:5255
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
uint64 GetCharmerOrOwnerGUID() const
Definition Unit.cpp:5806
void SetPvP(bool state)
Definition Unit.cpp:7317
void SetCreatorGUID(uint64 creator)
Definition Unit.h:2059
bool IsArmorer() const
Definition Unit.h:1877
bool IsPvP() const
Definition Unit.h:1716
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
uint64 GetPetGUID() const
Definition Unit.h:2087
void Dismount()
Definition Unit.cpp:3685
uint32 GetMaxHealth() const
Definition Unit.h:1604
bool IsTrainer() const
Definition Unit.h:1829
bool isAttackingPlayer() const
bool IsFullHealth() const
Definition Unit.h:1609
uint8 getClass() const
Definition Unit.h:1543
bool IsAlive() const
Definition Unit.h:2032
int32 GetMaxPower(Powers power) const
Definition Unit.cpp:5246
void StopMoving()
-------—End of Pet responses methods-------—
Definition Unit.cpp:5877
void SetHealth(uint32 val)
Definition Unit.cpp:5162
bool IsQuestGiver() const
Definition Unit.h:1833
uint64 GetCharmerGUID() const
Definition Unit.h:2071
void AddUnitState(uint32 f)
Definition Unit.h:1481
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:3635
bool IsTaxi() const
Definition Unit.h:1841
bool isInAccessiblePlaceFor(Creature const *c) const
Definition Unit.cpp:1473
virtual void SetSheath(SheathState sheathed)
Definition Unit.h:1689
uint32 GetCreatureType() const
Definition Unit.cpp:4910
void SetOwnerGUID(uint64 owner)
Definition Unit.cpp:2314
uint32 CountPctFromCurHealth(int32 pct) const
Definition Unit.h:1637
uint32 GetDisplayId() const
Definition Unit.h:2490
uint32 DealDamage(Unit *victim, uint32 damage, CleanDamage const *cleanDamage=NULL, DamageEffectType damagetype=DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *spellProto=NULL, bool durabilityLoss=true)
void SetCritterGUID(uint64 guid)
Definition Unit.h:2091
uint32 GetNativeDisplayId() const
Definition Unit.h:2495
bool HealthBelowPct(int32 pct) const
Definition Unit.h:1613
EventProcessor m_Events
Definition Unit.h:2396
bool Attack(Unit *victim, bool meleeAttack)
void JumpTo(float speedXY, float speedZ, bool forward=true)
Definition Unit.cpp:8139
bool SetCanFly(bool enable)
Definition Unit.cpp:9219
virtual bool IsInWater() const
Definition Unit.cpp:1481
uint32 GetHealth() const
Definition Unit.h:1600
bool IsVisible() const
Definition Unit.cpp:4158
bool isMoving() const
Definition Unit.h:2771
void SetNativeDisplayId(uint32 modelId)
Definition Unit.h:2500
bool IsBanker() const
Definition Unit.h:1853
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:7454
bool IsMounted() const
Definition Unit.h:1742
void RemoveAurasByType(AuraType auraType, uint64 casterGUID=0, Aura *except=NULL, bool negative=true, bool positive=true)
virtual void SetDisplayId(uint32 modelId)
Definition Unit.cpp:5941
uint8 getStandState() const
Definition Unit.h:1724
Unit * GetVictim() const
Definition Unit.h:1468
int32 GetPower(Powers power) const
Definition Unit.cpp:5237
virtual bool IsUnderWater() const
Definition Unit.cpp:1486
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:4318
void SetCharmerGUID(uint64 owner)
Definition Unit.h:2075
bool IsGossip() const
Definition Unit.h:1837
bool HasUnitState(const uint32 f) const
Definition Unit.h:1485
uint32 GetMountID() const
Definition Unit.h:1746
void RemoveBindSightAuras()
Definition Unit.cpp:2899
ThreatManager & getThreatManager()
Definition Unit.h:2455
uint32 HasUnitTypeMask(uint32 mask) const
Definition Unit.h:1495
void ClearInCombat()
uint32 CountPctFromMaxHealth(int32 pct) const
Definition Unit.h:1633
bool isDying() const
Definition Unit.h:2036
float GetStat(Stats stat) const
Definition Unit.h:1573
uint64 GetOwnerGUID() const
Definition Unit.h:2050
void RemoveAllAuras()
void RestoreDisplayId()
Definition Unit.cpp:5946
void HandleEmoteCommand(uint32 anim_id)
void SetMaxPower(Powers power, int32 val)
Definition Unit.cpp:5317
Powers getPowerType() const
Definition Unit.h:1651
void SetMaxHealth(uint32 val)
Definition Unit.cpp:5206
bool IsVendor() const
Definition Unit.h:1825
bool IsFlying() const
Definition Unit.h:2780
uint8 getLevel() const
Definition Unit.h:1528
bool IsSpiritHealer() const
Definition Unit.h:1861
void SetLevel(uint8 lvl)
Definition Unit.cpp:5150
bool IsServiceProvider() const
Definition Unit.cpp:3786
bool IsAuctioner() const
Definition Unit.h:1873
uint64 GetCritterGUID() const
Definition Unit.h:2095
void DeMorph()
Definition Unit.cpp:1536
bool IsSpiritService() const
Definition Unit.h:1882
bool AttackStop()
void KnockbackFrom(float x, float y, float speedXY, float speedZ)
Definition Unit.cpp:7597
uint64 GetCharmerOrOwnerOrOwnGUID() const
Definition Unit.cpp:5811
void RemoveCharmAuras()
Definition Unit.cpp:2904
bool IsInCombat() const
Definition Unit.h:1896
void SetPetGUID(uint64 guid)
Definition Unit.h:2083
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true)
Definition Unit.cpp:1365
bool SetWaterWalking(bool enable, bool packetOnly=false)
Definition Unit.cpp:9245
uint8 getRace() const
Definition Unit.h:1535
bool IsSpiritGuide() const
Definition Unit.h:1865
bool isDead() const
Definition Unit.h:2040
void CombatStopWithPets(bool includingCast=false)
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition Unit.h:2363
Map * GetMap() const
Definition Object.h:740
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
Definition Object.cpp:1735
void SetName(std::string const &newname)
Definition Object.h:665
bool IsWithinLOS(float x, float y, float z) const
Definition Object.cpp:1740
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime)
Definition Object.cpp:2729
void PlayDistanceSound(uint32 sound_id, Player *target)
Definition Object.cpp:3417
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1666
void PlayDirectSound(uint32 sound_id, Player *target=NULL)
Definition Object.cpp:3442
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition Object.cpp:2703
int SetFFA(lua_State *L, Unit *unit)
int IsArmorer(lua_State *L, Unit *unit)
int SetSheath(lua_State *L, Unit *unit)
int GetOwner(lua_State *L, Unit *unit)
Definition UnitMethods.h:38
int ClearThreatList(lua_State *L, Unit *unit)
Definition UnitMethods.h:24
int SetPhaseMask(lua_State *L, Unit *unit)
int IsInAccessiblePlaceFor(lua_State *L, Unit *unit)
int HasUnitState(lua_State *L, Unit *unit)
int IsTabardDesigner(lua_State *L, Unit *unit)
int Attack(lua_State *L, Unit *unit)
Definition UnitMethods.h:12
int SummonGameObject(lua_State *L, Unit *unit)
int Kill(lua_State *L, Unit *unit)
int SetName(lua_State *L, Unit *unit)
int SetMaxHealth(lua_State *L, Unit *unit)
int JumpToCoords(lua_State *L, Unit *unit)
int IsInnkeeper(lua_State *L, Unit *unit)
int SetPvP(lua_State *L, Unit *unit)
int GetPetGUID(lua_State *L, Unit *unit)
int SetLevel(lua_State *L, Unit *unit)
int IsFlying(lua_State *L, Unit *unit)
int IsBattleMaster(lua_State *L, Unit *unit)
int AttackStop(lua_State *L, Unit *unit)
int RemoveEventById(lua_State *L, Unit *unit)
int IsSpiritHealer(lua_State *L, Unit *unit)
int SetVisible(lua_State *L, Unit *unit)
int ClearInCombat(lua_State *L, Unit *unit)
int GetPowerType(lua_State *L, Unit *unit)
int ClearUnitState(lua_State *L, Unit *unit)
int GetHealth(lua_State *L, Unit *unit)
int IsPvPFlagged(lua_State *L, Unit *unit)
int SetFacing(lua_State *L, Unit *unit)
int IsFullHealth(lua_State *L, Unit *unit)
int GetCurrentSpell(lua_State *L, Unit *unit)
int GetRace(lua_State *L, Unit *unit)
int GetVehicle(lua_State *L, Unit *unit)
int SetHealth(lua_State *L, Unit *unit)
int IsSpiritGuide(lua_State *L, Unit *unit)
int IsWithinLoS(lua_State *L, Unit *unit)
Definition UnitMethods.h:93
int SetStunned(lua_State *L, Unit *unit)
int SetFaction(lua_State *L, Unit *unit)
int AddUnitState(lua_State *L, Unit *unit)
int GetAura(lua_State *L, Unit *unit)
int GetMap(lua_State *L, Unit *unit)
Definition UnitMethods.h:50
int AddAura(lua_State *L, Unit *unit)
int SetCharmerGUID(lua_State *L, Unit *unit)
int IsInWorld(lua_State *L, Unit *unit)
int SetPetGUID(lua_State *L, Unit *unit)
int GetMinionGUID(lua_State *L, Unit *unit)
int DeMorph(lua_State *L, Unit *unit)
int IsTaxi(lua_State *L, Unit *unit)
int GetControllerGUID(lua_State *L, Unit *unit)
int GetRelativePoint(lua_State *L, Unit *unit)
Definition UnitMethods.h:57
int GetUnfriendlyUnitsInRange(lua_State *L, Unit *unit)
int GetMountDisplayId(lua_State *L, Unit *unit)
int GetMaxPower(lua_State *L, Unit *unit)
int IsInCombat(lua_State *L, Unit *unit)
int IsStopped(lua_State *L, Unit *unit)
int GetFriendlyUnitsInRange(lua_State *L, Unit *unit)
int StopSpellCast(lua_State *L, Unit *unit)
int Jump(lua_State *L, Unit *unit)
int PlayDistanceSound(lua_State *L, Unit *unit)
int IsCharmed(lua_State *L, Unit *unit)
int MoveRotate(lua_State *L, Unit *unit)
int IsBanker(lua_State *L, Unit *unit)
int SummonGuardian(lua_State *L, Unit *unit)
int InterruptSpell(lua_State *L, Unit *unit)
int GetNativeDisplayId(lua_State *L, Unit *unit)
int GetLevel(lua_State *L, Unit *unit)
int MoveTo(lua_State *L, Unit *unit)
int SpawnCreature(lua_State *L, Unit *unit)
int IsTrainer(lua_State *L, Unit *unit)
int MoveFollow(lua_State *L, Unit *unit)
int DisableMelee(lua_State *L, Unit *unit)
int JumpTo(lua_State *L, Unit *unit)
int SendUnitYell(lua_State *L, Unit *unit)
int HealthBelowPct(lua_State *L, Unit *unit)
int SetFeared(lua_State *L, Unit *unit)
int KnockbackFrom(lua_State *L, Unit *unit)
int IsAuctioneer(lua_State *L, Unit *unit)
int GetStat(lua_State *L, Unit *unit)
int IsVisible(lua_State *L, Unit *unit)
int GetCritterGUID(lua_State *L, Unit *unit)
int StopMoving(lua_State *L, Unit *unit)
int RemoveBindSightAuras(lua_State *L, Unit *unit)
int SetCreatorGUID(lua_State *L, Unit *unit)
int GetNearbyTarget(lua_State *L, Unit *unit)
int SetOwnerGUID(lua_State *L, Unit *unit)
Definition UnitMethods.h:30
int SetDisplayId(lua_State *L, Unit *unit)
int GetCreatureType(lua_State *L, Unit *unit)
int IsUnderWater(lua_State *L, Unit *unit)
int GetHealthPct(lua_State *L, Unit *unit)
int IsServiceProvider(lua_State *L, Unit *unit)
int GetGender(lua_State *L, Unit *unit)
int IsVendor(lua_State *L, Unit *unit)
int SendUnitEmote(lua_State *L, Unit *unit)
int IsGossip(lua_State *L, Unit *unit)
int Mount(lua_State *L, Unit *unit)
Definition UnitMethods.h:69
int SetRooted(lua_State *L, Unit *unit)
int CastSpell(lua_State *L, Unit *unit)
int CountPctFromCurHealth(lua_State *L, Unit *unit)
int IsGuildMaster(lua_State *L, Unit *unit)
int GetPowerPct(lua_State *L, Unit *unit)
int IsDead(lua_State *L, Unit *unit)
int PlayDirectSound(lua_State *L, Unit *unit)
int SetSpeed(lua_State *L, Unit *unit)
int RestoreFaction(lua_State *L, Unit *unit)
int Dismount(lua_State *L, Unit *unit)
Definition UnitMethods.h:77
int GetCharmGUID(lua_State *L, Unit *unit)
int IsAttackingPlayer(lua_State *L, Unit *unit)
int CountPctFromMaxHealth(lua_State *L, Unit *unit)
int SetMaxPower(lua_State *L, Unit *unit)
int IsSpiritService(lua_State *L, Unit *unit)
int RemoveEvents(lua_State *L, Unit *unit)
int IsMounted(lua_State *L, Unit *unit)
Definition UnitMethods.h:87
int IsMoving(lua_State *L, Unit *unit)
int HealthAbovePct(lua_State *L, Unit *unit)
int SendChatMessageToPlayer(lua_State *L, Unit *unit)
int GetStandState(lua_State *L, Unit *unit)
int SetCanFly(lua_State *L, Unit *unit)
int GetMaxHealth(lua_State *L, Unit *unit)
int GetBaseSpellPower(lua_State *L, Unit *unit)
int IsQuestGiver(lua_State *L, Unit *unit)
int IsDying(lua_State *L, Unit *unit)
int GetClassAsString(lua_State *L, Unit *unit)
int SetConfused(lua_State *L, Unit *unit)
int GetDisplayId(lua_State *L, Unit *unit)
int CastSpellAoF(lua_State *L, Unit *unit)
int RemoveAllAuras(lua_State *L, Unit *unit)
int SetSanctuary(lua_State *L, Unit *unit)
int GetCharmerGUID(lua_State *L, Unit *unit)
int GetDistance(lua_State *L, Unit *unit)
int GetCombatTime(lua_State *L, Unit *unit)
int RemoveAura(lua_State *L, Unit *unit)
int RegisterEvent(lua_State *L, Unit *unit)
int GetVictim(lua_State *L, Unit *unit)
int DealDamage(lua_State *L, Unit *unit)
int SendUnitSay(lua_State *L, Unit *unit)
int GetPower(lua_State *L, Unit *unit)
int IsInWater(lua_State *L, Unit *unit)
int IsAlive(lua_State *L, Unit *unit)
int SetPower(lua_State *L, Unit *unit)
int SendUnitWhisper(lua_State *L, Unit *unit)
int MoveClear(lua_State *L, Unit *unit)
int RemoveCharmAuras(lua_State *L, Unit *unit)
int SetNativeDisplayId(lua_State *L, Unit *unit)
int MoveCharge(lua_State *L, Unit *unit)
int GetFaction(lua_State *L, Unit *unit)
int MoveRandom(lua_State *L, Unit *unit)
int SetCritterGUID(lua_State *L, Unit *unit)
int GetCreatorGUID(lua_State *L, Unit *unit)
int IsWithinDistInMap(lua_State *L, Unit *unit)
int RestoreDisplayId(lua_State *L, Unit *unit)
int SetMinionGUID(lua_State *L, Unit *unit)
int GetOwnerGUID(lua_State *L, Unit *unit)
Definition UnitMethods.h:44
int GetClass(lua_State *L, Unit *unit)
int MoveChase(lua_State *L, Unit *unit)
int SetWaterWalk(lua_State *L, Unit *unit)
int GetControllerGUIDS(lua_State *L, Unit *unit)
static float NormalizeOrientation(float o)
Definition Object.h:427
float GetOrientation() const
Definition Object.h:331
float GetPositionX() const
Definition Object.h:328
float GetPositionY() const
Definition Object.h:329
void Relocate(float x, float y)
Definition Object.h:302
uint32 Category