mirror of
https://github.com/azerothcore/mod-ale
synced 2025-11-29 15:38:17 +08:00
Eluna fix TC errors from previous commits, fix merge and fix a crash on osx
This commit is contained in:
@@ -713,7 +713,7 @@ namespace LuaCreature
|
|||||||
std::advance(itr, position);
|
std::advance(itr, position);
|
||||||
Eluna::Push(L, *itr);
|
Eluna::Push(L, *itr);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SELECT_TARGET_FARTHEST:
|
case SELECT_TARGET_FARTHEST:
|
||||||
case SELECT_TARGET_BOTTOMAGGRO:
|
case SELECT_TARGET_BOTTOMAGGRO:
|
||||||
{
|
{
|
||||||
@@ -722,7 +722,7 @@ namespace LuaCreature
|
|||||||
std::advance(ritr, position);
|
std::advance(ritr, position);
|
||||||
Eluna::Push(L, *ritr);
|
Eluna::Push(L, *ritr);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SELECT_TARGET_RANDOM:
|
case SELECT_TARGET_RANDOM:
|
||||||
{
|
{
|
||||||
std::list<Unit*>::const_iterator itr = targetList.begin();
|
std::list<Unit*>::const_iterator itr = targetList.begin();
|
||||||
@@ -732,7 +732,7 @@ namespace LuaCreature
|
|||||||
std::advance(itr, urand(0, targetList.size() - 1));
|
std::advance(itr, urand(0, targetList.size() - 1));
|
||||||
Eluna::Push(L, *itr);
|
Eluna::Push(L, *itr);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
luaL_argerror(L, 2, "SelectAggroTarget expected");
|
luaL_argerror(L, 2, "SelectAggroTarget expected");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ ElunaEventProcessor::ElunaEventProcessor(Eluna** _E, WorldObject* _obj) : m_time
|
|||||||
|
|
||||||
ElunaEventProcessor::~ElunaEventProcessor()
|
ElunaEventProcessor::~ElunaEventProcessor()
|
||||||
{
|
{
|
||||||
RemoveEvents();
|
RemoveEvents_internal();
|
||||||
|
|
||||||
if (obj)
|
if (obj)
|
||||||
{
|
{
|
||||||
@@ -87,6 +87,12 @@ void ElunaEventProcessor::Update(uint32 diff)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ElunaEventProcessor::RemoveEvents()
|
void ElunaEventProcessor::RemoveEvents()
|
||||||
|
{
|
||||||
|
for (EventList::iterator it = eventList.begin(); it != eventList.end(); ++it)
|
||||||
|
it->second->to_Abort = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElunaEventProcessor::RemoveEvents_internal()
|
||||||
{
|
{
|
||||||
//if (!final)
|
//if (!final)
|
||||||
//{
|
//{
|
||||||
@@ -125,7 +131,13 @@ EventMgr::EventMgr(Eluna** _E) : globalProcessor(new ElunaEventProcessor(_E, NUL
|
|||||||
|
|
||||||
EventMgr::~EventMgr()
|
EventMgr::~EventMgr()
|
||||||
{
|
{
|
||||||
RemoveEvents();
|
{
|
||||||
|
ReadGuard lock(GetLock());
|
||||||
|
if (!processors.empty())
|
||||||
|
for (ProcessorSet::const_iterator it = processors.begin(); it != processors.end(); ++it) // loop processors
|
||||||
|
(*it)->RemoveEvents_internal();
|
||||||
|
globalProcessor->RemoveEvents_internal();
|
||||||
|
}
|
||||||
delete globalProcessor;
|
delete globalProcessor;
|
||||||
globalProcessor = NULL;
|
globalProcessor = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ private:
|
|||||||
class ElunaEventProcessor
|
class ElunaEventProcessor
|
||||||
{
|
{
|
||||||
friend class LuaEvent;
|
friend class LuaEvent;
|
||||||
|
friend class EventMgr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef std::multimap<uint64, LuaEvent*> EventList;
|
typedef std::multimap<uint64, LuaEvent*> EventList;
|
||||||
@@ -54,7 +55,7 @@ public:
|
|||||||
~ElunaEventProcessor();
|
~ElunaEventProcessor();
|
||||||
|
|
||||||
void Update(uint32 diff);
|
void Update(uint32 diff);
|
||||||
// instantly removes all timed events
|
// removes all timed events on next tick or at tick end
|
||||||
void RemoveEvents();
|
void RemoveEvents();
|
||||||
// set the event to be removed when executing
|
// set the event to be removed when executing
|
||||||
void RemoveEvent(int eventId);
|
void RemoveEvent(int eventId);
|
||||||
@@ -62,7 +63,9 @@ public:
|
|||||||
EventMap eventMap;
|
EventMap eventMap;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void RemoveEvents_internal();
|
||||||
void AddEvent(LuaEvent* Event);
|
void AddEvent(LuaEvent* Event);
|
||||||
|
bool removeAllEvents;
|
||||||
EventList eventList;
|
EventList eventList;
|
||||||
uint64 m_time;
|
uint64 m_time;
|
||||||
WorldObject* obj;
|
WorldObject* obj;
|
||||||
|
|||||||
@@ -1435,7 +1435,7 @@ namespace LuaGlobalFunctions
|
|||||||
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), phase);
|
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), phase);
|
||||||
|
|
||||||
uint32 db_lowguid = creature->GetDBTableGUIDLow();
|
uint32 db_lowguid = creature->GetDBTableGUIDLow();
|
||||||
if (!creaturLoadCreatureFromDB(db_lowguid, map))
|
if (!creature->LoadCreatureFromDB(db_lowguid, map))
|
||||||
{
|
{
|
||||||
delete creature;
|
delete creature;
|
||||||
Eluna::Push(L);
|
Eluna::Push(L);
|
||||||
@@ -2260,9 +2260,9 @@ namespace LuaGlobalFunctions
|
|||||||
*
|
*
|
||||||
* @return uint32 currTime
|
* @return uint32 currTime
|
||||||
*/
|
*/
|
||||||
int GetCurrTime(Eluna* E)
|
int GetCurrTime(Eluna* /*E*/, lua_State* L)
|
||||||
{
|
{
|
||||||
Eluna::Push(E->L, ElunaUtil::GetCurrTime());
|
Eluna::Push(L, ElunaUtil::GetCurrTime());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2272,30 +2272,30 @@ namespace LuaGlobalFunctions
|
|||||||
* @param uint32 oldTime
|
* @param uint32 oldTime
|
||||||
* @return uint32 timeDiff
|
* @return uint32 timeDiff
|
||||||
*/
|
*/
|
||||||
int GetTimeDiff(Eluna* E)
|
int GetTimeDiff(Eluna* /*E*/, lua_State* L)
|
||||||
{
|
{
|
||||||
uint32 oldtimems = Eluna::CHECKVAL<uint32>(E->L, 1);
|
uint32 oldtimems = Eluna::CHECKVAL<uint32>(L, 1);
|
||||||
|
|
||||||
Eluna::Push(E->L, ElunaUtil::GetTimeDiff(oldtimems));
|
Eluna::Push(L, ElunaUtil::GetTimeDiff(oldtimems));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetStackAsString(Eluna* E)
|
std::string GetStackAsString(lua_State* L)
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
for (int i = 1; i <= lua_gettop(E->L); ++i)
|
for (int i = 1; i <= lua_gettop(L); ++i)
|
||||||
oss << luaL_tolstring(E->L, i, NULL);
|
oss << luaL_tolstring(L, i, NULL);
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prints given parameters to the info log
|
* Prints given parameters to the info log
|
||||||
*
|
*
|
||||||
* @param ... variableArguments
|
* @param ... variableArguments
|
||||||
*/
|
*/
|
||||||
int PrintInfo(Eluna* E)
|
int PrintInfo(Eluna* /*E*/, lua_State* L)
|
||||||
{
|
{
|
||||||
ELUNA_LOG_INFO("%s", GetStackAsString(E).c_str());
|
ELUNA_LOG_INFO("%s", GetStackAsString(L).c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2304,9 +2304,9 @@ namespace LuaGlobalFunctions
|
|||||||
*
|
*
|
||||||
* @param ... variableArguments
|
* @param ... variableArguments
|
||||||
*/
|
*/
|
||||||
int PrintError(Eluna* E)
|
int PrintError(Eluna* /*E*/, lua_State* L)
|
||||||
{
|
{
|
||||||
ELUNA_LOG_ERROR("%s", GetStackAsString(E).c_str());
|
ELUNA_LOG_ERROR("%s", GetStackAsString(L).c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2315,9 +2315,9 @@ namespace LuaGlobalFunctions
|
|||||||
*
|
*
|
||||||
* @param ... variableArguments
|
* @param ... variableArguments
|
||||||
*/
|
*/
|
||||||
int PrintDebug(Eluna* E)
|
int PrintDebug(Eluna* /*E*/, lua_State* L)
|
||||||
{
|
{
|
||||||
ELUNA_LOG_DEBUG("%s", GetStackAsString(E).c_str());
|
ELUNA_LOG_DEBUG("%s", GetStackAsString(L).c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
139
HookMgr.cpp
139
HookMgr.cpp
@@ -1442,15 +1442,6 @@ uint32 Eluna::GetDialogStatus(Player* pPlayer, Creature* pCreature)
|
|||||||
return DIALOG_STATUS_SCRIPTED_NO_STATUS;
|
return DIALOG_STATUS_SCRIPTED_NO_STATUS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Eluna::OnSummoned(Creature* pCreature, Unit* pSummoner)
|
|
||||||
{
|
|
||||||
ENTRY_BEGIN(CreatureEventBindings, pCreature->GetEntry(), CREATURE_EVENT_ON_SUMMONED, return);
|
|
||||||
Push(L, pCreature);
|
|
||||||
Push(L, pSummoner);
|
|
||||||
ENTRY_EXECUTE(0);
|
|
||||||
ENDCALL();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Eluna::OnAddToWorld(Creature* creature)
|
void Eluna::OnAddToWorld(Creature* creature)
|
||||||
{
|
{
|
||||||
ENTRY_BEGIN(CreatureEventBindings, creature->GetEntry(), CREATURE_EVENT_ON_ADD, return);
|
ENTRY_BEGIN(CreatureEventBindings, creature->GetEntry(), CREATURE_EVENT_ON_ADD, return);
|
||||||
@@ -1467,6 +1458,22 @@ void Eluna::OnRemoveFromWorld(Creature* creature)
|
|||||||
ENDCALL();
|
ENDCALL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Eluna::OnSummoned(Creature* pCreature, Unit* pSummoner)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
ENTRY_BEGIN(CreatureEventBindings, pCreature->GetEntry(), CREATURE_EVENT_ON_SUMMONED, return false);
|
||||||
|
Push(L, pCreature);
|
||||||
|
Push(L, pSummoner);
|
||||||
|
ENTRY_EXECUTE(1);
|
||||||
|
FOR_RETS(i)
|
||||||
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
|
}
|
||||||
|
ENDCALL();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool Eluna::UpdateAI(Creature* me, const uint32 diff)
|
bool Eluna::UpdateAI(Creature* me, const uint32 diff)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
@@ -1474,8 +1481,10 @@ bool Eluna::UpdateAI(Creature* me, const uint32 diff)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, diff);
|
Eluna::Push(L, diff);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1490,8 +1499,10 @@ bool Eluna::EnterCombat(Creature* me, Unit* target)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, target);
|
Eluna::Push(L, target);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1526,8 +1537,10 @@ bool Eluna::JustDied(Creature* me, Unit* killer)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, killer);
|
Eluna::Push(L, killer);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1541,8 +1554,10 @@ bool Eluna::KilledUnit(Creature* me, Unit* victim)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, victim);
|
Eluna::Push(L, victim);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1556,8 +1571,10 @@ bool Eluna::JustSummoned(Creature* me, Creature* summon)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, summon);
|
Eluna::Push(L, summon);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1571,8 +1588,10 @@ bool Eluna::SummonedCreatureDespawn(Creature* me, Creature* summon)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, summon);
|
Eluna::Push(L, summon);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1587,8 +1606,10 @@ bool Eluna::MovementInform(Creature* me, uint32 type, uint32 id)
|
|||||||
Eluna::Push(L, type);
|
Eluna::Push(L, type);
|
||||||
Eluna::Push(L, id);
|
Eluna::Push(L, id);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1602,8 +1623,10 @@ bool Eluna::AttackStart(Creature* me, Unit* target)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, target);
|
Eluna::Push(L, target);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1617,8 +1640,10 @@ bool Eluna::EnterEvadeMode(Creature* me)
|
|||||||
ENTRY_BEGIN(CreatureEventBindings, me->GetEntry(), CREATURE_EVENT_ON_LEAVE_COMBAT, return false);
|
ENTRY_BEGIN(CreatureEventBindings, me->GetEntry(), CREATURE_EVENT_ON_LEAVE_COMBAT, return false);
|
||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1632,8 +1657,10 @@ bool Eluna::AttackedBy(Creature* me, Unit* attacker)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, attacker);
|
Eluna::Push(L, attacker);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1647,8 +1674,10 @@ bool Eluna::JustRespawned(Creature* me)
|
|||||||
ENTRY_BEGIN(CreatureEventBindings, me->GetEntry(), CREATURE_EVENT_ON_SPAWN, return false);
|
ENTRY_BEGIN(CreatureEventBindings, me->GetEntry(), CREATURE_EVENT_ON_SPAWN, return false);
|
||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1661,8 +1690,10 @@ bool Eluna::JustReachedHome(Creature* me)
|
|||||||
ENTRY_BEGIN(CreatureEventBindings, me->GetEntry(), CREATURE_EVENT_ON_REACH_HOME, return false);
|
ENTRY_BEGIN(CreatureEventBindings, me->GetEntry(), CREATURE_EVENT_ON_REACH_HOME, return false);
|
||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1677,8 +1708,10 @@ bool Eluna::ReceiveEmote(Creature* me, Player* player, uint32 emoteId)
|
|||||||
Eluna::Push(L, player);
|
Eluna::Push(L, player);
|
||||||
Eluna::Push(L, emoteId);
|
Eluna::Push(L, emoteId);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1710,8 +1743,10 @@ bool Eluna::MoveInLineOfSight(Creature* me, Unit* who)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, who);
|
Eluna::Push(L, who);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1735,8 +1770,10 @@ bool Eluna::SpellHit(Creature* me, Unit* caster, SpellInfo const* spell)
|
|||||||
Eluna::Push(L, caster);
|
Eluna::Push(L, caster);
|
||||||
Eluna::Push(L, spell->Id); // Pass spell object?
|
Eluna::Push(L, spell->Id); // Pass spell object?
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1751,8 +1788,10 @@ bool Eluna::SpellHitTarget(Creature* me, Unit* target, SpellInfo const* spell)
|
|||||||
Eluna::Push(L, target);
|
Eluna::Push(L, target);
|
||||||
Eluna::Push(L, spell->Id); // Pass spell object?
|
Eluna::Push(L, spell->Id); // Pass spell object?
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1768,8 +1807,10 @@ bool Eluna::SummonedCreatureDies(Creature* me, Creature* summon, Unit* killer)
|
|||||||
Eluna::Push(L, summon);
|
Eluna::Push(L, summon);
|
||||||
Eluna::Push(L, killer);
|
Eluna::Push(L, killer);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1783,8 +1824,10 @@ bool Eluna::OwnerAttackedBy(Creature* me, Unit* attacker)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, attacker);
|
Eluna::Push(L, attacker);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
@@ -1798,8 +1841,10 @@ bool Eluna::OwnerAttacked(Creature* me, Unit* target)
|
|||||||
Eluna::Push(L, me);
|
Eluna::Push(L, me);
|
||||||
Eluna::Push(L, target);
|
Eluna::Push(L, target);
|
||||||
ENTRY_EXECUTE(1);
|
ENTRY_EXECUTE(1);
|
||||||
FOR_RETS(i) {
|
FOR_RETS(i)
|
||||||
result = CHECKVAL<bool>(L, i, false);
|
{
|
||||||
|
if (lua_isboolean(L, i))
|
||||||
|
result = CHECKVAL<bool>(L, i, false);
|
||||||
}
|
}
|
||||||
ENDCALL();
|
ENDCALL();
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -248,6 +248,7 @@ void Eluna::GetScripts(std::string path)
|
|||||||
lua_requirepath +=
|
lua_requirepath +=
|
||||||
path + "/?;" +
|
path + "/?;" +
|
||||||
path + "/?.lua;" +
|
path + "/?.lua;" +
|
||||||
|
path + "/?.ext;" +
|
||||||
path + "/?.dll;" +
|
path + "/?.dll;" +
|
||||||
path + "/?.so;";
|
path + "/?.so;";
|
||||||
|
|
||||||
@@ -290,6 +291,7 @@ void Eluna::GetScripts(std::string path)
|
|||||||
lua_requirepath +=
|
lua_requirepath +=
|
||||||
path + "/?;" +
|
path + "/?;" +
|
||||||
path + "/?.lua;" +
|
path + "/?.lua;" +
|
||||||
|
path + "/?.ext;" +
|
||||||
path + "/?.dll;" +
|
path + "/?.dll;" +
|
||||||
path + "/?.so;";
|
path + "/?.so;";
|
||||||
|
|
||||||
@@ -373,7 +375,7 @@ void Eluna::RunScripts()
|
|||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
if (!luaL_loadfile(L, it->filepath.c_str()) && !lua_pcall(L, 0, 1, 0))
|
if (!luaL_loadfile(L, it->filepath.c_str()) && !lua_pcall(L, 0, 1, 0))
|
||||||
{
|
{
|
||||||
if (!lua_toboolean(L, -1))
|
if (lua_isnoneornil(L, -1) || (lua_isboolean(L, -1) && !lua_toboolean(L, -1)))
|
||||||
{
|
{
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
Push(L, true);
|
Push(L, true);
|
||||||
|
|||||||
@@ -225,8 +225,8 @@ public:
|
|||||||
bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* pQuest);
|
bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* pQuest);
|
||||||
bool OnQuestReward(Player* pPlayer, Creature* pCreature, Quest const* pQuest, uint32 opt);
|
bool OnQuestReward(Player* pPlayer, Creature* pCreature, Quest const* pQuest, uint32 opt);
|
||||||
uint32 GetDialogStatus(Player* pPlayer, Creature* pCreature);
|
uint32 GetDialogStatus(Player* pPlayer, Creature* pCreature);
|
||||||
void OnSummoned(Creature* creature, Unit* summoner);
|
|
||||||
|
|
||||||
|
bool OnSummoned(Creature* creature, Unit* summoner);
|
||||||
bool UpdateAI(Creature* me, const uint32 diff);
|
bool UpdateAI(Creature* me, const uint32 diff);
|
||||||
bool EnterCombat(Creature* me, Unit* target);
|
bool EnterCombat(Creature* me, Unit* target);
|
||||||
bool DamageTaken(Creature* me, Unit* attacker, uint32& damage);
|
bool DamageTaken(Creature* me, Unit* attacker, uint32& damage);
|
||||||
|
|||||||
Reference in New Issue
Block a user