Crossfire Server, Trunk
player_changer.c
Go to the documentation of this file.
1 /*
2  * Crossfire -- cooperative multi-player graphical RPG and adventure game
3  *
4  * Copyright (c) 1999-2014 Mark Wedel and the Crossfire Development Team
5  * Copyright (c) 1992 Frank Tore Johansen
6  *
7  * Crossfire is free software and comes with ABSOLUTELY NO WARRANTY. You are
8  * welcome to redistribute it under certain conditions. For details, please
9  * see COPYING and LICENSE.
10  *
11  * The authors can be reached via e-mail at <crossfire@metalforge.org>.
12  */
13 
18 #include "global.h"
19 
20 #include <string.h>
21 
22 #include "ob_methods.h"
23 #include "ob_types.h"
24 #include "sounds.h"
25 #include "sproto.h"
26 
28 
34 }
35 
49  object *player;
50  char c;
51 
52  if (!op->above || !EXIT_PATH(op))
53  return METHOD_OK;
54 
55  /* This isn't all that great - means that the player_mover
56  * needs to be on top.
57  */
58  if (op->above->type == PLAYER) {
59  if (events_execute_object_event(op, EVENT_TRIGGER, op->above, NULL, NULL, SCRIPT_FIX_NOTHING) != 0)
60  return METHOD_OK;
61  player = op->above;
62  FOR_INV_PREPARE(op, walk)
65 
67  esrv_send_inventory(op->above, op->above);
68  esrv_update_item(UPD_FACE, op->above, op->above);
69 
70  /* update players death & WoR home-position */
71  sscanf(EXIT_PATH(op), "%c", &c);
72  if (c == '/') {
74  sizeof(player->contr->savebed_map));
75  player->contr->bed_x = EXIT_X(op);
76  player->contr->bed_y = EXIT_Y(op);
77  } else
78  LOG(llevDebug, "WARNING: destination '%s' in player_changer must be an absolute path!\n", EXIT_PATH(op));
79 
80  enter_exit(op->above, op);
81  save_player(player, 1);
82  }
83 
84  return METHOD_OK;
85 }
apply_changes_to_player
void apply_changes_to_player(object *pl, object *change, int limit_stats)
Definition: apply.c:1648
PLAYER
@ PLAYER
Definition: object.h:107
global.h
UPD_FACE
#define UPD_FACE
Definition: newclient.h:317
safe_strncpy
#define safe_strncpy
Definition: compat.h:27
register_process
void register_process(int ob_type, process_func method)
Definition: ob_types.c:71
esrv_send_inventory
void esrv_send_inventory(object *pl, object *op)
Definition: item.c:312
c
static event_registration c
Definition: citylife.cpp:425
METHOD_OK
#define METHOD_OK
Definition: ob_methods.h:15
pl
Definition: player.h:92
EXIT_PATH
#define EXIT_PATH(xyz)
Definition: define.h:439
events_execute_object_event
int events_execute_object_event(object *op, int eventcode, object *activator, object *third, const char *message, int fix)
Definition: events.cpp:266
pl::savebed_map
char savebed_map[MAX_BUF]
Definition: player.h:97
EVENT_TRIGGER
#define EVENT_TRIGGER
Definition: events.h:33
fix_object
void fix_object(object *op)
Definition: living.c:1126
FOR_INV_FINISH
#define FOR_INV_FINISH()
Definition: define.h:675
player
struct pl player
sproto.h
pl::bed_x
int16_t bed_x
Definition: player.h:98
EXIT_X
#define EXIT_X(xyz)
Definition: define.h:441
method_ret
char method_ret
Definition: ob_methods.h:14
pl::bed_y
int16_t bed_y
Definition: player.h:98
ob_types.h
sounds.h
SCRIPT_FIX_NOTHING
#define SCRIPT_FIX_NOTHING
Definition: global.h:378
LOG
void LOG(LogLevel logLevel, const char *format,...)
Definition: logger.c:51
PLAYER_CHANGER
@ PLAYER_CHANGER
Definition: object.h:162
enter_exit
void enter_exit(object *op, object *exit_ob)
Definition: server.c:721
AC_PLAYER_STAT_LIMIT
#define AC_PLAYER_STAT_LIMIT
Definition: define.h:595
give.op
op
Definition: give.py:33
esrv_update_item
void esrv_update_item(int flags, object *pl, object *op)
Definition: main.c:360
EXIT_Y
#define EXIT_Y(xyz)
Definition: define.h:442
player_changer_type_process
static method_ret player_changer_type_process(object *op)
Definition: player_changer.c:48
save_player
int save_player(object *op, int flag)
Definition: login.c:230
ob_methods.h
FOR_INV_PREPARE
#define FOR_INV_PREPARE(op_, it_)
Definition: define.h:668
init_type_player_changer
void init_type_player_changer(void)
Definition: player_changer.c:32
llevDebug
@ llevDebug
Definition: logger.h:13