Atrinik Server  4.0
rename.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 <player.h>
34 #include <object.h>
35 
37 void command_rename(object *op, const char *command, char *params)
38 {
39  object *tmp;
40 
41  tmp = find_marked_object(op);
42 
43  if (!tmp) {
44  draw_info(COLOR_WHITE, op, "No marked item to rename.");
45  return;
46  }
47 
48  params = player_sanitize_input(params);
49 
50  /* Clear custom name. */
51  if (params == NULL) {
52  if (tmp->custom_name == NULL) {
53  draw_info(COLOR_WHITE, op, "This item has no custom name.");
54  return;
55  }
56 
58  char *name = object_get_base_name_s(tmp, op);
59  draw_info_format(COLOR_WHITE, op, "You stop calling your %s with weird "
60  "names.", name);
61  efree(name);
62  } else {
63  if (tmp->type == MONEY) {
64  draw_info(COLOR_WHITE, op, "You cannot rename that item.");
65  return;
66  }
67 
68  if (strlen(params) > 127) {
69  draw_info(COLOR_WHITE, op, "New name is too long, maximum is 127 characters.");
70  return;
71  }
72 
73  char *name = object_get_base_name_s(tmp, op);
74 
75  if (tmp->custom_name != NULL && strcmp(tmp->custom_name, params) == 0) {
76  draw_info_format(COLOR_WHITE, op, "You keep calling your %s %s.",
77  name, tmp->custom_name);
78  efree(name);
79  return;
80  }
81 
82  /* Set custom name. */
83  FREE_AND_COPY_HASH(tmp->custom_name, params);
84  draw_info_format(COLOR_WHITE, op, "Your %s will now be called %s.",
85  name, tmp->custom_name);
86  CONTR(op)->stat_renamed_items++;
87  efree(name);
88  }
89 
90  esrv_update_item(UPD_NAME, tmp);
91  object_merge(tmp);
92 }
#define FREE_AND_COPY_HASH(_sv_, _nv_)
Definition: global.h:100
#define MONEY
Definition: define.h:226
char * object_get_base_name_s(const object *op, const object *caller)
Definition: item.c:534
char * player_sanitize_input(char *str)
Definition: player.c:1311
object * object_merge(object *op)
Definition: object.c:479
void command_rename(object *op, const char *command, char *params)
Definition: rename.c:37
void esrv_update_item(int flags, object *op)
Definition: item.c:639
uint8_t type
Definition: object.h:360
#define FREE_AND_CLEAR_HASH(_nv_)
Definition: global.h:130
shstr * custom_name
Definition: object.h:190
object * find_marked_object(object *op)
Definition: player.c:1393