Crossfire Server, Trunk  R20513
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 
27 static method_ret player_changer_type_process(ob_methods *context, object *op);
28 
34 }
35 
49 static method_ret player_changer_type_process(ob_methods *context, object *op) {
50  object *player;
51  char c;
52 
53  if (!op->above || !EXIT_PATH(op))
54  return METHOD_OK;
55 
56  /* This isn't all that great - means that the player_mover
57  * needs to be on top.
58  */
59  if (op->above->type == PLAYER) {
60  /* Lauwenmark: Handle for plugin TRIGGER event */
61  if (execute_event(op, EVENT_TRIGGER, op->above, NULL, NULL, SCRIPT_FIX_NOTHING) != 0)
62  return METHOD_OK;
63  player = op->above;
64  FOR_INV_PREPARE(op, walk)
67 
68  fix_object(player);
71 
72  /* update players death & WoR home-position */
73  sscanf(EXIT_PATH(op), "%c", &c);
74  if (c == '/') {
76  sizeof(player->contr->savebed_map));
77  player->contr->bed_x = EXIT_X(op);
78  player->contr->bed_y = EXIT_Y(op);
79  } else
80  LOG(llevDebug, "WARNING: destination '%s' in player_changer must be an absolute path!\n", EXIT_PATH(op));
81 
82  enter_exit(op->above, op);
83  save_player(player, 1);
84  }
85 
86  return METHOD_OK;
87 }
Sound-related defines.
void enter_exit(object *op, object *exit_ob)
Tries to move &#39;op&#39; to exit_ob.
Definition: server.c:706
Typedefs for ob_methods.
Definition: ob_methods.h:45
int16_t bed_x
Definition: player.h:98
int save_player(object *op, int flag)
Saves a player to disk.
Definition: login.c:211
void esrv_update_item(int flags, object *pl, object *op)
Updates object *op for player *pl.
Definition: main.c:342
struct pl player
One player.
void init_type_player_changer(void)
Initializer for the player changer object type.
void esrv_send_inventory(object *pl, object *op)
Sends inventory of a container.
Definition: item.c:307
struct obj * above
Pointer to the object stacked above this one.
Definition: object.h:288
static method_ret player_changer_type_process(ob_methods *context, object *op)
Move for PLAYER_CHANGER.
Global type definitions and header inclusions.
#define safe_strncpy
Definition: compat.h:23
char savebed_map[MAX_BUF]
Map where player will respawn after death.
Definition: player.h:97
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
void apply_changes_to_player(object *pl, object *change, int limit_stats)
Applies (race) changes to a player.
Definition: apply.c:1581
#define AC_PLAYER_STAT_LIMIT
Definition: define.h:632
#define METHOD_OK
Definition: ob_methods.h:15
#define FOR_INV_FINISH()
Finishes FOR_INV_PREPARE().
Definition: define.h:712
int16_t bed_y
x,y - coordinates of respawn (savebed).
Definition: player.h:98
#define EXIT_PATH(xyz)
Definition: define.h:455
#define EXIT_X(xyz)
Definition: define.h:457
struct pl * contr
Pointer to the player which control this object.
Definition: object.h:276
#define EXIT_Y(xyz)
Definition: define.h:458
Object type variables.
See Player.
Definition: object.h:107
#define UPD_FACE
Definition: newclient.h:292
Only for debugging purposes.
Definition: logger.h:13
uint8_t type
PLAYER, BULLET, etc.
Definition: object.h:338
int execute_event(object *op, int eventcode, object *activator, object *third, const char *message, int fix)
Definition: main.c:364
void register_process(int ob_type, process_func method)
Registers the process method for the given type.
Definition: ob_types.c:71
void LOG(LogLevel logLevel, const char *format,...)
Logs a message to stderr, or to file.
Definition: logger.c:51
Object type functions and variables.
void fix_object(object *op)
Updates all abilities given by applied objects in the inventory of the given object.
Definition: living.c:1120
#define SCRIPT_FIX_NOTHING
Definition: global.h:362
#define EVENT_TRIGGER
Button pushed, lever pulled, etc.
Definition: plugin.h:74
#define FOR_INV_PREPARE(op_, it_)
Constructs a loop iterating over the inventory of an object.
Definition: define.h:705