Add Creature documentation.
This commit is contained in:
@@ -1,22 +1,38 @@
|
||||
/*
|
||||
* Copyright (C) 2010 - 2014 Eluna Lua Engine <http://emudevs.com/>
|
||||
* This program is free software licensed under GPL version 3
|
||||
* Please see the included DOCS/LICENSE.md for more information
|
||||
*/
|
||||
* Copyright (C) 2010 - 2014 Eluna Lua Engine <http://emudevs.com/>
|
||||
* This program is free software licensed under GPL version 3
|
||||
* Please see the included DOCS/LICENSE.md for more information
|
||||
*/
|
||||
|
||||
#ifndef CREATUREMETHODS_H
|
||||
#define CREATUREMETHODS_H
|
||||
|
||||
/***
|
||||
* Non-[Player] controlled [Unit]s.
|
||||
*/
|
||||
namespace LuaCreature
|
||||
{
|
||||
/* BOOLEAN */
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] is set to not give reputation when killed,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool reputationDisabled
|
||||
*/
|
||||
int IsReputationGainDisabled(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsReputationGainDisabled());
|
||||
return 1;
|
||||
}
|
||||
|
||||
int IsRegeneratingHealth(lua_State* L, Creature* creature)
|
||||
/**
|
||||
* Returns `true` if the [Creature] can regenerate its health out-of-combat,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool regeneratesHealth
|
||||
*/
|
||||
int CanRegenerateHealth(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
Eluna::Push(L, creature->IsRegeneratingHealth());
|
||||
@@ -26,7 +42,14 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
int HasInvolvedQuest(lua_State* L, Creature* creature)
|
||||
/**
|
||||
* Returns `true` if the [Creature] completes the [Quest] with the ID `quest_id`,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param uint32 questID: the ID of a [Quest]
|
||||
* @return bool completesQuest
|
||||
*/
|
||||
int CanCompleteQuest(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 quest_id = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
|
||||
@@ -38,18 +61,34 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] can be targeted for attack,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param bool mustBeDead = false: if `true`, only returns `true` if the [Creature] is also dead. Otherwise, it must be alive.
|
||||
* @return bool targetable
|
||||
*/
|
||||
int IsTargetableForAttack(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool inversAlive = Eluna::CHECKVAL<bool>(L, 2);
|
||||
bool mustBeDead = Eluna::CHECKVAL<bool>(L, 2, false);
|
||||
|
||||
#ifdef MANGOS
|
||||
Eluna::Push(L, creature->IsTargetableForAttack(inversAlive));
|
||||
Eluna::Push(L, creature->IsTargetableForAttack(mustBeDead));
|
||||
#else
|
||||
Eluna::Push(L, creature->isTargetableForAttack(inversAlive));
|
||||
Eluna::Push(L, creature->isTargetableForAttack(mustBeDead));
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] can assist `friend` in combat against `enemy`,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param Unit friend: the Unit we will be assisting
|
||||
* @param Unit enemy: the Unit that we would attack if we assist `friend`
|
||||
* @param bool checkFaction = true: if `true`, the [Creature] must be the same faction as `friend` to assist
|
||||
* @return bool canAssist
|
||||
*/
|
||||
int CanAssistTo(lua_State* L, Creature* creature)
|
||||
{
|
||||
Unit* u = Eluna::CHECKOBJ<Unit>(L, 2);
|
||||
@@ -60,12 +99,24 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] has searched for combat assistance already,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool searchedForAssistance
|
||||
*/
|
||||
int HasSearchedAssistance(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->HasSearchedAssistance());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] will give its loot to `player`,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool tapped
|
||||
*/
|
||||
int IsTappedBy(lua_State* L, Creature* creature)
|
||||
{
|
||||
Player* player = Eluna::CHECKOBJ<Player>(L, 2);
|
||||
@@ -78,6 +129,12 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] will give its loot to a [Player] or [Group],
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool hasLootRecipient
|
||||
*/
|
||||
int HasLootRecipient(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
@@ -88,37 +145,60 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
int IsCombatAllowed(lua_State* L, Creature* creature)
|
||||
/**
|
||||
* Returns `true` if the [Creature] can start attacking nearby hostile [Unit]s,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool canInitiateAttack
|
||||
*/
|
||||
int CanAggro(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
if (CreatureAI* ai = creature->AI())
|
||||
Eluna::Push(L, ai->IsCombatMovement());
|
||||
else
|
||||
Eluna::Push(L, false);
|
||||
#else
|
||||
Eluna::Push(L, !creature->HasReactState(REACT_PASSIVE));
|
||||
#endif
|
||||
Eluna::Push(L, creature->CanInitiateAttack());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] can move through deep water,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool canSwim
|
||||
*/
|
||||
int CanSwim(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->CanSwim());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] can move on land,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool canWalk
|
||||
*/
|
||||
int CanWalk(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->CanWalk());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] is returning to its spawn position from combat,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool inEvadeMode
|
||||
*/
|
||||
int IsInEvadeMode(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsInEvadeMode());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature]'s rank is Elite or Rare Elite,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool isElite
|
||||
*/
|
||||
int IsElite(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
@@ -129,24 +209,48 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] is a city guard,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool isGuard
|
||||
*/
|
||||
int IsGuard(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsGuard());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] is a civilian,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool isCivilian
|
||||
*/
|
||||
int IsCivilian(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsCivilian());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] is the leader of a player faction,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool isLeader
|
||||
*/
|
||||
int IsRacialLeader(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsRacialLeader());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature]'s rank is Boss,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool isWorldBoss
|
||||
*/
|
||||
int IsWorldBoss(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
@@ -157,6 +261,13 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] cannot cast `spellId` due to a category cooldown,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param uint32 spellId: the ID of a [Spell]
|
||||
* @return bool hasCooldown
|
||||
*/
|
||||
int HasCategoryCooldown(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 spell = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -165,6 +276,13 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] can cast `spellId` when mind-controlled,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param uint32 spellId: the ID of a [Spell]
|
||||
* @return bool hasSpell
|
||||
*/
|
||||
int HasSpell(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 id = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -173,6 +291,13 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] starts the [Quest] `questId`,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param uint32 questId: the ID of a [Quest]
|
||||
* @return bool hasQuest
|
||||
*/
|
||||
int HasQuest(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 questId = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -185,6 +310,13 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] has `spellId` on cooldown,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @param uint32 spellId: the ID of a [Spell]
|
||||
* @return bool hasCooldown
|
||||
*/
|
||||
int HasSpellCooldown(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 spellId = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -193,60 +325,94 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the [Creature] can fly,
|
||||
* and returns `false` otherwise.
|
||||
*
|
||||
* @return bool canFly
|
||||
*/
|
||||
int CanFly(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->CanFly());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*int IsTrigger(lua_State* L, Creature* creature)
|
||||
#ifdef TRINITY
|
||||
int IsTrigger(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsTrigger());
|
||||
return 1;
|
||||
}*/
|
||||
Eluna::Push(L, creature->IsTrigger());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*int IsDamageEnoughForLootingAndReward(lua_State* L, Creature* creature)
|
||||
int IsDamageEnoughForLootingAndReward(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->IsDamageEnoughForLootingAndReward());
|
||||
return 1;
|
||||
}*/
|
||||
Eluna::Push(L, creature->IsDamageEnoughForLootingAndReward());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*int CanStartAttack(lua_State* L, Creature* creature) // TODO: Implement core side
|
||||
int CanStartAttack(lua_State* L, Creature* creature) // TODO: Implement core side
|
||||
{
|
||||
Unit* target = Eluna::CHECKOBJ<Unit>(L, 2);
|
||||
bool force = Eluna::CHECKVAL<bool>(L, 3, true);
|
||||
Unit* target = Eluna::CHECKOBJ<Unit>(L, 2);
|
||||
bool force = Eluna::CHECKVAL<bool>(L, 3, true);
|
||||
|
||||
Eluna::Push(L, creature->CanStartAttack(target, force));
|
||||
return 1;
|
||||
}*/
|
||||
Eluna::Push(L, creature->CanStartAttack(target, force));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*int HasLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
int HasLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
{
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
|
||||
Eluna::Push(L, creature->HasLootMode(lootMode));
|
||||
return 1;
|
||||
}*/
|
||||
Eluna::Push(L, creature->HasLootMode(lootMode));
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* GETTERS */
|
||||
|
||||
/**
|
||||
* Returns the time it takes for this [Creature] to respawn once killed.
|
||||
*
|
||||
* This value does not usually change over a [Creature]'s lifespan,
|
||||
* but can be modified by [Creature:SetRespawnDelay].
|
||||
*
|
||||
* @return uint32 respawnDelay: the respawn delay, in seconds
|
||||
*/
|
||||
int GetRespawnDelay(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetRespawnDelay());
|
||||
return 1;
|
||||
}
|
||||
|
||||
int GetRespawnRadius(lua_State* L, Creature* creature)
|
||||
/**
|
||||
* Returns the radius the [Creature] is permitted to wander from its
|
||||
* respawn point.
|
||||
*
|
||||
* @return float wanderRadius
|
||||
*/
|
||||
int GetWanderRadius(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetRespawnRadius());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default movement type for this [Creature].
|
||||
*
|
||||
* @return MovementGeneratorType defaultMovementType
|
||||
*/
|
||||
int GetDefaultMovementType(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetDefaultMovementType());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the aggro range of the [Creature] for `target`.
|
||||
*
|
||||
* @param Unit target
|
||||
* @return float aggroRange
|
||||
*/
|
||||
int GetAggroRange(lua_State* L, Creature* creature)
|
||||
{
|
||||
Unit* target = Eluna::CHECKOBJ<Unit>(L, 2);
|
||||
@@ -261,6 +427,15 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the effective aggro range of the [Creature] for `target`.
|
||||
*
|
||||
* If this is smaller than the minimum aggro range set in the config file,
|
||||
* that is used as the aggro range instead.
|
||||
*
|
||||
* @param Unit target
|
||||
* @return float attackDistance
|
||||
*/
|
||||
int GetAttackDistance(lua_State* L, Creature* creature)
|
||||
{
|
||||
Unit* target = Eluna::CHECKOBJ<Unit>(L, 2);
|
||||
@@ -269,6 +444,11 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Group] that can loot this [Creature].
|
||||
*
|
||||
* @return Group lootRecipientGroup: the group or `nil`
|
||||
*/
|
||||
int GetLootRecipientGroup(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
@@ -279,30 +459,67 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Player] that can loot this [Creature].
|
||||
*
|
||||
* @return Player lootRecipient: the player or `nil`
|
||||
*/
|
||||
int GetLootRecipient(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetLootRecipient());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Creature]'s script name.
|
||||
*
|
||||
* This is used by the core to apply C++ scripts to the Creature.
|
||||
*
|
||||
* It is not used by Eluna.
|
||||
*
|
||||
* @return string scriptName
|
||||
*/
|
||||
int GetScriptName(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetScriptName());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Creature]'s AI name.
|
||||
*
|
||||
* This is used by the core to override the Creature's default AI.
|
||||
*
|
||||
* If the Creature is scripted by Eluna, this field is overriden.
|
||||
*
|
||||
* @return string AIName
|
||||
*/
|
||||
int GetAIName(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetAIName());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Creature]'s script ID.
|
||||
*
|
||||
* Every script name is assigned a unique ID by the core.
|
||||
* This returns the ID for this [Creature]'s script name.
|
||||
*
|
||||
* @return uint32 scriptID
|
||||
*/
|
||||
int GetScriptId(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetScriptId());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Creature]'s cooldown for `spellID`.
|
||||
*
|
||||
* @param uint32 spellID
|
||||
* @return uint32 cooldown: the cooldown, in milliseconds
|
||||
*/
|
||||
int GetCreatureSpellCooldownDelay(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 spell = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -311,12 +528,26 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the delay between when the [Creature] dies and when its body despawns.
|
||||
*
|
||||
* @return uint32 corpseDelay: the delay, in seconds
|
||||
*/
|
||||
int GetCorpseDelay(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetCorpseDelay());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns position the [Creature] returns to when evading from combat
|
||||
* or respawning.
|
||||
*
|
||||
* @return float x
|
||||
* @return float y
|
||||
* @return float z
|
||||
* @return float o
|
||||
*/
|
||||
int GetHomePosition(lua_State* L, Creature* creature)
|
||||
{
|
||||
float x, y, z, o;
|
||||
@@ -333,6 +564,23 @@ namespace LuaCreature
|
||||
return 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a target from the [Creature]'s threat list based on the
|
||||
* supplied arguments.
|
||||
*
|
||||
* For example, if you wanted to select the third-farthest [Player]
|
||||
* within 50 yards that has the [Aura] "Corrupted Blood" (ID 24328),
|
||||
* you could use this function like so:
|
||||
*
|
||||
* target = creature:GetAITarget(4, true, 3, 50, 24328)
|
||||
*
|
||||
* @param SelectAggroTarget targetType: how the threat list should be sorted
|
||||
* @param bool playerOnly: if `true`, skips targets that aren't [Player]s
|
||||
* @param uint32 position: if `targetType` is not random, used as an offset into the threat list
|
||||
* @param float distance: if positive, the maximum distance for the target. If negative, the minimum distance
|
||||
* @param int32 aura if positive, the target must have this [Aura]. If negative, the the target must not have this Aura
|
||||
* @return Unit target: the target, or `nil`
|
||||
*/
|
||||
int GetAITarget(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 targetType = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -414,6 +662,11 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all [Unit]s in the [Creature]'s threat list.
|
||||
*
|
||||
* @return table targets
|
||||
*/
|
||||
int GetAITargets(lua_State* L, Creature* creature)
|
||||
{
|
||||
lua_newtable(L);
|
||||
@@ -442,6 +695,11 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of [Unit]s in this [Creature]'s threat list.
|
||||
*
|
||||
* @return int targetsCount
|
||||
*/
|
||||
int GetAITargetsCount(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifdef MANGOS
|
||||
@@ -452,6 +710,14 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the [Creature]'s NPC flags.
|
||||
*
|
||||
* These are used to control whether the NPC is a vendor, can repair items,
|
||||
* can give quests, etc.
|
||||
*
|
||||
* @return NPCFlags npcFlags
|
||||
*/
|
||||
int GetNPCFlags(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetUInt32Value(UNIT_NPC_FLAGS));
|
||||
@@ -459,6 +725,11 @@ namespace LuaCreature
|
||||
}
|
||||
|
||||
#ifndef CATA
|
||||
/**
|
||||
* Returns the [Creature]'s shield block value.
|
||||
*
|
||||
* @return uint32 shieldBlockValue
|
||||
*/
|
||||
int GetShieldBlockValue(lua_State* L, Creature* creature)
|
||||
{
|
||||
Eluna::Push(L, creature->GetShieldBlockValue());
|
||||
@@ -466,13 +737,21 @@ namespace LuaCreature
|
||||
}
|
||||
#endif
|
||||
|
||||
/*int GetLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
#ifdef TRINITY
|
||||
int GetLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
{
|
||||
Eluna::Push(L, creature->GetLootMode());
|
||||
return 1;
|
||||
}*/
|
||||
Eluna::Push(L, creature->GetLootMode());
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* SETTERS */
|
||||
|
||||
/**
|
||||
* Sets the [Creature]'s NPC flags to `flags`.
|
||||
*
|
||||
* @param NPCFlags flags
|
||||
*/
|
||||
int SetNPCFlags(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 flags = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -481,6 +760,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the [Creature]'s death state to `deathState`.
|
||||
*
|
||||
* @param DeathState deathState
|
||||
*/
|
||||
int SetDeathState(lua_State* L, Creature* creature)
|
||||
{
|
||||
int32 state = Eluna::CHECKVAL<int32>(L, 2);
|
||||
@@ -493,6 +777,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the [Creature] is currently walking or running.
|
||||
*
|
||||
* @param bool enable: `true` to enable walking, `false` for running
|
||||
*/
|
||||
int SetWalk(lua_State* L, Creature* creature) // TODO: Move same to Player ?
|
||||
{
|
||||
bool enable = Eluna::CHECKVAL<bool>(L, 2, true);
|
||||
@@ -501,19 +790,32 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetAllowedCombat(lua_State* L, Creature* creature)
|
||||
/**
|
||||
* Sets whether the [Creature] can be aggroed by movement or not.
|
||||
*
|
||||
* @param bool allow: `true` to allow aggro, `false` to disable aggro
|
||||
*/
|
||||
int SetAggroEnabled(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool allow = Eluna::CHECKVAL<bool>(L, 2);
|
||||
|
||||
#ifndef TRINITY
|
||||
if (CreatureAI* ai = creature->AI())
|
||||
ai->SetCombatMovement(allow);
|
||||
#else
|
||||
creature->SetReactState(allow ? REACT_AGGRESSIVE : REACT_PASSIVE);
|
||||
#endif
|
||||
if (allow)
|
||||
{
|
||||
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PASSIVE);
|
||||
}
|
||||
else
|
||||
{
|
||||
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PASSIVE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the [Creature] gives reputation or not.
|
||||
*
|
||||
* @param bool disable: `true` to disable reputation, `false` to enable
|
||||
*/
|
||||
int SetDisableReputationGain(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool disable = Eluna::CHECKVAL<bool>(L, 2, true);
|
||||
@@ -522,13 +824,24 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the [Creature] as in combat with all [Player]s in the dungeon instance.
|
||||
*
|
||||
* This is used by raid bosses to prevent Players from using out-of-combat
|
||||
* actions once the encounter has begun.
|
||||
*/
|
||||
int SetInCombatWithZone(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
creature->SetInCombatWithZone();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetRespawnRadius(lua_State* L, Creature* creature)
|
||||
/**
|
||||
* Sets the distance the [Creature] can wander from it's spawn point.
|
||||
*
|
||||
* @param float distance
|
||||
*/
|
||||
int SetWanderRadius(lua_State* L, Creature* creature)
|
||||
{
|
||||
float dist = Eluna::CHECKVAL<float>(L, 2);
|
||||
|
||||
@@ -536,6 +849,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the time it takes for the [Creature] to respawn when killed.
|
||||
*
|
||||
* @param uint32 delay: the delay, in seconds
|
||||
*/
|
||||
int SetRespawnDelay(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 delay = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -544,6 +862,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default movement type of the [Creature].
|
||||
*
|
||||
* @param MovementGeneratorType type
|
||||
*/
|
||||
int SetDefaultMovementType(lua_State* L, Creature* creature)
|
||||
{
|
||||
int32 type = Eluna::CHECKVAL<int32>(L, 2);
|
||||
@@ -552,6 +875,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the [Creature] can search for assistance at low health or not.
|
||||
*
|
||||
* @param bool enable: `true` to disable searching, `false` to allow
|
||||
*/
|
||||
int SetNoSearchAssistance(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool val = Eluna::CHECKVAL<bool>(L, 2, true);
|
||||
@@ -560,6 +888,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the [Creature] can call nearby enemies for help in combat or not.
|
||||
*
|
||||
* @param bool enable: `true` to disable calling for help, `false` to enable
|
||||
*/
|
||||
int SetNoCallAssistance(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool val = Eluna::CHECKVAL<bool>(L, 2, true);
|
||||
@@ -568,6 +901,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the creature is hovering or not.
|
||||
*
|
||||
* @param bool enable: `true` to enable hovering, `false` to disable
|
||||
*/
|
||||
int SetHover(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool enable = Eluna::CHECKVAL<bool>(L, 2, true);
|
||||
@@ -580,24 +918,11 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*int SetLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
{
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
|
||||
creature->SetLootMode(lootMode);
|
||||
return 0;
|
||||
}*/
|
||||
|
||||
/*int SetDisableGravity(lua_State* L, Creature* creature)
|
||||
{
|
||||
bool disable = Eluna::CHECKVAL<bool>(L, 2, true);
|
||||
bool packetOnly = Eluna::CHECKVAL<bool>(L, 3, false);
|
||||
|
||||
Eluna::Push(L, creature->SetDisableGravity(disable, packetOnly));
|
||||
return 1;
|
||||
}*/
|
||||
|
||||
/* OTHER */
|
||||
|
||||
/**
|
||||
* Despawn this [Creature].
|
||||
*/
|
||||
int DespawnOrUnsummon(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 msTimeToDespawn = Eluna::CHECKVAL<uint32>(L, 2, 0);
|
||||
@@ -610,18 +935,27 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Respawn this [Creature].
|
||||
*/
|
||||
int Respawn(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
creature->Respawn();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove this [Creature]'s corpse.
|
||||
*/
|
||||
int RemoveCorpse(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
creature->RemoveCorpse();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the [Creature] start following it's waypoint path.
|
||||
*/
|
||||
int MoveWaypoint(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
@@ -632,12 +966,20 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the [Creature] call for assistance in combat from other nearby [Creature]s.
|
||||
*/
|
||||
int CallAssistance(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
creature->CallAssistance();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the [Creature] call for help in combat from friendly [Creature]s within `radius`.
|
||||
*
|
||||
* @param float radius
|
||||
*/
|
||||
int CallForHelp(lua_State* L, Creature* creature)
|
||||
{
|
||||
float radius = Eluna::CHECKVAL<float>(L, 2);
|
||||
@@ -646,12 +988,20 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the [Creature] flee combat to get assistance from a nearby friendly [Creature].
|
||||
*/
|
||||
int FleeToGetAssistance(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
creature->DoFleeToGetAssistance();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the [Creature] attack `target`.
|
||||
*
|
||||
* @param Unit target
|
||||
*/
|
||||
int AttackStart(lua_State* L, Creature* creature)
|
||||
{
|
||||
Unit* target = Eluna::CHECKOBJ<Unit>(L, 2);
|
||||
@@ -660,12 +1010,20 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the [Creature] in the database.
|
||||
*/
|
||||
int SaveToDB(lua_State* /*L*/, Creature* creature)
|
||||
{
|
||||
creature->SaveToDB();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the [Creature] try to find a new target.
|
||||
*
|
||||
* This should be called every update cycle for the Creature's AI.
|
||||
*/
|
||||
int SelectVictim(lua_State* L, Creature* creature)
|
||||
{
|
||||
#ifndef TRINITY
|
||||
@@ -676,6 +1034,12 @@ namespace LuaCreature
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform the [Creature] into another Creature.
|
||||
*
|
||||
* @param uint32 entry: the Creature ID to transform into
|
||||
* @param uint32 dataGUIDLow: use this Creature's model and equipment instead of the defaults
|
||||
*/
|
||||
int UpdateEntry(lua_State* L, Creature* creature)
|
||||
{
|
||||
uint32 entry = Eluna::CHECKVAL<uint32>(L, 2);
|
||||
@@ -689,26 +1053,28 @@ namespace LuaCreature
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*int ResetLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
#ifdef TRINITY
|
||||
int ResetLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
{
|
||||
creature->ResetLootMode();
|
||||
return 0;
|
||||
}*/
|
||||
creature->ResetLootMode();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*int RemoveLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
int RemoveLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
{
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
|
||||
creature->RemoveLootMode(lootMode);
|
||||
return 0;
|
||||
}*/
|
||||
creature->RemoveLootMode(lootMode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*int AddLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
int AddLootMode(lua_State* L, Creature* creature) // TODO: Implement LootMode features
|
||||
{
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
uint16 lootMode = Eluna::CHECKVAL<uint16>(L, 2);
|
||||
|
||||
creature->AddLootMode(lootMode);
|
||||
return 0;
|
||||
}*/
|
||||
creature->AddLootMode(lootMode);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user