 |
Crossfire Server, Trunk
1.75.0
|
Go to the documentation of this file.
53 FILE *deadplayer, *liveplayer;
60 const char *race = NULL;
71 LOG(
llevError,
"resurrect_player: race set to %s, but no treasurelist of that name!\n",
spell->race);
81 LOG(
llevError,
"resurrect_player: got null treasure from treasurelist %s!\n",
spell->race);
90 strcpy(newname, path);
91 strcat(newname,
".pl");
93 strcpy(oldname, newname);
94 strcat(oldname,
".dead");
96 if (!(deadplayer = fopen(oldname,
"r"))) {
98 "The soul of %s cannot be reached.",
103 if (!access(newname, 0)) {
105 "The soul of %s has already been reborn!",
111 liveplayer =
of_open(&of, newname);
112 if (liveplayer == NULL) {
114 "The soul of %s cannot be re-embodied at the moment.",
120 while (!feof(deadplayer)) {
121 if ( fgets(
buf, 255, deadplayer) == NULL )
break;
122 sscanf(
buf,
"%s", buf2);
123 if (!(strcmp(buf2,
"exp"))) {
124 sscanf(
buf,
"%s %" FMT64, buf2, &exp);
125 if (
spell->stats.exp) {
126 exp -= exp/
spell->stats.exp;
127 snprintf(
buf,
sizeof(
buf),
"exp %" FMT64 "\n", exp);
130 if (!(strcmp(buf2,
"Con"))) {
131 sscanf(
buf,
"%s %d", buf2, &Con);
132 Con -=
spell->stats.Con;
135 snprintf(
buf,
sizeof(
buf),
"Con %d\n", Con);
137 if (race && !strcmp(buf2,
"race")) {
138 snprintf(
buf,
sizeof(
buf),
"race %s\n", race);
140 fputs(
buf, liveplayer);
144 "The soul of %s cannot be re-embodied at the moment.",
182 object *temp, *newob;
183 char name_to_resurrect[
MAX_BUF];
184 char *corpse_account = NULL;
185 int leveldead = 25, mflags, clevel;
188 int spell_success = 0;
192 if (
spell->last_heal) {
199 safe_strncpy(name_to_resurrect, arg,
sizeof(name_to_resurrect));
214 if (tmp->type ==
CORPSE) {
223 "You need a body for this spell.");
231 if (corpse_account) strcpy(corpse_account, temp->
slaying);
235 if (temp && temp->
map) {
243 leveldead = temp->
level;
249 if (
spell->randomitems) {
252 for (
t =
spell->randomitems->items;
t;
t =
t->next) {
261 free(corpse_account);
262 return spell_success;
283 chance += levelcaster-leveldead;
305 strcpy(filename, path);
306 strcat(filename,
".pl");
307 strcpy(newname, filename);
308 strcat(newname,
".dead");
310 if (rename(filename, newname) != 0) {
311 LOG(
llevError,
"Cannot rename dead player's file %s into %s: %s\n", filename, newname, strerror(errno));
316 LOG(
llevError,
"Could not edit the account to indicate permanent death for %s!\n", op->
name);
struct Settings settings
Global settings.
#define FOR_MAP_FINISH()
Finishes FOR_MAP_PREPARE().
@ llevError
Error, serious thing.
void LOG(LogLevel logLevel, const char *format,...)
Logs a message to stderr, or to file.
int make_perma_dead(object *op)
This will edit the character account information so that the character that just died in permadeath w...
int of_close(OutputFile *of)
Closes an output file.
FILE * of_open(OutputFile *of, const char *fname)
Opens an output file.
treasure * items
Items in this list, linked.
int16_t total_chance
If non-zero, only 1 item on this list should be generated.
struct mapstruct * map
Pointer to the map in which this object is present.
treasurelist * find_treasurelist(const char *name)
Search for the given treasurelist by name.
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...) PRINTF_ARGS(6
int rndm(int min, int max)
Returns a number between min and max.
int16_t level
Level of creature or object.
void dead_player(object *op)
Kill a player on a permanent death server with resurrection.
int cast_raise_dead_spell(object *op, object *caster, object *spell, int dir, const char *arg)
This handles the raise dead / resurrection spells.
#define MSG_TYPE_SPELL_SUCCESS
Spell succeeded messages.
int16_t y
Position in the map for this object.
static event_registration m
void object_free_drop_inventory(object *ob)
Frees everything allocated by an object, removes it from the list of used objects,...
short freearr_y[SIZEOFFREE]
Y offset when searching around a spot.
treasurelist represents one logical group of items to be generated together.
int unmake_perma_dead(char *account, char *player)
This will edit the character account information so that the character that was just resurrected in p...
in that case they will be relative to whatever the PWD of the crossfire server process is You probably shouldn t
with a maximum of six This is not so if you are wearing plate you receive no benefit Armour is additive with all the supplementry forms of which means that it lasts until the next semi permanent spell effect is cast upon the character spell
int caster_level(const object *caster, const object *spell)
This function returns the effective level the spell is being cast at.
The archetype structure is a set of rules on how to generate and manipulate objects which point to ar...
#define MSG_TYPE_SPELL
Spell related info.
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
Same as object_insert_in_map() except it handle separate coordinates and do a clean job preparing mul...
#define P_OUT_OF_MAP
This space is outside the map.
#define MAX_BUF
Used for all kinds of things.
const char * playerdir
Where the player files are.
#define FOR_MAP_PREPARE(map_, mx_, my_, it_)
Constructs a loop iterating over all objects of a map tile.
#define NDI_UNIQUE
Print immediately, don't buffer.
sstring slaying
Which race to do double damage to.
static int resurrection_fails(int levelcaster, int leveldead)
Will the resurrection succeed?
sstring name
The name of the object, obviously...
#define MSG_TYPE_SPELL_FAILURE
Spell failure messages.
int get_map_flags(mapstruct *oldmap, mapstruct **newmap, int16_t x, int16_t y, int16_t *nx, int16_t *ny)
This rolls up wall, blocks_magic, blocks_view, etc, all into one function that just returns a P_.
archetype * find_archetype(const char *name)
int summon_hostile_monsters(object *op, int n, const char *monstername)
Summons hostile monsters and places them in nearby squares.
object * arch_to_object(archetype *at)
Creates and returns a new object which is a copy of the given archetype.
void object_remove(object *op)
This function removes the object op from the linked list of objects which it is currently tied to.
static int resurrect_player(object *op, char *playername, object *spell, char *accountname)
Resurrect a player.
bool chance(int a, int b)
Return true with a probability of a/b.
treasure is one element in a linked list, which together consist of a complete treasure-list.
short freearr_x[SIZEOFFREE]
X offset when searching around a spot.
const char * localdir
Read/write data files.