Crossfire Server  1.75.0
player_changer.cpp
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 
27 static method_ret player_changer_type_process(object *op);
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 
66  fix_object(player);
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 }
static event_registration c
Definition: citylife.cpp:424
Sound-related defines.
void enter_exit(object *op, object *exit_ob)
Tries to move &#39;op&#39; to exit_ob.
Definition: server.cpp:727
void LOG(LogLevel logLevel, const char *format,...)
Logs a message to stderr, or to file.
Definition: logger.cpp:58
void fix_object(object *op)
Updates all abilities given by applied objects in the inventory of the given object.
Definition: living.cpp:1132
int save_player(object *op, int flag)
Saves a player to disk.
Definition: login.cpp:239
void esrv_update_item(int flags, object *pl, object *op)
Updates object *op for player *pl.
Definition: main.cpp:359
#define AC_PLAYER_STAT_LIMIT
Limit stats to racial maximum.
Definition: define.h:619
object * above
Pointer to the object stacked above this one.
Definition: object.h:296
void esrv_send_inventory(object *pl, object *op)
Sends inventory of a container.
Definition: item.cpp:316
Global type definitions and header inclusions.
#define safe_strncpy
Definition: compat.h:27
struct player * contr
Pointer to the player which control this object.
Definition: object.h:284
void init_type_player_changer(void)
Initializer for the player changer object type.
void register_process(int ob_type, process_func method)
Registers the process method for the given type.
Definition: ob_types.cpp:71
int16_t bed_x
Definition: player.h:113
char method_ret
Define some standard return values for callbacks which don&#39;t need to return any other results...
Definition: ob_methods.h:14
#define SCRIPT_FIX_NOTHING
Definition: global.h:381
void apply_changes_to_player(object *pl, object *change, int limit_stats)
Applies (race) changes to a player.
Definition: apply.cpp:1325
#define METHOD_OK
Definition: ob_methods.h:15
#define FOR_INV_FINISH()
Finishes FOR_INV_PREPARE().
Definition: define.h:700
static method_ret player_changer_type_process(object *op)
Move for PLAYER_CHANGER.
#define EVENT_TRIGGER
Button pushed, lever pulled, etc.
Definition: events.h:42
#define EXIT_PATH(xyz)
Definition: define.h:439
#define EXIT_X(xyz)
Definition: define.h:441
int16_t bed_y
x,y - coordinates of respawn (savebed).
Definition: player.h:113
char savebed_map[MAX_BUF]
Map where player will respawn after death.
Definition: player.h:112
#define EXIT_Y(xyz)
Definition: define.h:442
Object type variables.
See Player Changer.
Definition: object.h:167
See Player.
Definition: object.h:112
#define UPD_FACE
Definition: newclient.h:333
Only for debugging purposes.
Definition: logger.h:13
uint8_t type
PLAYER, BULLET, etc.
Definition: object.h:348
int events_execute_object_event(object *op, int eventcode, object *activator, object *third, const char *message, int fix)
Execute an event on the specified object.
Definition: events.cpp:309
One player.
Definition: player.h:107
Object type functions and variables.
#define FOR_INV_PREPARE(op_, it_)
Constructs a loop iterating over the inventory of an object.
Definition: define.h:693