-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Teleport.c
65 lines (63 loc) · 2.85 KB
/
Teleport.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <Server/Packets/Packets.h>
#include <Server/ParseConvert.h>
#include <Server/Server.h>
#include <Util/Checks/PositionChecks.h>
#include <Util/Log.h>
#include <Util/Notice.h>
void cmd_tp(void* p_server, command_args_t arguments)
{
server_t* server = (server_t*) p_server;
if (arguments.console) {
LOG_INFO("You cannot use this command from console");
return;
}
uint8_t player_to_be_teleported = 33;
uint8_t player_to_teleport_to = 33;
if (arguments.argc == 3 && parse_player(arguments.argv[1], &player_to_be_teleported, NULL) &&
parse_player(arguments.argv[2], &player_to_teleport_to, NULL))
{
if (valid_pos_v3f(server, server->player[player_to_teleport_to].movement.position)) {
movement_t* from = &server->player[player_to_be_teleported].movement;
movement_t* to = &server->player[player_to_teleport_to].movement;
from->position.x = to->position.x - 0.5f;
from->position.y = to->position.y - 0.5f;
from->position.z = to->position.z - 2.36f;
send_position_packet(server, player_to_be_teleported, from->position.x, from->position.y, from->position.z);
} else {
send_server_notice(server,
arguments.player_id,
arguments.console,
"Player %hhu is at invalid position",
player_to_teleport_to);
}
} else {
send_server_notice(
server, arguments.player_id, arguments.console, "Incorrect amount of arguments or wrong argument type");
}
}
void cmd_tpc(void* p_server, command_args_t arguments)
{
server_t* server = (server_t*) p_server;
if (arguments.console) {
LOG_INFO("You cannot use this command from console");
return;
}
vector3f_t pos = {0, 0, 0};
if (arguments.argc == 4 && PARSE_VECTOR3F(arguments, 1, &pos)) {
if (valid_pos_v3f(server, pos)) {
server->player[arguments.player_id].movement.position.x = pos.x - 0.5f;
server->player[arguments.player_id].movement.position.y = pos.y - 0.5f;
server->player[arguments.player_id].movement.position.z = pos.z - 2.36f;
send_position_packet(server,
arguments.player_id,
server->player[arguments.player_id].movement.position.x,
server->player[arguments.player_id].movement.position.y,
server->player[arguments.player_id].movement.position.z);
} else {
send_server_notice(server, arguments.player_id, arguments.console, "Invalid position");
}
} else {
send_server_notice(
server, arguments.player_id, arguments.console, "Incorrect amount of arguments or wrong argument type");
}
}