Merge branch 'death'
This commit is contained in:
commit
d3f0781900
3
TODO
Normal file
3
TODO
Normal file
@ -0,0 +1,3 @@
|
||||
* Make the Passage work as intended:
|
||||
o characters should get back here upon logoff/logon
|
||||
o there must be a way to get out from there
|
95
src/fight.c
95
src/fight.c
@ -363,16 +363,40 @@ void death_cry(struct char_data *ch)
|
||||
|
||||
void raw_kill(struct char_data *ch)
|
||||
{
|
||||
if (FIGHTING(ch))
|
||||
stop_fighting(ch);
|
||||
if (FIGHTING(ch))
|
||||
stop_fighting(ch);
|
||||
|
||||
while (ch->affected)
|
||||
affect_remove(ch, ch->affected);
|
||||
while (ch->affected)
|
||||
affect_remove(ch, ch->affected);
|
||||
|
||||
death_cry(ch);
|
||||
death_cry(ch);
|
||||
|
||||
make_corpse(ch);
|
||||
extract_char(ch);
|
||||
if (IS_NPC(ch))
|
||||
{
|
||||
make_corpse(ch);
|
||||
extract_char(ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
send_to_char(ch, "You feel yourself being pulled into a bright light...\r\n");
|
||||
char_from_room(ch);
|
||||
char_to_room(ch, real_room(rand_number(PASSAGE_MIN, PASSAGE_MAX)));
|
||||
GET_HIT(ch) = GET_MAX_HIT(ch);
|
||||
GET_MANA(ch) = GET_MAX_MANA(ch);
|
||||
GET_MOVE(ch) = GET_MAX_MOVE(ch);
|
||||
update_pos(ch);
|
||||
look_at_room(ch, 0);
|
||||
if (!PLR_FLAGGED(ch, PLR_DEAD))
|
||||
{
|
||||
/* TODO: Do something here, like temporarily remove the player's gold...
|
||||
GET_TEMP_GOLD(ch) = GET_GOLD(ch);
|
||||
GET_GOLD(ch) = 0;
|
||||
*/
|
||||
/* TODO: Set the DEAD flag on the player. Later it has to be removed somehow!
|
||||
SET_BIT(PLR_FLAGS(ch), PLR_DEAD);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -819,36 +843,45 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
|
||||
if (GET_POS(victim) <= POS_STUNNED && FIGHTING(victim) != NULL)
|
||||
stop_fighting(victim);
|
||||
|
||||
/* Uh oh. Victim died. */
|
||||
if (GET_POS(victim) == POS_DEAD) {
|
||||
if (ch != victim && (IS_NPC(victim) || victim->desc)) {
|
||||
if (AFF_FLAGGED(ch, AFF_GROUP))
|
||||
group_gain(ch, victim);
|
||||
else
|
||||
solo_gain(ch, victim);
|
||||
}
|
||||
/* Uh oh. Victim died. */
|
||||
if (GET_POS(victim) == POS_DEAD)
|
||||
{
|
||||
if (
|
||||
(ch != victim)
|
||||
&& (
|
||||
IS_NPC(victim)
|
||||
|| victim->desc
|
||||
)
|
||||
)
|
||||
{
|
||||
if (AFF_FLAGGED(ch, AFF_GROUP))
|
||||
group_gain(ch, victim);
|
||||
else
|
||||
solo_gain(ch, victim);
|
||||
}
|
||||
|
||||
if (!IS_NPC(victim)) {
|
||||
mudlog(BRF, LVL_IMMORT, TRUE, "%s killed by %s at %s", GET_NAME(victim), GET_NAME(ch), world[IN_ROOM(victim)].name);
|
||||
if (MOB_FLAGGED(ch, MOB_MEMORY))
|
||||
forget(ch, victim);
|
||||
}
|
||||
die(victim);
|
||||
if (!IS_NPC(victim))
|
||||
{
|
||||
mudlog(BRF, LVL_IMMORT, TRUE, "%s killed by %s at %s", GET_NAME(victim), GET_NAME(ch), world[IN_ROOM(victim)].name);
|
||||
if (MOB_FLAGGED(ch, MOB_MEMORY))
|
||||
forget(ch, victim);
|
||||
}
|
||||
die(victim);
|
||||
|
||||
/* If AUTOLOOT is enabled, loot everything from corpse */
|
||||
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOLOOT))
|
||||
do_get(ch, "all corpse", 0, 0);
|
||||
/* If AUTOLOOT is enabled, loot everything from corpse */
|
||||
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOLOOT))
|
||||
do_get(ch, "all corpse", 0, 0);
|
||||
|
||||
/* IF AUTODRAIN is enabled, drain corpse */
|
||||
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTODRAIN))
|
||||
do_drain(ch, "corpse", 0, 0);
|
||||
/* IF AUTODRAIN is enabled, drain corpse */
|
||||
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTODRAIN))
|
||||
do_drain(ch, "corpse", 0, 0);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
return (dam);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (dam);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Calculate the THAC0 of the attacker.
|
||||
*
|
||||
|
@ -174,6 +174,7 @@
|
||||
#define PLR_INVSTART (1 << 14) /* Player should enter game wizinvis */
|
||||
#define PLR_CRYO (1 << 15) /* Player is cryo-saved (purge prog) */
|
||||
#define PLR_NOTDEADYET (1 << 16) /* (R) Player being extracted. */
|
||||
#define PLR_DEAD (1 << 17) /* Player is dead */
|
||||
|
||||
|
||||
/* Mobile flags: used by char_data.char_specials.act */
|
||||
@ -468,6 +469,10 @@
|
||||
#define LVL_GOD 32
|
||||
#define LVL_IMMORT 31
|
||||
|
||||
/* Room numbers for the Passage ******************************************/
|
||||
#define PASSAGE_MIN 101
|
||||
#define PASSAGE_MAX 101
|
||||
|
||||
/* Level of the 'freeze' command */
|
||||
#define LVL_FREEZE LVL_GRGOD
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user