Atrinik Server  4.0
tp.c
Go to the documentation of this file.
1 /*************************************************************************
2  * Atrinik, a Multiplayer Online Role Playing Game *
3  * *
4  * Copyright (C) 2009-2014 Alex Tokar and Atrinik Development Team *
5  * *
6  * Fork from Crossfire (Multiplayer game for X-windows). *
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this program; if not, write to the Free Software *
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
21  * *
22  * The author can be reached at admin@atrinik.org *
23  ************************************************************************/
24 
32 #include <global.h>
33 #include <toolkit/string.h>
34 #include <player.h>
35 #include <object.h>
36 
38 void command_tp(object *op, const char *command, char *params)
39 {
40  char word[MAX_BUF];
41  size_t pos;
42  player *dst, *who;
43 
44  pos = 0;
45 
46  if (!string_get_word(params, &pos, ' ', word, sizeof(word), '"')) {
47  draw_info(COLOR_WHITE, op, "Usage: /tp <dst> &lsqb;who&rsqb;");
48  return;
49  }
50 
51  dst = find_player(word);
52 
53  if (string_get_word(params, &pos, ' ', word, sizeof(word), '"')) {
54  who = find_player(word);
55  } else {
56  who = CONTR(op);
57  }
58 
59  if (!dst || !who) {
60  draw_info(COLOR_WHITE, op, "No such player.");
61  return;
62  }
63 
64  if (dst == who) {
65  draw_info(COLOR_WHITE, op, "You cannot teleport yourself to yourself.");
66  return;
67  }
68 
69  draw_info_format(COLOR_WHITE, op, "Teleporting %s to %s.", who->ob->name, dst->ob->name);
70 
71  object_remove(who->ob, 0);
72  who->ob->x = dst->ob->x;
73  who->ob->y = dst->ob->y;
74  object_insert_map(who->ob, dst->ob->map, NULL, INS_NO_MERGE);
75 }
player * find_player(const char *plname)
Definition: player.c:96
object * ob
Definition: player.h:185
void object_remove(object *op, int flags)
Definition: object.c:1623
int16_t y
Definition: object.h:276
struct mapdef * map
Definition: object.h:139
const char * name
Definition: object.h:168
int16_t x
Definition: object.h:273
object * object_insert_map(object *op, mapstruct *m, object *originator, int flag)
Definition: object.c:1741
#define INS_NO_MERGE
Definition: object.h:564
void command_tp(object *op, const char *command, char *params)
Definition: tp.c:38