Add ClientObjectRef:remove

wsc-dfc
Elias Fleckenstein 2021-03-26 13:15:10 +01:00
parent 22f73e9f27
commit e0b4859e7c
4 changed files with 32 additions and 19 deletions

View File

@ -94,7 +94,7 @@ Mod directory structure
The format is documented in `builtin/settingtypes.txt`.
It is parsed by the main menu settings dialogue to list mod-specific
settings in the "Clientmods" category.
settings in the "Clientmods" category.
### modname
@ -700,7 +700,7 @@ Call these functions only at load time!
* Registers a chatcommand `command` to manage a list that takes the args `del | add | list <param>`
* The list is stored comma-seperated in `setting`
* `desc` is the description
* `add` adds something to the list
* `add` adds something to the list
* `del` del removes something from the list
* `list` lists all items on the list
* `minetest.register_on_chatcommand(function(command, params))`
@ -1051,7 +1051,7 @@ Passed to `HTTPApiTable.fetch` callback. Returned by
* `minetest.register_cheat(name, category, setting | function)`
* Register an entry for the cheat menu
* If the Category is nonexistant, it will be created
* If the 3rd argument is a string it will be interpreted as a setting and toggled
* If the 3rd argument is a string it will be interpreted as a setting and toggled
when the player selects the entry in the cheat menu
* If the 3rd argument is a function it will be called
when the player selects the entry in the cheat menu
@ -1400,7 +1400,8 @@ This is basically a reference to a C++ `GenericCAO`.
* `get_max_hp()`: returns the maximum heath
* `punch()`: punches the object
* `rightclick()`: rightclicks the object
* `remove()`: removes the object permanently
### `Raycast`
A raycast on the map. It works with selection boxes.
@ -1792,7 +1793,7 @@ A reference to a C++ InventoryAction. You can move, drop and craft items in all
* it specifies how many items to drop / craft / move
* `0` means move all items
* default count: `0`
#### example
`local move_act = InventoryAction("move")
move_act:from("current_player", "main", 1)
@ -1807,7 +1808,7 @@ A reference to a C++ InventoryAction. You can move, drop and craft items in all
drop_act:apply()
`
* e.g. In first hotbar slot there are tree logs: Move one to craft field, then craft wood out of it and immediately drop it

View File

@ -450,10 +450,10 @@ void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt)
string initialization data
}
*/
LocalPlayer *player = m_env.getLocalPlayer();
bool try_reattach = player && player->isWaitingForReattach();
bool try_reattach = player && player->isWaitingForReattach();
try {
u8 type;
u16 removed_count, added_count, id;
@ -596,13 +596,13 @@ void Client::handleCommand_Breath(NetworkPacket* pkt)
}
void Client::handleCommand_MovePlayer(NetworkPacket* pkt)
{
{
LocalPlayer *player = m_env.getLocalPlayer();
assert(player != NULL);
if ((player->getCAO() && player->getCAO()->getParentId()) || player->isWaitingForReattach())
return;
v3f pos;
f32 pitch, yaw;
@ -622,10 +622,10 @@ void Client::handleCommand_MovePlayer(NetworkPacket* pkt)
it would just force the pitch and yaw values to whatever
the camera points to.
*/
if (g_settings->getBool("no_force_rotate"))
return;
ClientEvent *event = new ClientEvent();
event->type = CE_PLAYER_FORCE_MOVE;
event->player_force_move.pitch = pitch;
@ -833,12 +833,12 @@ void Client::handleCommand_PlaySound(NetworkPacket* pkt)
*pkt >> pitch;
*pkt >> ephemeral;
} catch (PacketError &e) {};
SimpleSoundSpec sound_spec(name, gain, fade, pitch);
if (m_mods_loaded && m_script->on_play_sound(sound_spec))
return;
// Start playing
int client_id = -1;
switch(type) {
@ -987,10 +987,10 @@ void Client::handleCommand_SpawnParticle(NetworkPacket* pkt)
ClientEvent *event = new ClientEvent();
event->type = CE_SPAWN_PARTICLE;
event->spawn_particle = new ParticleParameters(p);
if (m_mods_loaded && m_script->on_spawn_particle(*event->spawn_particle))
return;
m_client_event_queue.push(event);
}

View File

@ -173,6 +173,15 @@ int ClientObjectRef::l_rightclick(lua_State *L)
return 0;
}
int ClientObjectRef::l_remove(lua_State *L)
{
ClientObjectRef *ref = checkobject(L, 1);
ClientActiveObject *cao = get_cao(ref);
getClient(L)->getEnv().removeActiveObject(cao->getId());
return 0;
}
ClientObjectRef::ClientObjectRef(ClientActiveObject *object) : m_object(object)
{
}

View File

@ -89,4 +89,7 @@ private:
// rightclick(self)
static int l_rightclick(lua_State *L);
// remove(self)
static int l_remove(lua_State *L);
};