Added "player destroying" and "player destroyed" hooks
Hooks: HOOK_PLAYER_DESTROYING HOOK_PLAYER_DESTROYED Idea from: https://github.com/mc-server/MCServer/issues/473
This commit is contained in:
parent
2407a67906
commit
bac750b24e
|
@ -67,6 +67,8 @@ public:
|
||||||
virtual bool OnPlayerAnimation (cPlayer & a_Player, int a_Animation) = 0;
|
virtual bool OnPlayerAnimation (cPlayer & a_Player, int a_Animation) = 0;
|
||||||
virtual bool OnPlayerBreakingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) = 0;
|
virtual bool OnPlayerBreakingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) = 0;
|
||||||
virtual bool OnPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) = 0;
|
virtual bool OnPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) = 0;
|
||||||
|
virtual bool OnPlayerDestroying (cPlayer & a_Player) = 0;
|
||||||
|
virtual bool OnPlayerDestroyed (cPlayer & a_Player) = 0;
|
||||||
virtual bool OnPlayerEating (cPlayer & a_Player) = 0;
|
virtual bool OnPlayerEating (cPlayer & a_Player) = 0;
|
||||||
virtual bool OnPlayerFished (cPlayer & a_Player, const cItems & a_Reward) = 0;
|
virtual bool OnPlayerFished (cPlayer & a_Player, const cItems & a_Reward) = 0;
|
||||||
virtual bool OnPlayerFishing (cPlayer & a_Player, cItems & a_Reward) = 0;
|
virtual bool OnPlayerFishing (cPlayer & a_Player, cItems & a_Reward) = 0;
|
||||||
|
|
|
@ -623,6 +623,46 @@ bool cPluginLua::OnPlayerBrokenBlock(cPlayer & a_Player, int a_BlockX, int a_Blo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPluginLua::OnPlayerDestroying(cPlayer & a_Player)
|
||||||
|
{
|
||||||
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
bool res = false;
|
||||||
|
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_PLAYER_DESTROYING];
|
||||||
|
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
|
||||||
|
{
|
||||||
|
m_LuaState.Call((int)(**itr), &a_Player, cLuaState::Return, res);
|
||||||
|
if (res)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPluginLua::OnPlayerDestroyed(cPlayer & a_Player)
|
||||||
|
{
|
||||||
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
bool res = false;
|
||||||
|
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_PLAYER_DESTROYED];
|
||||||
|
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
|
||||||
|
{
|
||||||
|
m_LuaState.Call((int)(**itr), &a_Player, cLuaState::Return, res);
|
||||||
|
if (res)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPluginLua::OnPlayerEating(cPlayer & a_Player)
|
bool cPluginLua::OnPlayerEating(cPlayer & a_Player)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
|
|
@ -64,6 +64,8 @@ public:
|
||||||
virtual bool OnPlayerAnimation (cPlayer & a_Player, int a_Animation) override;
|
virtual bool OnPlayerAnimation (cPlayer & a_Player, int a_Animation) override;
|
||||||
virtual bool OnPlayerBreakingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
|
virtual bool OnPlayerBreakingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
|
||||||
virtual bool OnPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
|
virtual bool OnPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
|
||||||
|
virtual bool OnPlayerDestroying (cPlayer & a_Player) override;
|
||||||
|
virtual bool OnPlayerDestroyed (cPlayer & a_Player) override;
|
||||||
virtual bool OnPlayerEating (cPlayer & a_Player) override;
|
virtual bool OnPlayerEating (cPlayer & a_Player) override;
|
||||||
virtual bool OnPlayerFished (cPlayer & a_Player, const cItems & a_Reward) override;
|
virtual bool OnPlayerFished (cPlayer & a_Player, const cItems & a_Reward) override;
|
||||||
virtual bool OnPlayerFishing (cPlayer & a_Player, cItems & a_Reward) override;
|
virtual bool OnPlayerFishing (cPlayer & a_Player, cItems & a_Reward) override;
|
||||||
|
|
|
@ -673,6 +673,48 @@ bool cPluginManager::CallHookPlayerBrokenBlock(cPlayer & a_Player, int a_BlockX,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPluginManager::CallHookPlayerDestroying(cPlayer & a_Player)
|
||||||
|
{
|
||||||
|
HookMap::iterator Plugins = m_Hooks.find(HOOK_PLAYER_DESTROYING);
|
||||||
|
if (Plugins == m_Hooks.end())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
|
||||||
|
{
|
||||||
|
if ((*itr)->OnPlayerDestroying(a_Player))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPluginManager::CallHookPlayerDestroyed(cPlayer & a_Player)
|
||||||
|
{
|
||||||
|
HookMap::iterator Plugins = m_Hooks.find(HOOK_PLAYER_DESTROYED);
|
||||||
|
if (Plugins == m_Hooks.end())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
|
||||||
|
{
|
||||||
|
if ((*itr)->OnPlayerDestroyed(a_Player))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPluginManager::CallHookPlayerEating(cPlayer & a_Player)
|
bool cPluginManager::CallHookPlayerEating(cPlayer & a_Player)
|
||||||
{
|
{
|
||||||
HookMap::iterator Plugins = m_Hooks.find(HOOK_PLAYER_EATING);
|
HookMap::iterator Plugins = m_Hooks.find(HOOK_PLAYER_EATING);
|
||||||
|
|
|
@ -79,6 +79,8 @@ public: // tolua_export
|
||||||
HOOK_LOGIN,
|
HOOK_LOGIN,
|
||||||
HOOK_PLAYER_BREAKING_BLOCK,
|
HOOK_PLAYER_BREAKING_BLOCK,
|
||||||
HOOK_PLAYER_BROKEN_BLOCK,
|
HOOK_PLAYER_BROKEN_BLOCK,
|
||||||
|
HOOK_PLAYER_DESTROYING,
|
||||||
|
HOOK_PLAYER_DESTROYED,
|
||||||
HOOK_PLAYER_EATING,
|
HOOK_PLAYER_EATING,
|
||||||
HOOK_PLAYER_FISHED,
|
HOOK_PLAYER_FISHED,
|
||||||
HOOK_PLAYER_FISHING,
|
HOOK_PLAYER_FISHING,
|
||||||
|
@ -170,6 +172,8 @@ public: // tolua_export
|
||||||
bool CallHookPlayerAnimation (cPlayer & a_Player, int a_Animation);
|
bool CallHookPlayerAnimation (cPlayer & a_Player, int a_Animation);
|
||||||
bool CallHookPlayerBreakingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
|
bool CallHookPlayerBreakingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
|
||||||
bool CallHookPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
|
bool CallHookPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
|
||||||
|
bool CallHookPlayerDestroying (cPlayer & a_Player);
|
||||||
|
bool CallHookPlayerDestroyed (cPlayer & a_Player);
|
||||||
bool CallHookPlayerEating (cPlayer & a_Player);
|
bool CallHookPlayerEating (cPlayer & a_Player);
|
||||||
bool CallHookPlayerFished (cPlayer & a_Player, const cItems a_Reward);
|
bool CallHookPlayerFished (cPlayer & a_Player, const cItems a_Reward);
|
||||||
bool CallHookPlayerFishing (cPlayer & a_Player, cItems a_Reward);
|
bool CallHookPlayerFishing (cPlayer & a_Player, cItems a_Reward);
|
||||||
|
|
|
@ -120,6 +120,8 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName)
|
||||||
|
|
||||||
cPlayer::~cPlayer(void)
|
cPlayer::~cPlayer(void)
|
||||||
{
|
{
|
||||||
|
cRoot::Get()->GetPluginManager()->CallHookPlayerDestroying(*this);
|
||||||
|
|
||||||
LOGD("Deleting cPlayer \"%s\" at %p, ID %d", m_PlayerName.c_str(), this, GetUniqueID());
|
LOGD("Deleting cPlayer \"%s\" at %p, ID %d", m_PlayerName.c_str(), this, GetUniqueID());
|
||||||
|
|
||||||
// Notify the server that the player is being destroyed
|
// Notify the server that the player is being destroyed
|
||||||
|
@ -134,6 +136,8 @@ cPlayer::~cPlayer(void)
|
||||||
delete m_InventoryWindow;
|
delete m_InventoryWindow;
|
||||||
|
|
||||||
LOGD("Player %p deleted", this);
|
LOGD("Player %p deleted", this);
|
||||||
|
|
||||||
|
cRoot::Get()->GetPluginManager()->CallHookPlayerDestroyed(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user