forked from Mirrorlandia_minetest/minetest
[CSM] Add on_death, on_hp_modification & oh_damage_taken callbacks (#5093)
* Add on_death callback * Add on_hp_modification & on_damage_taken callbacks * move preview code to preview.lua
This commit is contained in:
parent
cb3a61f8db
commit
9978f5af82
@ -3,20 +3,9 @@ local scriptpath = core.get_builtin_path()..DIR_DELIM
|
|||||||
local clientpath = scriptpath.."client"..DIR_DELIM
|
local clientpath = scriptpath.."client"..DIR_DELIM
|
||||||
|
|
||||||
dofile(clientpath .. "register.lua")
|
dofile(clientpath .. "register.lua")
|
||||||
|
dofile(clientpath .. "preview.lua")
|
||||||
|
|
||||||
-- This is an example function to ensure it's working properly, should be removed before merge
|
core.register_on_death(function()
|
||||||
core.register_on_shutdown(function()
|
core.display_chat_message("You died.")
|
||||||
print("shutdown client")
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- This is an example function to ensure it's working properly, should be removed before merge
|
|
||||||
core.register_on_receiving_chat_messages(function(message)
|
|
||||||
print("Received message " .. message)
|
|
||||||
return false
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- This is an example function to ensure it's working properly, should be removed before merge
|
|
||||||
core.register_on_sending_chat_messages(function(message)
|
|
||||||
print("Sending message " .. message)
|
|
||||||
return false
|
|
||||||
end)
|
|
||||||
|
24
builtin/client/preview.lua
Normal file
24
builtin/client/preview.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
-- This is an example function to ensure it's working properly, should be removed before merge
|
||||||
|
core.register_on_shutdown(function()
|
||||||
|
print("shutdown client")
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- This is an example function to ensure it's working properly, should be removed before merge
|
||||||
|
core.register_on_receiving_chat_messages(function(message)
|
||||||
|
print("[PREVIEW] Received message " .. message)
|
||||||
|
return false
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- This is an example function to ensure it's working properly, should be removed before merge
|
||||||
|
core.register_on_sending_chat_messages(function(message)
|
||||||
|
print("[PREVIEW] Sending message " .. message)
|
||||||
|
return false
|
||||||
|
end)
|
||||||
|
|
||||||
|
core.register_on_hp_modification(function(hp)
|
||||||
|
print("[PREVIEW] HP modified " .. hp)
|
||||||
|
end)
|
||||||
|
|
||||||
|
core.register_on_damage_taken(function(hp)
|
||||||
|
print("[PREVIEW] Damage taken " .. hp)
|
||||||
|
end)
|
@ -58,5 +58,8 @@ end
|
|||||||
core.registered_on_shutdown, core.register_on_shutdown = make_registration()
|
core.registered_on_shutdown, core.register_on_shutdown = make_registration()
|
||||||
core.registered_on_receiving_chat_messages, core.register_on_receiving_chat_messages = make_registration()
|
core.registered_on_receiving_chat_messages, core.register_on_receiving_chat_messages = make_registration()
|
||||||
core.registered_on_sending_chat_messages, core.register_on_sending_chat_messages = make_registration()
|
core.registered_on_sending_chat_messages, core.register_on_sending_chat_messages = make_registration()
|
||||||
|
core.registered_on_death, core.register_on_death = make_registration()
|
||||||
|
core.registered_on_hp_modification, core.register_on_hp_modification = make_registration()
|
||||||
|
core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
|
||||||
|
|
||||||
|
|
||||||
|
@ -562,6 +562,8 @@ public:
|
|||||||
m_chat_queue.push(input);
|
m_chat_queue.push(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClientScripting *getScript() { return m_script; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Virtual methods from con::PeerHandler
|
// Virtual methods from con::PeerHandler
|
||||||
|
@ -41,7 +41,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "guiKeyChangeMenu.h"
|
#include "guiKeyChangeMenu.h"
|
||||||
#include "guiPasswordChange.h"
|
#include "guiPasswordChange.h"
|
||||||
#include "guiVolumeChange.h"
|
#include "guiVolumeChange.h"
|
||||||
#include "hud.h"
|
|
||||||
#include "mainmenumanager.h"
|
#include "mainmenumanager.h"
|
||||||
#include "mapblock.h"
|
#include "mapblock.h"
|
||||||
#include "nodedef.h" // Needed for determining pointing to nodes
|
#include "nodedef.h" // Needed for determining pointing to nodes
|
||||||
@ -61,6 +60,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "minimap.h"
|
#include "minimap.h"
|
||||||
#include "mapblock_mesh.h"
|
#include "mapblock_mesh.h"
|
||||||
|
#include "script/clientscripting.h"
|
||||||
|
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
|
|
||||||
@ -3240,8 +3240,7 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
|
|||||||
|
|
||||||
if (event.type == CE_PLAYER_DAMAGE &&
|
if (event.type == CE_PLAYER_DAMAGE &&
|
||||||
client->getHP() != 0) {
|
client->getHP() != 0) {
|
||||||
//u16 damage = event.player_damage.amount;
|
client->getScript()->on_damage_taken(event.player_damage.amount);
|
||||||
//infostream<<"Player damage: "<<damage<<std::endl;
|
|
||||||
|
|
||||||
*damage_flash += 95.0 + 3.2 * event.player_damage.amount;
|
*damage_flash += 95.0 + 3.2 * event.player_damage.amount;
|
||||||
*damage_flash = MYMIN(*damage_flash, 127.0);
|
*damage_flash = MYMIN(*damage_flash, 127.0);
|
||||||
@ -3259,7 +3258,7 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
|
|||||||
show_deathscreen(¤t_formspec, client, texture_src,
|
show_deathscreen(¤t_formspec, client, texture_src,
|
||||||
device, &input->joystick);
|
device, &input->joystick);
|
||||||
|
|
||||||
chat_backend->addMessage(L"", L"You died.");
|
client->getScript()->on_death();
|
||||||
|
|
||||||
/* Handle visualization */
|
/* Handle visualization */
|
||||||
*damage_flash = 0;
|
*damage_flash = 0;
|
||||||
|
@ -526,6 +526,8 @@ void Client::handleCommand_HP(NetworkPacket* pkt)
|
|||||||
|
|
||||||
player->hp = hp;
|
player->hp = hp;
|
||||||
|
|
||||||
|
m_script->on_hp_modification(hp);
|
||||||
|
|
||||||
if (hp < oldhp) {
|
if (hp < oldhp) {
|
||||||
// Add to ClientEvent queue
|
// Add to ClientEvent queue
|
||||||
ClientEvent event;
|
ClientEvent event;
|
||||||
|
@ -59,3 +59,38 @@ bool ScriptApiClient::on_receiving_message(const std::string &message)
|
|||||||
bool ate = lua_toboolean(L, -1);
|
bool ate = lua_toboolean(L, -1);
|
||||||
return ate;
|
return ate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptApiClient::on_damage_taken(int32_t damage_amount)
|
||||||
|
{
|
||||||
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
|
|
||||||
|
// Get core.registered_on_chat_messages
|
||||||
|
lua_getglobal(L, "core");
|
||||||
|
lua_getfield(L, -1, "registered_on_damage_taken");
|
||||||
|
// Call callbacks
|
||||||
|
lua_pushinteger(L, damage_amount);
|
||||||
|
runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptApiClient::on_hp_modification(int32_t newhp)
|
||||||
|
{
|
||||||
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
|
|
||||||
|
// Get core.registered_on_chat_messages
|
||||||
|
lua_getglobal(L, "core");
|
||||||
|
lua_getfield(L, -1, "registered_on_hp_modification");
|
||||||
|
// Call callbacks
|
||||||
|
lua_pushinteger(L, newhp);
|
||||||
|
runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptApiClient::on_death()
|
||||||
|
{
|
||||||
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
|
|
||||||
|
// Get registered shutdown hooks
|
||||||
|
lua_getglobal(L, "core");
|
||||||
|
lua_getfield(L, -1, "registered_on_death");
|
||||||
|
// Call callbacks
|
||||||
|
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
|
||||||
|
}
|
||||||
|
@ -32,5 +32,9 @@ public:
|
|||||||
// Chat message handlers
|
// Chat message handlers
|
||||||
bool on_sending_message(const std::string &message);
|
bool on_sending_message(const std::string &message);
|
||||||
bool on_receiving_message(const std::string &message);
|
bool on_receiving_message(const std::string &message);
|
||||||
|
|
||||||
|
void on_damage_taken(int32_t damage_amount);
|
||||||
|
void on_hp_modification(int32_t newhp);
|
||||||
|
void on_death();
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user