/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1995 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@pacinfo.com) *
* Gabrielle Taylor (gtaylor@pacinfo.com) *
* Brian Moore (rom@rom.efn.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
/***************************************************************************
* ROT 1.4 is copyright 1996-1997 by Russ Walsh *
* By using this code, you have agreed to follow the terms of the *
* ROT license, in the file doc/rot.license *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include "merc.h"
#include "music.h"
#include "interp.h"
#include "clan.h"
/* command procedures needed */
DECLARE_DO_FUN(do_quit );
DECLARE_DO_FUN(do_announce );
DECLARE_DO_FUN(do_look );
/*
* Local functions.
*/
int hit_gain args( ( CHAR_DATA *ch ) );
int mana_gain args( ( CHAR_DATA *ch ) );
int move_gain args( ( CHAR_DATA *ch ) );
void mobile_update args( ( void ) );
void weather_update args( ( void ) );
void char_update args( ( void ) );
void arena_update args( ( void ) );
void obj_update args( ( void ) );
void aggr_update args( ( void ) );
void quest_update args( ( void ) );
void tele_update args( ( void ) );
void check_reboot args( ( void ) );
int focus_save args ((CHAR_DATA *ch));
int focus_level args ((long total));
void focus_up args ((CHAR_DATA *ch));
void room_affect_update args(( void ));
void free_auction args( ( AUCTION_DATA *auction ) );
void auction_update args( ( void ) );
void auction_channel args( ( CHAR_DATA *ch, OBJ_DATA *obj, char *msg ) );
/* used for saving */
int save_number = 0;
void gamegratz( CHAR_DATA *ch )
{
/* char buf[MAX_STRING_LENGTH];
DESCRIPTOR_DATA *d;
for ( d = descriptor_list; d; d = d->next )
{
if ( d->connected == CON_PLAYING && !IS_SET(d->character->comm,COMM_NOGRATS) && !IS_SET(d->character->comm, COMM_QUIET))
send_to_char( buf, d->character );
} */
ch->hit = ch->max_hit;
ch->mana = ch->max_mana;
ch->move = ch->max_move;
update_pos( ch );
return;
}
/*
* Advancement stuff.
*/
void advance_level( CHAR_DATA *ch )
{
char buf[MAX_STRING_LENGTH];
int loc, i, temp;
int add_hp;
int add_mana;
int add_move;
int add_prac;
OBJ_DATA *obj;
char log_buf[MSL];
ch->pcdata->last_level =
( ch->played + (int) (current_time - ch->logon) ) / 3600;
sprintf( buf, "the %s",
title_table [ch->class] [ch->level] [ch->sex == SEX_FEMALE ? 1 : 0] );
if ( ch->pcdata->usr_ttl == FALSE ) set_title( ch, "" );
add_hp = (con_app[get_curr_stat(ch,STAT_CON)].hitp +
number_range(
class_table[ch->class].hp_min,
class_table[ch->class].hp_max ));
add_mana = number_range(10 + (3 * ch->pcdata->tier),
(5 * get_curr_stat(ch,STAT_INT) + 2 * get_curr_stat(ch,STAT_WIS))/2);
if (!class_table[ch->class].fMana)
add_mana /= 5;
add_move = number_range( 1, (get_curr_stat(ch,STAT_CON)
+ get_curr_stat(ch,STAT_DEX))/8 );
add_prac = wis_app[get_curr_stat(ch,STAT_WIS)].practice;
add_hp = add_hp * 9/10;
add_hp = add_hp * 7/4;
add_hp = add_hp * 5/4;
add_mana = add_mana * 9/10;
add_mana = add_mana * 7/4;
add_mana = add_mana * 1/2;
add_move = add_move * 9/10;
add_move = add_move * 3/2;
add_hp = UMAX( 4, add_hp );
add_mana = UMAX( 4, add_mana );
add_move = UMAX( 12, add_move );
ch->max_hit += add_hp;
ch->max_mana += add_mana;
ch->max_move += add_move;
ch->practice += add_prac;
ch->train += 1;
ch->pcdata->perm_hit += add_hp;
ch->pcdata->perm_mana += add_mana;
ch->pcdata->perm_move += add_move;
sprintf( buf,
"Your gain is: %d/%d hp, %d/%d m, %d/%d mv %d/%d prac.\n\r",
add_hp, ch->max_hit,
add_mana, ch->max_mana,
add_move, ch->max_move,
add_prac, ch->practice
);
send_to_char( buf, ch );
temp = (dice(1,50) + 51);
if ((ch->level == 19) && (!is_pkill(ch)) && (ch->pcdata->tier != 3))
send_to_char("{Y{zREMINDER: By level 20 you must choose to be Pkill or Non-Pkill, because after this you cannot choose.\n\r{x",ch);
if ( !IS_SET(ch->act, PLR_NOEVOLVE)
&& race_lookup(pc_race_table[ch->race].rare_race[0]) != 0
&& (temp == ch->level
|| ch->level == LEVEL_HERO) )
{
sprintf(log_buf, "%s evolved..", ch->name);
log_string( log_buf );
temp = (dice(1,7)-1);
sprintf(log_buf, "Temp = %d", temp);
log_string( log_buf );
while ( race_lookup(pc_race_table[ch->race].rare_race[temp]) == 0 )
{
temp = (dice(1,7)-1);
sprintf(log_buf, "Temp = %d", temp);
log_string( log_buf );
}
ch->race = race_lookup(pc_race_table[ch->race].rare_race[temp] );
sprintf(log_buf, "Charrace = %s", pc_race_table[ch->race].name);
log_string( log_buf );
send_to_char("{YYou feel your body begin to writhe and change.\n\rYou are now...\n\r",
ch);
sprintf(buf,"{WA %s!{0\n\r",race_table[ch->race].name);
send_to_char(buf, ch);
if (ch->level != LEVEL_HERO)
{
ch->exp = ch->level*exp_per_level(ch,ch->pcdata->points);
}
}
for (loc = 0; loc < MAX_WEAR; loc++)
{
obj = get_eq_char(ch,loc);
if (obj == NULL)
continue;
if (obj->clan)
{
for (i = 0; i < 4; i++)
{
ch->armor[i] += apply_ac( ch->level-1, obj, loc, i );
ch->armor[i] -= apply_ac( ch->level, obj, loc, i );
}
}
}
return;
}
void advance_level_quiet( CHAR_DATA *ch )
{
char buf[MAX_STRING_LENGTH];
int loc, i, temp;
int add_hp;
int add_mana;
int add_move;
int add_prac;
OBJ_DATA *obj;
char log_buf[MSL];
ch->pcdata->last_level =
( ch->played + (int) (current_time - ch->logon) ) / 3600;
sprintf( buf, "the %s",
title_table [ch->class] [ch->level] [ch->sex == SEX_FEMALE ? 1 : 0] );
if ( ch->pcdata->usr_ttl == FALSE ) set_title( ch, "" );
add_hp = (con_app[get_curr_stat(ch,STAT_CON)].hitp +
number_range(
class_table[ch->class].hp_min,
class_table[ch->class].hp_max ));
add_mana = number_range(4,(4*get_curr_stat(ch,STAT_INT)
+ get_curr_stat(ch,STAT_WIS))/2);
if (!class_table[ch->class].fMana)
add_mana /= 3;
add_move = number_range( 1, (get_curr_stat(ch,STAT_CON)
+ get_curr_stat(ch,STAT_DEX))/8 );
add_prac = wis_app[get_curr_stat(ch,STAT_WIS)].practice;
add_hp = add_hp * 9/10;
add_hp = add_hp * 7/4;
add_hp = add_hp * 5/4;
add_mana = add_mana * 9/10;
add_mana = add_mana * 7/4;
add_mana = add_mana * 1/2;
add_move = add_move * 9/10;
add_move = add_move * 3/2;
add_hp = UMAX( 4, add_hp );
add_mana = UMAX( 4, add_mana );
add_move = UMAX( 12, add_move );
ch->max_hit += add_hp;
ch->max_mana += add_mana;
ch->max_move += add_move;
ch->practice += add_prac;
ch->train += 1;
ch->pcdata->perm_hit += add_hp;
ch->pcdata->perm_mana += add_mana;
ch->pcdata->perm_move += add_move;
sprintf( buf,
"Your gain is: %d/%d hp, %d/%d m, %d/%d mv %d/%d prac.\n\r",
add_hp, ch->max_hit,
add_mana, ch->max_mana,
add_move, ch->max_move,
add_prac, ch->practice
);
send_to_char( buf, ch );
temp = (dice(1,50) + 51);
if ( !IS_SET(ch->act, PLR_NOEVOLVE)
&& race_lookup(pc_race_table[ch->race].rare_race[0]) != 0
&& (temp == ch->level
|| ch->level == LEVEL_HERO) )
{
sprintf(log_buf, "%s evolved..", ch->name);
log_string( log_buf );
temp = (dice(1,7)-1);
sprintf(log_buf, "Temp = %d", temp);
log_string( log_buf );
while ( race_lookup(pc_race_table[ch->race].rare_race[temp]) == 0 )
{
temp = (dice(1,7)-1);
sprintf(log_buf, "Temp = %d", temp);
log_string( log_buf );
}
ch->race = race_lookup(pc_race_table[ch->race].rare_race[temp] );
sprintf(log_buf, "Charrace = %s", pc_race_table[ch->race].name);
log_string( log_buf );
send_to_char("{YYou feel your body begin to writhe and change.\n\rYou are now...\n\r",
ch);
sprintf(buf,"{WA %s!{0\n\r",race_table[ch->race].name);
send_to_char(buf, ch);
if (ch->level != LEVEL_HERO)
{
ch->exp = ch->level*exp_per_level(ch,ch->pcdata->points);
}
}
for (loc = 0; loc < MAX_WEAR; loc++)
{
obj = get_eq_char(ch,loc);
if (obj == NULL)
continue;
if (obj->clan)
{
for (i = 0; i < 4; i++)
{
ch->armor[i] += apply_ac( ch->level-1, obj, loc, i );
ch->armor[i] -= apply_ac( ch->level, obj, loc, i );
}
}
}
return;
}
void gain_exp( CHAR_DATA *ch, int gain )
{
char buf[MAX_STRING_LENGTH];
int orig=0;
if ( IS_NPC(ch) )
return;
if ( ch->level >= LEVEL_HERO )
{
if (gain < 0)
return;
if (ch->pcdata->focus[CURRENT_FOCUS] > MAGIC_DEFENSE ||
ch->pcdata->focus[CURRENT_FOCUS] < COMBAT_POWER )
return;
orig = focus_level(ch->pcdata->focus[ch->pcdata->focus[CURRENT_FOCUS]]);
ch->pcdata->focus[ch->pcdata->focus[CURRENT_FOCUS]] += gain;
if (orig < focus_level(ch->pcdata->focus[ch->pcdata->focus[CURRENT_FOCUS]]))
focus_up(ch);
return;
}
ch->exp = UMAX( exp_per_level(ch,ch->pcdata->points), ch->exp + gain );
while ( ch->level < LEVEL_HERO && ch->exp >=
exp_per_level(ch,ch->pcdata->points) * (ch->level+1) )
{
send_to_char( "You raise a level!!\n\r", ch );
ch->level += 1;
/* sprintf(buf,"$N has attained level %d!",ch->level);
wiznet(buf,ch,NULL,WIZ_LEVELS,0,0); */
sprintf(buf,"%s has made it to level %d!!",ch->name,ch->level);
do_announce(ch,buf);
advance_level( ch );
gamegratz( ch );
save_char_obj(ch);
}
return;
}
/*
* Regeneration stuff.
*/
int hit_gain( CHAR_DATA *ch )
{
int gain;
int number;
if (ch->in_room == NULL)
return 0;
if ( IS_NPC(ch) )
{
gain = 5 + ch->level;
if (IS_AFFECTED(ch,AFF_REGENERATION))
gain *= 2;
switch(ch->position)
{
default : gain /= 2; break;
case POS_SLEEPING: gain = 3 * gain/2; break;
case POS_RESTING: break;
case POS_FIGHTING: gain /= 3; break;
}
}
else
{
gain = UMAX(3,2*get_curr_stat(ch,STAT_CON) - 6 + ch->level/2);
gain += class_table[ch->class].hp_max - 10;
if(IS_AFFECTED(ch,AFF_REGENERATION))
gain*=2;
number = number_percent();
if (number < get_skill(ch,gsn_fast_healing))
{
gain += number * gain / 100;
if (ch->hit < ch->max_hit)
check_improve(ch,gsn_fast_healing,TRUE,8);
}
if (number < get_skill(ch,gsn_acute_vision))
check_improve(ch,gsn_acute_vision,TRUE,8);
switch ( ch->position )
{
default: gain /= 4; break;
case POS_SLEEPING: break;
case POS_RESTING: gain /= 2; break;
case POS_FIGHTING: gain /= 6; break;
}
if ( ch->pcdata->condition[COND_HUNGER] == 0 )
gain /= 2;
if ( ch->pcdata->condition[COND_THIRST] == 0 )
gain /= 2;
}
gain = gain * ch->in_room->heal_rate / 90;
if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE)
gain = gain * ch->on->value[3] / 90;
if ( IS_AFFECTED(ch, AFF_POISON) )
gain /= 4;
if (IS_AFFECTED(ch, AFF_PLAGUE))
gain /= 8;
if (IS_AFFECTED(ch,AFF_HASTE) || IS_AFFECTED(ch,AFF_SLOW))
gain /= 2;
return UMIN(gain, ch->max_hit - ch->hit);
}
int mana_gain( CHAR_DATA *ch )
{
int gain;
int number;
if (ch->in_room == NULL)
return 0;
if ( IS_NPC(ch) )
{
gain = 5 + ch->level;
if (IS_AFFECTED(ch,AFF_REGENERATION))
gain *= 2;
switch (ch->position)
{
default: gain /= 2; break;
case POS_SLEEPING: gain = 3 * gain/2; break;
case POS_RESTING: break;
case POS_FIGHTING: gain /= 3; break;
}
}
else
{
gain = (get_curr_stat(ch,STAT_WIS)
+ get_curr_stat(ch,STAT_INT) + ch->level);
if (IS_AFFECTED(ch,AFF_REGENERATION))
gain*=2;
number = number_percent();
/*if (number < get_skill(ch,gsn_meditation))
{
gain += number * gain / 100;
if (ch->mana < ch->max_mana)
check_improve(ch,gsn_meditation,TRUE,8);
}*/
if (!class_table[ch->class].fMana)
gain /= 2;
switch ( ch->position )
{
default: gain /= 4; break;
case POS_SLEEPING: break;
case POS_RESTING: gain /= 2; break;
case POS_FIGHTING: gain /= 6; break;
}
if ( ch->pcdata->condition[COND_HUNGER] == 0 )
gain /= 2;
if ( ch->pcdata->condition[COND_THIRST] == 0 )
gain /= 2;
}
gain = gain * ch->in_room->mana_rate / 90;
if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE)
gain = gain * ch->on->value[4] / 90;
if ( IS_AFFECTED( ch, AFF_POISON ) )
gain /= 4;
if (IS_AFFECTED(ch, AFF_PLAGUE))
gain /= 8;
if (IS_AFFECTED(ch,AFF_HASTE) || IS_AFFECTED(ch,AFF_SLOW))
gain /=2 ;
if(is_affected(ch,gsn_quickening))
gain *= 2;
return UMIN(gain, ch->max_mana - ch->mana);
}
int move_gain( CHAR_DATA *ch )
{
int gain;
if (ch->in_room == NULL)
return 0;
if ( IS_NPC(ch) )
{
gain = ch->level;
}
else
{
gain = UMAX( 15, ch->level );
if (IS_AFFECTED(ch,AFF_REGENERATION))
gain *= 2;
switch ( ch->position )
{
case POS_SLEEPING: gain += get_curr_stat(ch,STAT_DEX); break;
case POS_RESTING: gain += get_curr_stat(ch,STAT_DEX) / 2; break;
}
if ( ch->pcdata->condition[COND_HUNGER] == 0 )
gain /= 2;
if ( ch->pcdata->condition[COND_THIRST] == 0 )
gain /= 2;
}
gain = gain * ch->in_room->heal_rate/90;
if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE)
gain = gain * ch->on->value[3] / 90;
if ( IS_AFFECTED(ch, AFF_POISON) )
gain /= 4;
if (IS_AFFECTED(ch, AFF_PLAGUE))
gain /= 8;
if (IS_AFFECTED(ch,AFF_HASTE) || IS_AFFECTED(ch,AFF_SLOW))
gain /=2 ;
if(is_affected(ch,gsn_quickening))
gain *= 2;
return UMIN(gain, ch->max_move - ch->move);
}
void gain_condition( CHAR_DATA *ch, int iCond, int value )
{
int condition;
if ( value == 0 || IS_NPC(ch) || ch->level >= LEVEL_IMMORTAL)
return;
condition = ch->pcdata->condition[iCond];
if (condition == -1)
return;
ch->pcdata->condition[iCond] = URANGE( 0, condition + value, 48 );
if ( ch->pcdata->condition[iCond] == 0 )
{
switch ( iCond )
{
case COND_HUNGER:
send_to_char( "You are hungry.\n\r", ch );
break;
case COND_THIRST:
send_to_char( "You are thirsty.\n\r", ch );
break;
case COND_DRUNK:
if ( condition != 0 )
send_to_char( "You are sober.\n\r", ch );
break;
}
}
return;
}
/*
* Mob autonomous action.
* This function takes 25% to 35% of ALL Merc cpu time.
* -- Furey
*/
void mobile_update( void )
{
CHAR_DATA *ch;
CHAR_DATA *ch_next;
EXIT_DATA *pexit;
int door,i;
/* Examine all mobs. */
for ( ch = char_list; ch != NULL; ch = ch_next )
{
ch_next = ch->next;
if ( !IS_NPC(ch) || ch->in_room == NULL)
continue;
// No more negatives
for(i=0; i < 5; i++)
if(ch->mod_stat[i] < 1)
ch->mod_stat[i] = 1;
if (ch->in_room->area->empty && !IS_SET(ch->act,ACT_UPDATE_ALWAYS))
continue;
/* Examine call for special procedure */
if ( ch->spec_fun != 0 )
{
if ( (*ch->spec_fun) ( ch ) )
continue;
}
if (ch->pIndexData->pShop != NULL) /* give him some platinum */
if ((ch->platinum * 100 + ch->gold) < ch->pIndexData->wealth)
{
ch->platinum += ch->pIndexData->wealth * number_range(1,20)/500000;
ch->gold += ch->pIndexData->wealth * number_range(1,20)/5000;
}
/*
* Check triggers only if mobile still in default position
*/
if ( ch->position == ch->pIndexData->default_pos )
{
/* Delay */
if ( HAS_TRIGGER( ch, TRIG_DELAY)
&& ch->mprog_delay >= 0 )
{
if ( --ch->mprog_delay <= 0 )
{
mp_percent_trigger( ch, NULL, NULL, NULL, TRIG_DELAY );
continue;
}
}
if ( HAS_TRIGGER( ch, TRIG_RANDOM) )
{
if( mp_percent_trigger( ch, NULL, NULL, NULL, TRIG_RANDOM ) )
continue;
}
}
/* That's all for sleeping / busy monster, and empty zones */
if ( ch->position != POS_STANDING )
continue;
/* Scavenge */
if ( IS_SET(ch->act, ACT_SCAVENGER)
&& ch->in_room->contents != NULL
&& number_bits( 6 ) == 0 )
{
OBJ_DATA *obj;
OBJ_DATA *obj_best;
int max;
max = 1;
obj_best = 0;
for ( obj = ch->in_room->contents; obj; obj = obj->next_content )
{
if ( CAN_WEAR(obj, ITEM_TAKE)
&& can_loot(ch, obj)
&& ch->carry_number + get_obj_number(obj) <= can_carry_n(ch)
&& get_carry_weight(ch) + get_obj_weight(obj) <= can_carry_w(ch)
&& obj->cost > max
&& obj->cost > 0)
{
obj_best = obj;
max = obj->cost;
}
}
if ( obj_best )
get_obj(ch,obj_best,NULL);
/* {
obj_from_room( obj_best );
obj_to_char( obj_best, ch );
act( "$n gets $p.", ch, obj_best, NULL, TO_ROOM );
}
*/
}
/* Wander */
if ( !IS_SET(ch->act, ACT_SENTINEL)
&& number_bits(3) == 0
&& ( door = number_bits( 5 ) ) <= 5
&& ( pexit = ch->in_room->exit[door] ) != NULL
&& pexit->u1.to_room != NULL
&& !IS_SET(pexit->exit_info, EX_CLOSED)
&& !IS_SET(pexit->u1.to_room->room_flags, ROOM_NO_MOB)
&& ( !IS_SET(ch->act, ACT_STAY_AREA)
|| pexit->u1.to_room->area == ch->in_room->area )
&& ( !IS_SET(ch->act, ACT_OUTDOORS)
|| !IS_SET(pexit->u1.to_room->room_flags,ROOM_INDOORS))
&& ( !IS_SET(ch->act, ACT_INDOORS)
|| IS_SET(pexit->u1.to_room->room_flags,ROOM_INDOORS)))
{
move_char( ch, door, FALSE, FALSE );
}
}
return;
}
/*
* Update the weather.
*/
void weather_update( void )
{
char buf[MAX_STRING_LENGTH];
DESCRIPTOR_DATA *d;
int diff;
buf[0] = '\0';
switch ( ++time_info.hour )
{
case 6:
weather_info.sunlight = SUN_LIGHT;
switch(number_range(1,4))
{
case 1: strcat( buf, "The day has begun.\n\r" ); break;
case 2: strcat( buf, "Slowly the night sky gives way to light.\n\r" ); break;
case 3: strcat( buf, "Dawn breaks along the horizon.\n\r" ); break;
case 4: buf[0] = '\0';
}
break;
case 7:
weather_info.sunlight = SUN_RISE;
switch(number_range(1,4))
{
case 1: strcat( buf, "The sun rises in the east.\n\r" ); break;
case 2: strcat( buf, "Light shines on the lands as the sun rises.\n\r"); break;
case 3: strcat( buf, "The rising sun pushes away the remaining darkness.\n\r"); break;
case 4: buf[0] = '\0';
}
break;
case 12:
weather_info.sunlight = SUN_RISE;
strcat( buf, "The sun reaches its peak in the heavens.\n\r" );
break;
case 18:
weather_info.sunlight = SUN_SET;
switch(number_range(1,4))
{
case 1: strcat( buf, "The sun slowly disappears in the west.\n\r" ); break;
case 2: strcat( buf, "The sun sets behind the mountains to the west.\n\r" ); break;
case 3: strcat( buf, "The sky grows darker as dusk settles in.\n\r" ); break;
case 4: buf[0] = '\0';
}
break;
case 19:
weather_info.sunlight = SUN_DARK;
switch(number_range(1,3))
{
case 1: strcat( buf, "The night has begun.\n\r" ); break;
case 2: strcat( buf, "Darkness shrouds the lands as the night begins.\n\r" ); break;
case 3: buf[0] = '\0';
}
break;
case 24:
time_info.hour = 0;
time_info.day++;
break;
}
if ( time_info.day >= 35 )
{
time_info.day = 0;
time_info.month++;
}
if ( time_info.month >= 12 )
{
time_info.month = 0;
time_info.year++;
}
/*
* Weather change.
*/
if ( time_info.month >= 9 && time_info.month <= 16 )
diff = weather_info.mmhg > 985 ? -2 : 2;
else
diff = weather_info.mmhg > 1015 ? -2 : 2;
weather_info.change += diff * dice(1, 4) + dice(2, 6) - dice(2, 6);
weather_info.change = UMAX(weather_info.change, -12);
weather_info.change = UMIN(weather_info.change, 12);
weather_info.mmhg += weather_info.change;
weather_info.mmhg = UMAX(weather_info.mmhg, 960);
weather_info.mmhg = UMIN(weather_info.mmhg, 1040);
switch ( weather_info.sky )
{
default:
bug( "Weather_update: bad sky %d.", weather_info.sky );
weather_info.sky = SKY_CLOUDLESS;
break;
case SKY_CLOUDLESS:
if ( weather_info.mmhg < 990
|| ( weather_info.mmhg < 1010 && number_bits( 2 ) == 0 ) )
{
switch(number_range(1,3))
{
case 1: strcat( buf, "The sky is getting cloudy.\n\r" ); break;
case 2: strcat( buf, "Large clouds cover up the sky.\n\r" ); break;
case 3: strcat( buf, "Clouds start to blow in from the North.\n\r" ); break;
}
weather_info.sky = SKY_CLOUDY;
}
break;
case SKY_CLOUDY:
if ( weather_info.mmhg < 970
|| ( weather_info.mmhg < 990 && number_bits( 2 ) == 0 ) )
{
switch(number_range(1,3))
{
case 1: strcat( buf, "It starts to rain.\n\r" ); break;
case 2: strcat( buf, "A light drizzle begins to fall.\n\r" ); break;
case 3: strcat( buf, "Heavy rain starts pouring down.\n\r" ); break;
}
weather_info.sky = SKY_RAINING;
}
if ( weather_info.mmhg > 1030 && number_bits( 2 ) == 0 )
{
strcat( buf, "The clouds disappear.\n\r" );
weather_info.sky = SKY_CLOUDLESS;
}
break;
case SKY_RAINING:
if ( weather_info.mmhg < 970 && number_bits( 2 ) == 0 )
{
switch(number_range(1,3))
{
case 1: strcat( buf, "Lightning flashes in the sky.\n\r" ); break;
case 2: strcat( buf, "The sound of thunder assails your ears.\n\r" ); break;
case 3: strcat( buf, "You hear the distant roll of thunder.\n\r" ); break;
}
weather_info.sky = SKY_LIGHTNING;
}
if ( weather_info.mmhg > 1030
|| ( weather_info.mmhg > 1010 && number_bits( 2 ) == 0 ) )
{
strcat( buf, "The rain has stopped.\n\r" );
weather_info.sky = SKY_CLOUDY;
}
break;
case SKY_LIGHTNING:
if ( weather_info.mmhg > 1010
|| ( weather_info.mmhg > 990 && number_bits( 2 ) == 0 ) )
{
strcat( buf, "The lightning has stopped.\n\r" );
weather_info.sky = SKY_RAINING;
break;
}
break;
}
if ( buf[0] != '\0' )
{
for ( d = descriptor_list; d != NULL; d = d->next )
{
if ( d->connected == CON_PLAYING
&& IS_OUTSIDE(d->character)
&& IS_AWAKE(d->character)
&& !IS_SET(d->character->comm,COMM_QUIET))
send_to_char( buf, d->character );
}
}
return;
}
/*
* Update all chars, including mobs.
*/
void char_update( void )
{
CHAR_DATA *ch;
CHAR_DATA *ch_next;
CHAR_DATA *ch_quit;
OBJ_DATA *munchie;
int dream;
AFFECT_DATA af;
dream = number_range(1,460);
ch_quit = NULL;
/* update save counter */
save_number++;
if (save_number > 29)
save_number = 0;
for ( ch = char_list; ch != NULL; ch = ch_next )
{
ch_next = ch->next;
if ( ch->timer > 30 )
ch_quit = ch;
/* Ghosts........Spooky isn't it? -Skyntil */
if ( ch->ghost_timer > -1 )
ch->ghost_timer -= 1;
if(ch->ghost_timer == 0 && IS_SET(ch->plyr,PLAYER_GHOST))
{
REMOVE_BIT(ch->plyr,PLAYER_GHOST);
act("You feel more real.",ch,NULL,NULL,TO_CHAR);
act("$n fades into reality.",ch,NULL,NULL,TO_ROOM);
}
else if(ch->ghost_timer == 0 && !IS_SET(ch->plyr,PLAYER_GHOST))
{
act("You feel ready to kill again.",ch,NULL,NULL,TO_CHAR);
ch->ghost = str_dup("");
}
if ( IS_NPC(ch) && ch->hastimer )
{
if ( ++ch->timer > 5 )
{
act("$n decays into dust.",ch,NULL,NULL,TO_ROOM);
extract_char(ch,TRUE);
}
}
if ((ch->class == CLASS_FADE) || (ch->class == CLASS_BANSHEE))
{
SET_BIT(ch->affected_by, AFF_PASS_DOOR);
SET_BIT(ch->affected_by, AFF_FLYING);
}
if ( ch->position >= POS_STUNNED )
{
/* check to see if we need to go home */
if (IS_NPC(ch) && ch->zone != NULL && ch->zone != ch->in_room->area
&& ch->desc == NULL && ch->fighting == NULL
&& !IS_AFFECTED(ch,AFF_CHARM) && number_percent() < 5)
{
act("$n wanders on home.",ch,NULL,NULL,TO_ROOM);
extract_char(ch,TRUE);
continue;
}
if ( ch->hit < ch->max_hit )
ch->hit += hit_gain(ch);
else
ch->hit = ch->max_hit;
if ( ch->mana < ch->max_mana )
ch->mana += mana_gain(ch);
else
ch->mana = ch->max_mana;
if ( ch->move < ch->max_move )
ch->move += move_gain(ch);
else
ch->move = ch->max_move;
}
if ( ch->position == POS_STUNNED )
update_pos( ch );
//Toughness
if(ch->position == POS_SLEEPING && is_warrior_class(ch->class))
ch->toughness = UMAX(1, ch->toughness - 8);
if(ch->position == POS_RESTING && is_warrior_class(ch->class))
ch->toughness = UMAX(1, ch->toughness - 4);
if(ch->position == POS_STANDING && is_warrior_class(ch->class))
ch->toughness = UMAX(1, ch->toughness - 1);
if(ch->position == POS_MORTAL && is_warrior_class(ch->class))
ch->toughness = UMAX(1, ch->toughness - 5);
/***** START OF DREAMS ******************/
if (!IS_NPC(ch) && ch->position == POS_SLEEPING)
{
if (dream <=186)
{
send_to_char("zzzzzzzzzzzzzzzzzzzzzzzzz.\n\r",ch);
}
else if (dream <= 188)
{
send_to_char("Frantically looking around, your arms hit the bars of a cold iron cage..\n\r",ch);
send_to_char("You panic and rattle the bars hoping to escape.. finding the door\n\r",ch);
send_to_char("unlocked you quickly leap from the cage.. when suddenly a seemingly\n\r",ch);
send_to_char("giant roar echoes in your ears.. Looking above you see a common yet\n\r",ch);
send_to_char("titanic tabby cat licking its chops waiting for a delicious meal. Before\n\r",ch);
send_to_char("you can react it pounces upon you...\n\r",ch);
}
else if (dream <= 189)
{
send_to_char("Sitting before a vast table, you and a hoard of guests begin to eat..\n\r",ch);
send_to_char("Course after fine course flow across the table... and toast after toast\n\r",ch);
send_to_char("of fine wine flows through out the hall! Minstrels begin to sing songs\n\r",ch);
send_to_char("of valiant bravery and lost love.. as people get up from their hosts \n\r",ch);
send_to_char("table to dance...\n\r",ch);
}
else if (dream <= 190)
{
send_to_char("Moving your hands through the air you summon powerful magics!\n\r",ch);
send_to_char("Creating and destoying worlds, setting ablaze all of time!\n\r",ch);
send_to_char("Cackling with your god-like power you crush whole races between\n\r",ch);
send_to_char("your fingertips.. and create new ones with a single thought\n\r",ch);
send_to_char("to worship your awe inspiring power..\n\r",ch);
}
else if (dream <= 191)
{
send_to_char("At the head of a vast and powerful army you lead your troops toward\n\r",ch);
send_to_char("a secluded village.. Unsuspecting and innocent the towns people see your\n\r",ch);
send_to_char("approach and begin to flee in terror! Giving the order your archers\n\r",ch);
send_to_char("and pikemen rush toward them! Sending flaming arrow into the sky, fires\n\r",ch);
send_to_char("begin to flame around the defenseless village.. slaughter and blood fill\n\r",ch);
send_to_char("the scene.. as innocent lives scream for mercy..\n\r",ch);
}
else if (dream <= 192)
{
send_to_char("Soaring through the skies you fly, diving and careening through the\n\r",ch);
send_to_char("gusty wind.. Looking below you, the ground slowly dissapears, leaving\n\r",ch);
send_to_char("you flying through empty and endless sky blue sky.. As the sun sets\n\r",ch);
send_to_char("sending golden rays streaming acoss the air you glance at back and find\n\r",ch);
send_to_char("you have no wings! Gasping in terror you begin to falllllll.....\n\r",ch);
}
else if (dream <= 193)
{
send_to_char("Feeling the cooling surf wash over your feet and the wet sand creep\n\r",ch);
send_to_char("its way between your toes, you smile briefly. Looking across the\n\r",ch);
send_to_char("horizon you cannot tell where crystal blue ocean ends and sky begins.\n\r",ch);
send_to_char("Above you the rustling of palm trees are your only compannion on this\n\r",ch);
send_to_char("lone beach...\n\r",ch);
}
else if (dream <= 194)
{
send_to_char("A pair of gleaming red eyes, shine from the pitch black darkness,\n\r",ch);
send_to_char("hearing the creatures breath you freeze. Closer and closer it\n\r",ch);
send_to_char("creeps, scraping its claws against the dungeons stone walls.\n\r",ch);
send_to_char("Panicing you begin to run through the darkness blindly. Out of\n\r",ch);
send_to_char("breath you stop and listen.. all is silent in the pitch blackness...\n\r",ch);
send_to_char("Suddenly you feel somethings icy claws bore into your flesh!\n\r",ch);
}
else if (dream <= 202)
{
send_to_char("Strange colors swirl around you, blinding you.\n\r",ch);
act( "$n mumbles in $s sleep.", ch, NULL, NULL, TO_ROOM);
}
else if ( dream <= 204)
{
send_to_char("Horses thunder past you, bearing naked riders to \n\r",ch);
send_to_char("who knows where. The sound of horns echo in the distance.\n\r",ch);
act( "$n tosses restlessly in $s sleep.", ch, NULL, NULL, TO_ROOM);
}
else if (dream <= 206)
{
send_to_char("You awake in a soft, warm bed. As you bask in warm glow of firelight you\n\r",ch);
send_to_char("wonder how long it's been since last you've had such comfort. The \n\r",ch);
send_to_char("firelight fades and turns from red-orange to blue to white to a \n\r",ch);
send_to_char("spectrum. The colors surround you. You hear soft music, filling your \n\r",ch);
send_to_char("ears and your soul. You are swept away on the bittersweet and melancholy \n\r",ch);
send_to_char("chords, your spirit lifted and your heart twisted.. You hear faint \n\r",ch);
send_to_char("laughter, a woman's voice, a child whimpering softly.. You begin to cry \n\r",ch);
send_to_char("suddenly and are not sure why.\n\r",ch);
act( "$n sobs quietly in $s sleep for a moment then is still once again.", ch, NULL, NULL, TO_ROOM);
}
else if (dream <= 208)
{
send_to_char("You stand high on a mountain top, surrounded by azure skies and whitest \n\r",ch);
send_to_char("clouds There is a blinding flash of light, and the clouds part as does \n\r",ch);
send_to_char("the very sky as if it were a fabric that could be ripped. From this \n\r",ch);
send_to_char("opening fly hundreds of winged beings, majestic and terrible in \n\r",ch);
send_to_char("their beauty. They seem to emanated light and heat.. their bodies \n\r",ch);
send_to_char("are so bright that it hurts your eyes to look at them. You avert your \n\r",ch);
send_to_char("eyes, and when you dare to look up the beings are gone, the sky as it \n\r",ch);
send_to_char("had been..\n\r",ch);
send_to_char("You notice a single golden feather at your feet and pick it up \n\r",ch);
send_to_char("thoughtfully.\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("golden feather");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("a golden feather");
free_string(munchie->description);
munchie->description=str_dup("A beautiful golden feather is here");
munchie->wear_flags=17;
munchie->value[0]=0;
munchie->value[1]=0;
munchie->value[2]=0;
munchie->value[3]=0;
munchie->value[4]=0;
munchie->extra_flags=0;
munchie->item_type = ITEM_JEWELRY;
obj_to_room( munchie, ch->in_room );
act( "$n smiles slightly in $s sleep.", ch, NULL, NULL, TO_ROOM);
}
else if (dream <= 210)
{
send_to_char("You push through a crowd of people, repulsed by the smell of bodies, of \n\r",ch);
send_to_char("heat and of greed. A thousand booths stretch out along each side of the \n\r",ch);
send_to_char("street each selling a differnt ware or service. A particular booth \n\r",ch);
send_to_char("catches your attention, the one in which you catch a glimpse of white \n\r",ch);
send_to_char("and gold.. As you get closer you see a caged unicorn, pure white with a \n\r",ch);
send_to_char("gold horn. Next to the grubby man selling tickets to touch its horn it looks all the\n\r",ch);
send_to_char("more majestic. It turns sad, pleading doelike eyes on you, and you can\n\r",ch);
send_to_char("hear its thoughts, its anguish, its utter lonliness and longing to be \n\r",ch);
send_to_char("free..\n\r",ch);
}
else if (dream <= 212)
{
send_to_char("You move but hardly notice the feeling of the floor....\n\r",ch);
send_to_char("You grab a 20 by 30 foot canvas and vainly attempt to set it up....\n\r",ch);
send_to_char("Three or four passers by stop to inspect your work....\n\r",ch);
send_to_char("Everything you needed is now available but you feel as if soon it \n\r",ch);
send_to_char("will be gone... The walls close in and a glowing presense alerts you.\n\r",ch);
send_to_char("You dig at the walls with your fingertips, trying to get through\n\r",ch);
send_to_char("The cinder block comes loose! You are free! You squeeze through the hole\n\r",ch);
send_to_char("And in the next room...it is exactly the same....\n\r",ch);
}
else if (dream <= 214)
{
send_to_char("You are high above the earth...plummeting towards the ground.\n\r",ch);
send_to_char("You realize its a dream and think, OK I'll wake up in a minute.\n\r",ch);
send_to_char("As the ground draws near you begin to scream in terror of death.\n\r",ch);
send_to_char("You hit the ground with a sickening crunch and lay there until you \n\r",ch);
send_to_char("bleed to death.\n\r",ch);
}
else if (dream <= 216)
{
send_to_char("the shadows around you swirl and gire into the form of a dark\n\r",ch);
send_to_char("steed...it whispers something in a strange tongue and melts\n\r",ch);
send_to_char("into the foreground.....\n\r",ch);
}
else if (dream <= 218)
{
send_to_char("Lights streak past you leaving long trails.\n\r",ch);
send_to_char("Red, blue, yellow, white trails.\n\r",ch);
send_to_char("A coldness unlike any you have ever felt before creeps through your \n\r",ch);
send_to_char("bones. The only sound you hear is the slow thud of your heart.\n\r",ch);
}
else if (dream <= 220)
{
send_to_char("You find yourself standing at your old bus stop *sigh*\n\r",ch);
send_to_char("a dreary morning only 1/3 into the school year\n\r",ch);
send_to_char("All of a sudden you are soaring high above the street!\n\r",ch);
send_to_char("You swoop down and topple over a couple trash cans!\n\r",ch);
send_to_char("All your fellow students turn green with envy\n\r",ch);
send_to_char("You begin to doubt your abilities! LOOK OUT!!\n\r",ch);
send_to_char("You are falling into a deep, black hole.....\n\r",ch);
}
else if (dream <= 222)
{
send_to_char("Ahhhhh you are in perhaps THE most comfortable bed ever.\n\r",ch);
send_to_char("The blankets arranged just so and very warm...\n\r",ch);
send_to_char("Your dog cuddled closely to you.\n\r",ch);
send_to_char("and your arm hangs over the edge of the bed...Ahhhhhh.\n\r",ch);
send_to_char("then a hand comes from under the bed and GRABS your hand!\n\r",ch);
send_to_char("You wake up in a cold sweat!\n\r",ch);
send_to_char("Something STILL has your hand!\n\r",ch);
send_to_char("You wake up in a cold sweat...whew your hand is ok.\n\r",ch);
}
else if (dream <= 224)
{
send_to_char("A warm incredible feeling of happiness washes over you.\n\r",ch);
send_to_char("It feels like you are floating on a bed of air and a \n\r",ch);
send_to_char("thousand butterflies are fluttering over you gently cooling\n\r",ch);
send_to_char("you with the beating of their wings. A far off harp\n\r",ch);
send_to_char("peacefully fills the air with soul-stirring music. As you\n\r",ch);
send_to_char("open your eyes, you realize the sweet aroma filling the air comes\n\r",ch);
send_to_char("from the hundreds of flowers on and around you with still\n\r",ch);
send_to_char("more floating down from the sky above. You close your eyes\n\r",ch);
send_to_char("hoping to retain these feelings forever.\n\r",ch);
act( "The air is filled with sweetness as hundreds of flower petals float", ch, NULL, NULL, TO_ROOM);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("flower petals");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("hundreds of flower petals");
free_string(munchie->description);
munchie->description=str_dup("hundreds of flower petals lie here");
munchie->wear_flags=0;
munchie->value[0]=0;
munchie->value[1]=0;
munchie->value[2]=0;
munchie->value[3]=0;
munchie->value[4]=0;
munchie->extra_flags=1;
munchie->item_type = ITEM_TRASH;
munchie->timer=number_range(1,6);
obj_to_room( munchie, ch->in_room );
act( "down from the sky to cover $n as $e lies sleeping.", ch, NULL, NULL, TO_ROOM);
}
else if (dream <= 226)
{
send_to_char("Right, left, onward.\n\r",ch);
send_to_char("The hall seems to stretch endlessly.\n\r",ch);
send_to_char("Is this the door? No.\n\r",ch);
send_to_char("Is this the door? No.\n\r",ch);
send_to_char("Onward...there seems to be no way out.\n\r",ch);
send_to_char("Ahead you see a figure crumbled on the ground. As you turn him over\n\r",ch);
send_to_char("he crumbles into dust. All that remains is a large black opal\n\r",ch);
send_to_char("strung on a gold chain.\n\r",ch);
}
else if (dream <= 228)
{
send_to_char("You hear a slow, pulsing beat, rushing liquid.. A bird cries out in the \n\r",ch);
send_to_char("distance. You crane your neck to see what is around you, but \n\r",ch);
send_to_char("everything remains hazy.\n\r",ch);
send_to_char("You try to stand up, to walk towards the sounds, but you cannot move\n\r",ch);
send_to_char("You legs do not respond, your arms are pinned to your chest..\n\r",ch);
send_to_char("You struggle and try to cry out, but no sound comes..\n\r",ch);
}
else if (dream <= 230)
{
send_to_char("A pair of ginger-haired twins, pale, thin and beautifully androgynous\n\r",ch);
send_to_char("stand before you, smiling cryptically. They look at you and say, in \n\r",ch);
send_to_char("unison, How nice of you to visit! We've been waiting for you...\n\r",ch);
send_to_char("The taller one looks at his brother lovingly and says Oh but I have \n\r",ch);
send_to_char("been hungry... isn't this just lovely? \n\r",ch);
send_to_char("He opens his mouth in a wide grin and you realize.. he has fangs.\n\r",ch);
}
else if (dream <= 232)
{
send_to_char("Breathing heavily, you duck behind a stone wall.\n\r",ch);
send_to_char("You can hear them behind you, dozens of them.\n\r",ch);
send_to_char("It had been a long and glorius battle. One by one\n\r",ch);
send_to_char("you comrades had fallen. Now there was only you left and\n\r",ch);
send_to_char("your quiver is empty. Breathing deeply, you calm yourself.\n\r",ch);
send_to_char("Sword left in the chest of a battle dragon, arrows expended,\n\r",ch);
send_to_char("all you have left is the small charm that an old woman gave you.\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("small charm");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("a small charm");
free_string(munchie->description);
munchie->description=str_dup("You see a small charm.");
munchie->wear_flags=5;
munchie->value[0]=0;
munchie->value[1]=0;
munchie->value[2]=0;
munchie->value[3]=0;
munchie->value[4]=0;
munchie->extra_flags=1;
munchie->item_type = ITEM_JEWELRY;
obj_to_room( munchie, ch->in_room );
}
else if (dream <= 234)
{
send_to_char("Tick Tick Tick Tick ...\n\r",ch);
send_to_char("The sound of the clock echos though the house.\n\r",ch);
send_to_char("Somewhere between sleep and wake you drift ...\n\r",ch);
send_to_char("Something big is going to happen, you can sense it.\n\r",ch);
send_to_char("TICK TICK TICK TICK ...\n\r",ch);
send_to_char("Somehow the clock seems louder ... more ominous ...\n\r",ch);
send_to_char("You struggle to awake, your heart quickening.\n\r",ch);
send_to_char("TICK TICK TICK TICK ...\n\r",ch);
}
else if (dream <= 236)
{
send_to_char("A flash of spinning silver\n\r",ch);
send_to_char("trapped in a whirling sphere of dimpled gleaming light\n\r",ch);
send_to_char("Friction a fiction, the body slides without feeling, presses\n\r",ch);
send_to_char("without resistance\n\r",ch);
send_to_char("splayed like a starfish scrabbling for purchase\n\r",ch);
send_to_char("Inevitably funneled into a chrome trumpet of doomsounding thunder\n\r",ch);
send_to_char("spun into a slick wet thread of bare bony wire\n\r",ch);
}
else if (dream <= 238)
{
send_to_char("The horse and it's rider comes trampling out of the fog called\n\r",ch);
send_to_char("sleep. As you peer at it's indistinguishable (sic) form, it's name\n\r",ch);
send_to_char("escapes you but for a second. The lance is pointed straight \n\r",ch);
send_to_char("for your forehead. It's thunderous hooves jolt your memory. \n\r",ch);
send_to_char("HARK! You remember the name if the horse and rider,it's \n\r",ch);
send_to_char("Knight-Mare. \n\r",ch);
}
else if (dream <= 240)
{
send_to_char("Someone wakes you up.\n\r",ch);
send_to_char("{BSomeone's backstab {Mdoes U{GN{YS{CP{YE{WA{RK{CA{YB{GL{ME things to {B you!{x {y[11578]{x\n\r",ch);
send_to_char ("{cThat really did {RHURT!{x\n\r", ch);
send_to_char ("{cYou have been {RKILLED!!{x\n\r\n\r", ch);
send_to_char("\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("Oh, You're dreaming again. *sigh*\n\r",ch);
}
else if (dream <= 242)
{
send_to_char("The abomination points at you with a crocked and gnawed finger, \n\r",ch);
send_to_char("whispering your name over and over. Chanting your death wish \n\r",ch);
send_to_char("like a mantra. It glides towards where you stand frozen. Your \n\r",ch);
send_to_char("mind begins to scream for your legs to run... to move... to do \n\r",ch);
send_to_char("anything but buckle and fall. You stare in horror, as it's maw \n\r",ch);
send_to_char("open up and... \n\r",ch);
send_to_char("\n\r",ch);
send_to_char("That's when you realize with disgust your bedroll has somehow been soaked. \n\r",ch);
}
else if (dream <= 244)
{
send_to_char("The cat grabs the dog by the nose and bonks him on the head. \n\r",ch);
send_to_char("The dog, growling, pokes the mouse in it's eyes. The mouse, \n\r",ch);
send_to_char("with one stroke, slaps both the cat and the dog. The cat gets \n\r",ch);
send_to_char("mad, swings his fist and kicks the mouse in the stomach. The \n\r",ch);
send_to_char("dog, seeing the mouse being abused, bonks the cat\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("Oh gawd, the 3 Stoogies meet Tom and Jerry.\n\r",ch);
}
else if (dream <= 246)
{
send_to_char("You feel a tickling on your arm, you try to reach over and \n\r",ch);
send_to_char("scratch it but you find yourself frozen. You open your eyes to \n\r",ch);
send_to_char("see a bright light shining at you. Shadows move in the \n\r",ch);
send_to_char("background and you hear a throbbing sound\n\r",ch);
send_to_char("A sting from your arm feels like a needle and you realize that \n\r",ch);
send_to_char("your very marrow is being drawn from your bones.\n\r",ch);
send_to_char("As you are just about to pass out you hear alien voices buzzing \n\r",ch);
send_to_char("quietly...\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("buzzing alien");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("a buzzing alien");
free_string(munchie->description);
munchie->description=str_dup("A buzzing alien is buzzing here.");
munchie->wear_flags=0;
munchie->value[0]=0;
munchie->value[1]=0;
munchie->value[2]=0;
munchie->value[3]=0;
munchie->value[4]=0;
munchie->extra_flags=2;
munchie->item_type = ITEM_TRASH;
munchie->timer=1;
obj_to_room( munchie, ch->in_room );
}
else if (dream <= 248)
{
send_to_char("You're sitting at the table, eating your steak and potatoes, \n\r",ch);
send_to_char("when the meat you're just about to devour begins to cough and \n\r",ch);
send_to_char("spasm. The potatoes start to roll around on your plate, and \n\r",ch);
send_to_char("some even jump up and down, making a huge mess of your \n\r",ch);
send_to_char("vegetables, and a loud ruckus to boot. Hey buddy, says the \n\r",ch);
send_to_char("slab of flesh you called dinner. Why don't you pick on someone \n\r",ch);
send_to_char("your OWN size? \n\r",ch);
}
else if (dream <= 250)
{
send_to_char("You walk through a valley of daisys.. \n\r",ch);
send_to_char("over a ways you see people from different races spread out sleeping \n\r",ch);
send_to_char("over the field.. \n\r",ch);
send_to_char("In the distance you hear the faint sound of music.\n\r",ch);
send_to_char("your eyes get heavy....\n\r",ch);
send_to_char("you collapse to the ground and sleep....\n\r",ch);
}
else if (dream <= 252)
{
send_to_char("Darkness surrounds you.. cold and silent.. feeling around you, you \n\r",ch);
send_to_char("catch ahold of a candle, and magically it lights itself.. burning \n\r",ch);
send_to_char("slowly sending melted wax down your hand.. Looking around you find \n\r",ch);
send_to_char("you are surrounded..by wooden walls?.. you begin to recognize \n\r",ch);
send_to_char("the shape.. of a coffin.. you panic and begin to claw at the lid, \n\r",ch);
send_to_char("trying in vain to push it open.. but it is impossible.. as you \n\r",ch);
send_to_char("struggle alittle dirt tumbles in from a crack in the coffin \n\r",ch);
send_to_char("wall.. and as the candle slowly is extinguished you realize you are \n\r",ch);
send_to_char("doomed...\n\r",ch);
}
else if (dream <= 254)
{
send_to_char("Standing in front of a large man-sized mirror.. you gaze into its \n\r",ch);
send_to_char("depths looking into your reflection.. when suddenly you think you \n\r",ch);
send_to_char("see the reflection wink at you.. slightly startled you realize \n\r",ch);
send_to_char("it was just a trick of your mind.. curious you place your hand \n\r",ch);
send_to_char("against the mirror.. and the reflection mimics your actions \n\r",ch);
send_to_char("exactally.. drawing your hand back away from the mirror your \n\r",ch);
send_to_char("reflection gains a demonic appearance.. reaching through the \n\r",ch);
send_to_char("mirror it grabs your hand and pulls you in..\n\r",ch);
}
else if (dream <= 256)
{
send_to_char("Plucking a apple from a tree along the trail, you lift it to your \n\r",ch);
send_to_char("mouth and begin to take a bite.. a faint whisper is heard..\n\r",ch);
send_to_char("pleeeease... pleeeease slightly puzzled you ignore the faint voice\n\r",ch);
send_to_char("and commence to take a satisfying bite from the ripe apple, and \n\r",ch);
send_to_char("in responce a scream of mortal pain is heard..looking down at the \n\r",ch);
send_to_char("apple in your palm.. a twisted and painfilled face glares at you \n\r",ch);
send_to_char("from the plush ripe apple..\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("glaring apple");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("a glaring apple");
free_string(munchie->description);
munchie->description=str_dup("A glaring apple is glaring at you.");
munchie->wear_flags=1;
munchie->value[0]=3;
munchie->value[1]=4;
munchie->value[2]=0;
munchie->value[3]=0;
munchie->value[4]=0;
munchie->extra_flags=0;
munchie->item_type = ITEM_FOOD;
munchie->timer=number_range(1, 3);
obj_to_room( munchie, ch->in_room );
}
else if (dream <= 258)
{
send_to_char("Sitting upon a plush throne of gold and frilly pillows you feel a \n\r",ch);
send_to_char("breeze.. looking to your right and left you see a pair of beautiful \n\r",ch);
send_to_char("servants waving peacock feather fans through the air. Stepping \n\r",ch);
send_to_char("towards you a equally handsome servant approaches with a plate of\n\r",ch);
send_to_char("ripe grapes...\n\r",ch);
}
else if (dream <= 260)
{
send_to_char("Being led through a crowd of hissing and booing peasants.. two guards\n\r",ch);
send_to_char("push you along towards a strange platform in the center of the square.\n\r",ch);
send_to_char("shackles bear their heavy burden upon your chained arms and legs..\n\r",ch);
send_to_char("Rotten fruit and eggs sail through the air at you.. steping upon\n\r",ch);
send_to_char("the wooden platform, you are forced to kneel and a strange wooden bar\n\r",ch);
send_to_char("secures your head from moving... looking upwards you see a pair of straight\n\r",ch);
send_to_char("wooden poles and at the top a gleaming harbringer of death.. a sharp blade..\n\r",ch);
send_to_char("hearing a voice accost you from behind the words are barely heard as the\n\r",ch);
send_to_char("crowds yells.. you have been accused of murder.. and found guilty by\n\r",ch);
send_to_char("the court.. executioner let the blade fall.. and the last thing you hear\n\r",ch);
send_to_char("is the grinding sound of metal against wood.. pain.. and then oblivion\n\r",ch);
}
else if (dream <= 262)
{
send_to_char("Walking through the twisting corrodors of the endless dungeon.. you trip\n\r",ch);
send_to_char("over a rock.. trying to get up you find your arms and legs stuck.. from\n\r",ch);
send_to_char("the last faint flickers of your torch you see a gigantic web or sticky\n\r",ch);
send_to_char("fibers... struggling against the tight pull of the web.. you hear a\n\r",ch);
send_to_char("strange clicking sound come from above.. and as your torch goes out\n\r",ch);
send_to_char("a enormous black spider floats down upon you..\n\r",ch);
}
else if (dream <= 264)
{
send_to_char("Soft breezes blow against your skin, the salty air bitter on your tongue.\n\r",ch);
send_to_char("You see them... so soft... so unreal...\n\r",ch);
send_to_char("You walk towards them, and hold out your hand for them to take.\n\r",ch);
send_to_char("As your hand clasps theirs, they swirl and slowly fade into nothing.\n\r",ch);
send_to_char("You sink to the damp, white sand... they are gone. And you are alone.\n\r",ch);
}
else if (dream <= 266)
{
send_to_char("You feal someone breathing down the back of your neck.. you open your eyes to\n\r",ch);
send_to_char("see a huge cat-like creature growling behind you..it smiles and you see a\n\r",ch);
send_to_char("row of hideuos sharp teeth..before a scream can pass your lips it sinks \n\r",ch);
send_to_char("it's fangs into your neck. Everything goes black.\n\r",ch);
}
else if (dream <= 268)
{
send_to_char("Creak.\n\r",ch);
send_to_char("Someone ... or something is approaching.\n\r",ch);
send_to_char("You struggle to awaken as you hear the whisper of a sword being drawn.\n\r",ch);
send_to_char("Red eyes gleem evilly at you as you frantically roll out of bed reaching \n\r",ch);
send_to_char("in vain for your weapon.\n\r",ch);
send_to_char("Swish.\n\r",ch);
send_to_char("Darkness.\n\r",ch);
}
else if (dream <= 270)
{
send_to_char("You look around at a land youve never seen before wondering why it seems so \n\r",ch);
send_to_char("familar.. you hear the slithy tothes giriing near by <eh?>\n\r",ch);
send_to_char("you feel something moving around your feet and look down to see the mome raths \n\r",ch);
send_to_char("swarming around you....\n\r",ch);
send_to_char("a flock of jubjub birds flap towards the sky from some near by bushes \n\r",ch);
send_to_char("startled by something ..\n\r",ch);
send_to_char("You hear a sound coming nearer something about it makes you shiver...\n\r",ch);
send_to_char("You look up into a pair of glowing eyes and realize it must be ....it cant be \n\r",ch);
send_to_char("..oh no it is the creature your mother told you to beware of...\n\r",ch);
send_to_char("the Jabberwock stands there its jaws snapping\n\r",ch);
send_to_char("you turn to run but can go no where...\n\r",ch);
send_to_char("you scream.....it fades into silence\n\r",ch);
}
else if (dream <= 272)
{
send_to_char("You stand alone on a moonlit sandy beach , a sudden bzeeze blows agaainst you \n\r",ch);
send_to_char("face , you shiver for some unknown reason.\n\r",ch);
send_to_char("An eerie fog swirls around you.\n\r",ch);
send_to_char("You hear a cackle from somewhere behind you but before you can turn an arm \n\r",ch);
send_to_char("grabs you by the neck. \n\r",ch);
send_to_char("A dagger presses against your throat, pierceing the skin.\n\r",ch);
send_to_char("A low voice growls in your ear 'fear the ghost pirate Acheron'\n\r",ch);
send_to_char("The fog swirls again and is gone. You are alone and trembleing..fearing the day\n\r",ch);
send_to_char("that he might return...\n\r",ch);
act( "$n fidgets and mumbles strange words in $s sleep.", ch, NULL, NULL, TO_ROOM);
}
else if (dream <= 274)
{
send_to_char("You are walking down the street on a bright and sunny morning.\n\r",ch);
send_to_char("People are laughing and smiling happily as you walk by and you smile in\n\r",ch);
send_to_char("return. It sure is nice to see people happy for once.\n\r",ch);
send_to_char("You continue your walk down the street and stop to look in a store window\n\r",ch);
send_to_char("at beautiful dishes. Looking more closely in the window you gasp in horror.\n\r",ch);
send_to_char("YOU FORGOT TO PUT YOUR CLOTHES ON THIS MORNING!!!!\n\r",ch);
send_to_char("You turn deep red from embrassment and hide behind a bush.\n\r",ch);
}
else if (dream <= 276)
{
send_to_char("You are surrounded by golden flames.\n\r",ch);
send_to_char("You frantically look for a way of escape, but to no avail.\n\r",ch);
send_to_char("You smell the armoma of burning flesh.\n\r",ch);
send_to_char("YOUR FLESH!\n\r",ch);
send_to_char("The flames around you seem to be getting hotter.\n\r",ch);
send_to_char("You scream but no one hears your voice or is it that no one cares.\n\r",ch);
send_to_char("You run aimlessly but the flames seem to follow your every move.\n\r",ch);
send_to_char("THERE IS NO ESCAPE!\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("As the flames are about to engulf you...\n\r",ch);
send_to_char("You realize....its only a dream....its only a dream...\n\r",ch);
send_to_char("Or is it........\n\r",ch);
}
else if (dream <= 278)
{
send_to_char("Ahhhh... Asleep at last, it's been a long time since you've had a good\n\r",ch);
send_to_char("nights sleep, and you figure that tonight should be different.. Or should\n\r",ch);
send_to_char("it! All of a sudden you feel a burst of energy run thru your body, and\n\r",ch);
send_to_char("you break out in a cold sweat! YOu feel as if someone or some THING is\n\r",ch);
send_to_char("pulling your body, down, down, down, your pulled until your at the center\n\r",ch);
send_to_char("of the earth. Then a deep voice speaks, I have been waiting your arrival\n\r",ch);
send_to_char("it booms. Looking around franticlly you see a dark figure with horns dressed\n\r",ch);
send_to_char("in a blood-stained cloak. 'You have been very bad...' it continues 'for this\n\r",ch);
send_to_char("I will punish you!' With that you feel a draining of strength and you fall\n\r",ch);
send_to_char("to the ground. Trying to get up you realise that you can't move! Then the\n\r",ch);
send_to_char("voice booms 'And now, you DIE!' ZZZZZZZZZZaaaaaaaaaaaaappppppp! a bolt \n\r",ch);
send_to_char("lightning hits your body...\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("\n\r",ch);
send_to_char(" Everything falls silent.\n\r",ch);
ch->hit = 100;
af.where = TO_AFFECTS;
af.location = APPLY_REGEN;
af.modifier = 300;
af.duration = 5;
af.type = gsn_herb;
af.bitvector = AFF_REGENERATION;
affect_to_char(ch,&af);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("sparks");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("some sparks");
free_string(munchie->description);
munchie->description=str_dup("You see some sparks.");
munchie->wear_flags=16385;
munchie->value[0]=0;
munchie->value[1]=0;
munchie->value[2]=100;
munchie->value[3]=0;
munchie->value[4]=0;
munchie->extra_flags=1;
munchie->item_type = ITEM_LIGHT;
munchie->timer = number_range(1, 10);
obj_to_room( munchie, ch->in_room );
act( "A bolt of {WLIGHTNING{0 falls from the sky and strikes $n as $e lies sleeping!", ch, NULL, NULL, TO_ROOM);
send_to_char("You feel energized!\n\r",ch);
}
else if (dream <= 280)
{
send_to_char("As you start to drift off to sleep you see sheep jumping over a fence..\n\r",ch);
send_to_char("One Sheep, Two sheep, Three Sheep, Four Sheep...\n\r",ch);
send_to_char("Slowly as you fall into a deeper sslleep the sheep start morphing into wolves.\n\r",ch);
send_to_char("Even farther into your slumber the wolves again start morphing. into corpses..\n\r",ch);
send_to_char("Eight Corpses, Nine Corpses...\n\r",ch);
send_to_char("You then realise that the corpses are YOUR corpses!\n\r",ch);
send_to_char("You wake up bathed in a blood-red sweat....\n\r",ch);
}
else if (dream <= 282)
{
send_to_char("'They're coming' shrieked the old woman.\n\r",ch);
send_to_char("Sudden blurs of movement fog your already hazy eyes.\n\r",ch);
send_to_char("Praying for strength you struggle to rise to your feet.\n\r",ch);
send_to_char("You fall to your knees, too dizzy to stand. You realize everyone else\n\r",ch);
send_to_char("has escaped through the passage and you are left alone...\n\r",ch);
send_to_char("The door bursts open and you lift your head to see.\n\r",ch);
send_to_char("Laughing in hysteria you know it's over and there is no escape.\n\r",ch);
send_to_char("The dark figures roughly pull you to your feet \n\r",ch);
send_to_char("sneering in disgust at your hideous appearance, the leader snaps your neck\n\r",ch);
send_to_char("and all is silent in the church yard as the 7 nuns dispose of your body.\n\r",ch);
}
else if (dream <= 284)
{
send_to_char("You look into their eyes, unable to break the gaze because of its\n\r",ch);
send_to_char("intensity. She reaches for your hand and places it in hers. Holding it\n\r",ch);
send_to_char("there for a moment of sadness, then kissing your forehead lovingly she goes.\n\r",ch);
send_to_char("You watch her leave, and a single tear falls to the ground, you know she\n\r",ch);
send_to_char("will never return. Realizing she left something in your hand you open\n\r",ch);
send_to_char("it to find a small ring with a beautiful amethyst set in it.\n\r",ch);
send_to_char("You put the ring on your own finger and swear to never forget the most\n\r",ch);
send_to_char("important person in your life. Once again you cry for the loss of\n\r",ch);
send_to_char("your mother.\n\r",ch);
}
else if (dream <= 286)
{
send_to_char("You hear fighting all around you, looking around you realize your in the\n\r",ch);
send_to_char("middle of a gang fight. You notice that you are holding a 6 inch knife, and \n\r",ch);
send_to_char("there's a man in front of youo pointing a gun at your head.\n\r",ch);
send_to_char("All of a sudden you hear strange noises from behind you and the\n\r",ch);
send_to_char("man with the gun whirls around to get a better look. As he does you lunge\n\r",ch);
send_to_char("the knife into him and knock the gun ou of his hand.\n\r",ch);
send_to_char("reallizing what you just did you take off running, and keep running,\n\r",ch);
send_to_char("leaping over a 8' fence no problem, running, running, running until you\n\r",ch);
send_to_char("can't run any more and you collapse under a tree. Finding yourself exhausted\n\r",ch);
send_to_char("you pass out without knowing it.\n\r",ch);
send_to_char("Your vision goes blood-red and the man you stabbed is burned into\n\r",ch);
send_to_char("your mind until you wake up trembling in horror.\n\r",ch);
}
else if (dream == 289)
{
send_to_char("You are in a large cell with mattresses completly covering every wall.. \n\r",ch);
send_to_char("You try to move but find that\n\r",ch);
send_to_char("it is nearly immpossible since you are in a straight jacket.\n\r",ch);
send_to_char("You scream as loud as you can, hoping that someone will come, but nobody\n\r",ch);
send_to_char("does..\n\r",ch);
send_to_char("You're doomed to stay here for the rest of eternity, there is no escape..\n\r",ch);
}
else if (dream <= 292)
{
send_to_char("Running through the forrest, your heart almost pounds out of your\n\r",ch);
send_to_char("chest. The cold sweat pouring down your cheeks blurs your vision\n\r",ch);
send_to_char("and the burning is almost unbearable. You can hear the rapid\n\r",ch);
send_to_char("hoofbeats close behind you and the howling of dogs on your scent.\n\r",ch);
send_to_char("There!! Up ahead you see a light!!! Happy tears stream down your\n\r",ch);
send_to_char("face as you run to the flames. As you are almost upon the flames your laughter\n\r",ch);
send_to_char("stops and is replaced with piercing shrieks. Where are\n\r",ch);
send_to_char("the horrible screams coming from? You turn and see 2 charred bodies\n\r",ch);
send_to_char("running madly around, still covered with flickering fire. You cover\n\r",ch);
send_to_char("your mouth as the sickening feeling over comes you and you \n\r",ch);
send_to_char("collapse into the flames and join the poor people behind you.\n\r",ch);
}
else if (dream <=300)
{
send_to_char("A hand grabs your shoulder and a grizzled old man\n\r",ch);
send_to_char("peers at your wounds.\n\r",ch);
send_to_char("'Hmmmm, let me see.'\n\r",ch);
send_to_char("He digs in his pouch and pulls out a smelly potion.\n\r",ch);
send_to_char("'Here, drink this.'\n\r",ch);
send_to_char("As you raise yourself from your slumbers, he disappears.\n\r",ch);
send_to_char("All that remains is a vial that reeks even from arms length.\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("smelly vial potion");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("a smelly potion");
free_string(munchie->description);
munchie->description=str_dup("A smelly vial is here.");
munchie->wear_flags=1;
munchie->value[0]=40;
munchie->value[1]=4;
munchie->value[2]=24;
munchie->value[3]=27;
munchie->value[4]=29;
munchie->item_type = ITEM_POTION;
obj_to_char( munchie, ch );
}
else if (dream <=302)
{
send_to_char("The bright beam catches you on the shoulder and you scream in pain as\n\r",ch);
send_to_char("your flesh rips open. You fumble with your gun and try to unjam the trigger.\n\r",ch);
send_to_char("Still unable to get the laser to work, you throw it to the ground in\n\r",ch);
send_to_char("disgust. Holding your injured shoulder with one hand, you reach with the\n\r",ch);
send_to_char("other into your pack, pulling out a small blinking sphere.\n\r",ch);
send_to_char("You close your eyes and say a silent good-bye to your fleet, only\n\r",ch);
send_to_char("praying they made it out in time. You can hear the strange foreign\n\r",ch);
send_to_char("shouts of the Krakians coming up quickly, and you shudder in fear.\n\r",ch);
send_to_char("Soon they are nearing the gate you're in and you know it is time. You\n\r",ch);
send_to_char("push a glowing button on the sphere and it begins to beep loudly.\n\r",ch);
send_to_char("'10 seconds until utter destruction' a computerized voice intones.\n\r",ch);
send_to_char("You clip the sphere onto the wall as the Krakians enter screaming.\n\r",ch);
send_to_char("There is a sudden white light and then nothing....\n\r",ch);
}
else if (dream <= 304)
{
send_to_char("You hear the slow flap of wings.\n\r",ch);
send_to_char("It draws closer and closer. Looking up\n\r",ch);
send_to_char("you can see a large silver dragon outlined against the sun.\n\r",ch);
send_to_char("As it draws nearer, you see a golden lyre dangling from a strap\n\r",ch);
send_to_char("around its neck. Suddenly you let out a scream and run for cover.\n\r",ch);
send_to_char("You fall. splat. Heartbeats later. SPLAT!!\n\r",ch);
}
else if (dream <= 306)
{
send_to_char("You sit on the green grass beneath a broad large oak tree staring out at the\n\r",ch);
send_to_char("sunlit fields while a soft warm breeze touchs you lightly. Staring up\n\r",ch);
send_to_char("through the leaves you can see motes of sunlight peeking through and you\n\r",ch);
send_to_char("can only think of how wonderful it is to be alive...\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("Suddenly, violently the weather changes, wind whipping almost through you,\n\r",ch);
send_to_char("chilling your soul. The plains turn a drab grey and they sun clouds over.\n\r",ch);
send_to_char("Something caresses your shoulder and you restist temptation to look even \n\r",ch);
send_to_char("though it frightens and freezes your blood....\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("Like a snake striking a tendril wraps around your neck choking you. Fighting\n\r",ch);
send_to_char("to scream, for even a sound to escape your throat, you claw at your unkown\n\r",ch);
send_to_char("foe.\n\r",ch);
}
else if (dream <= 308)
{
send_to_char("Aaaaaahhhh, what a good nights sleep you had. You stand up and stretch\n\r",ch);
send_to_char("letting everybone in your body snap and pop.. Looking at the clock you\n\r",ch);
send_to_char("realise it's only 6:30AM and that mabye it would be a good time to go\n\r",ch);
send_to_char("check out the mud. As you start walking to the computer room you feel a\n\r",ch);
send_to_char("cold chill run thru your body but just shrug it off. As you enter the room\n\r",ch);
send_to_char("and look over to where your computer is, you realize IT'S GONE! Thinkinng\n\r",ch);
send_to_char("you've been robbed you run to the phone, but find it isn't there either!\n\r",ch);
send_to_char("Feeling scared, and invaded you look around to see what else is missing\n\r",ch);
send_to_char("when you notice the door, and none of the windows have been broken into.\n\r",ch);
send_to_char("Another cold chill runs thru your body and you hear a voice off in the\n\r",ch);
send_to_char("background...\n\r",ch);
send_to_char("'You are entering another dimension...'\n\r",ch);
}
else if (dream <= 310)
{
send_to_char("Looking back you see hundreds of people running your way, all screaming your\n\r",ch);
send_to_char("name and waving weapons in the air. You have no idea why there chasing you\n\r",ch);
send_to_char("but decide it would be a good idea to get out of there! Starting to run\n\r",ch);
send_to_char(", you run down many streets and alleys slowly winding your way out of the\n\r",ch);
send_to_char("town only stopping occassionaly to fight someone that jumped out in front\n\r",ch);
send_to_char("of you. After what seems like forever you come to a small inn and decide to stay for the night.\n\r",ch);
send_to_char("after paying the innkeeper extra to not tell anyone your there you go up to\n\r",ch);
send_to_char("your room and tend to your wounds. Shortly after you hear a horde of people come in and\n\r",ch);
send_to_char("question him, then go racing off...\n\r",ch);
send_to_char("The next morning you thank the man and go off looking for\n\r",ch);
send_to_char("a new place to hide, fearing they will eventually catch up to you and\n\r",ch);
send_to_char("wonder what they will do then...\n\r",ch);
}
else if (dream <= 312)
{
send_to_char("You feel a soft brush at your neck, and ignore it.\n\r",ch);
send_to_char("Then you feel the fangs PIERCE your skin and your lifeblood being taken!\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("You sit bolt upright, your heart pounding!\n\r",ch);
send_to_char("You look about but see no one near you.\n\r",ch);
send_to_char("You calm yourself and drift back to sleep, realizing it was only a dream.\n\r",ch);
send_to_char("Or was it...........?\n\r",ch);
}
else if (dream <= 314)
{
send_to_char("You hear flutes in the distance. As the fog clears you realize that you\n\r",ch);
send_to_char("are standing in a quaint village filled with small happy fauns. A small\n\r",ch);
send_to_char("male approaches you, smiles, puts a pipe to his lips, and begins to play\n\r",ch);
send_to_char("a tune. He walks away - and you begin to follow. At first you are enchanted\n\r",ch);
send_to_char("...but you slowly come to the realization you can't stop! You struggle\n\r",ch);
send_to_char("from the sound...throwing your hands over your ears...but it solves\n\r",ch);
send_to_char("nothing. He leads you away from the village into a dark, ominous forest.\n\r",ch);
send_to_char("The sound begins to drill into your eardrums...then your brain...\n\r",ch);
send_to_char("You awake with a start!\n\r",ch);
}
else if (dream <= 316)
{
send_to_char("You are being led down a corridor.\n\r",ch);
send_to_char("You are completely shackled and each arm is fiercely gripped by a decaying\n\r",ch);
send_to_char("zombie...They force you into a large dark throne room. Before you sits\n\r",ch);
send_to_char("Egil on a throne of chipped bone and patchworked flesh. He is in deep\n\r",ch);
send_to_char("conversation with Withers, who stands to his left. Withers leans over and\n\r",ch);
send_to_char("whispers something into Egil's ear, and Egil turns to glare at you. He\n\r",ch);
send_to_char("extends his arm, makes a fist, and points his thumb down to the floor.\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("Excruciating pain fills your entire body, and you look down to see your\n\r",ch);
send_to_char("skin dissolve into dust. You open your mouth, and a scream of hopelessness\n\r",ch);
send_to_char("escapes........\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("All goes dark.......\n\r",ch);
}
else if (dream <= 318)
{
send_to_char("You're resting peacefully, dreaming about beautiful green fields, full of colorful flowers.. the \n\r",ch);
send_to_char("sun shines brightly overhead, when an odd sensation awakes you.\n\r",ch);
send_to_char("You wake up to feel an odd burning sensation on your left hand, and look down to\n\r",ch);
send_to_char("find your hand literally on fire! Bright flames and greasy orange smoke rise from the palm of your \n\r",ch);
send_to_char("hand, as you sit helplessly and watch the skin drip and crackle,\n\r",ch);
send_to_char("peeling away from the bones as you begin to scream in agony..\n\r",ch);
send_to_char("You sit bolt upright in bed, rocked to the core of your being as you realize this was only.. a \n\r",ch);
send_to_char("dream..? \n\r",ch);
}
else if (dream <= 321)
{
send_to_char("Your walking down a grey road, and the scenes all about\n\r",ch);
send_to_char("you are blue, thats all you see, greish blue for as far as \n\r",ch);
send_to_char("the eye can see.\n\r",ch);
send_to_char("You keep walking down the road, and you come upon a bench, \n\r",ch);
send_to_char("with 2 people sitting on it reading news papers, you \n\r",ch);
send_to_char("notice the papers are close to there faces.\n\r",ch);
send_to_char("All of a sudden there faces morph into the news paper, and \n\r",ch);
send_to_char("they put their hands down. They look at you then start \n\r",ch);
send_to_char("talking to each other.\n\r",ch);
send_to_char("You run as fast as you can down the road, till you see a \n\r",ch);
send_to_char("woman, made of bones. She is taking a walk, with her baby in the cart\n\r",ch);
send_to_char("she is pushing along, you decide to look closer, so you \n\r",ch);
send_to_char("walk over to the cart made of bones...\n\r",ch);
send_to_char("You look in side and the baby screams so loud it knocks \n\r",ch);
send_to_char("you back a few feet. \n\r",ch);
send_to_char("You run as fast as you can, you come to a cliff.\n\r",ch);
}
else if (dream <= 324)
{
send_to_char("you hear them comming\n\r",ch);
send_to_char("They're comming, there's too many of them. What will you do?\n\r",ch);
send_to_char("Suddenly, they crest the ridge, and you are bowled over by \n\r",ch);
send_to_char("2000 puppies who want to lick your face.\n\r",ch);
send_to_char("They're all over. Well, at least they're housebroken.\n\r",ch);
send_to_char("Aren't they?\n\r",ch);
}
else if (dream <= 326)
{
send_to_char("You find yourself in a labyrinth of pipes and gears. All around you, you\n\r",ch);
send_to_char("hear clanks, bangs, and the rattle of chains. You smell the oil used to\n\r",ch);
send_to_char("lubricate the gears. As you walk through this place, you find it\n\r",ch);
send_to_char("looks familiar. You wonder why. Then you realize, you've\n\r",ch);
send_to_char("seen it before! A gnome had been working on the plans a while back!\n\r",ch);
}
else if (dream <= 328)
{
send_to_char("Wait, is that pipe shaking? Yes, it is! All of the sudden\n\r",ch);
send_to_char("you, hear the shrill scream of alarms! You run as fast as you\n\r",ch);
send_to_char("can, trying to get out, but it's just too big! Oh, no!\n\r",ch);
send_to_char("BOOOOOOOOMMMMMMMMMM!!!!!!!!!!!!!!!\n\r",ch);
send_to_char("You wake up, with grease in your hair.\n\r",ch);
}
else if (dream == 465)
{
send_to_char("You open your eyes, it is still dark.\n\r",ch);
send_to_char("The fire has gone out. Where are the matchs?\n\r",ch);
send_to_char("You reach around in the dark, your hand strikes something hard.\n\r",ch);
send_to_char("Ouch!!!! Blood flows from your hand as you nick it on the blade of a \n\r",ch);
send_to_char("sword. The room lights up as your blood drips onto the blade. \n\r",ch);
send_to_char("The image of a powerful sword is burned into your mind!\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("dream sword");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("Sword of {WD{0reams");
free_string(munchie->description);
munchie->description=str_dup("A sharp sword is here.");
munchie->wear_flags=8193;
munchie->value[0]=1;
munchie->value[1]=number_range(1,10);
munchie->value[2]=number_range(1,20);
munchie->value[3]=1;
munchie->value[4]=8;
munchie->extra_flags=1;
munchie->item_type = ITEM_WEAPON;
munchie->timer=number_range(1,75);
obj_to_room( munchie, ch->in_room );
act( "$n lets out a cry and a bit of blood drips from $s hand!", ch, NULL, NULL, TO_ROOM);
act( "Mumbling strange words, $n passes into a deeper sleep.", ch, NULL, NULL, TO_ROOM);
}
else if (dream == 466)
{
send_to_char("You shudder from the cold as you see a scene of a vast frozen wasteland\n\r",ch);
send_to_char("you begin to stumble around in the cold snow drifts and frozen ponds\n\r",ch);
send_to_char("the cold begins to reach your fingers and toes as you begin to loose\n\r",ch);
send_to_char("feeling in them, all of a sudden a man dressed in black appears before you\n\r",ch);
send_to_char("in one hand he is holding a dagger and in the other...\n\r",ch);
send_to_char("YOUR HEAD!?!! As you begin to scream it slowly fades away as you feel the frost\n\r",ch);
send_to_char("from a short blade against your neck.\n\r",ch);
munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 );
free_string(munchie->name);
munchie->name=str_dup("dream dagger");
free_string(munchie->short_descr);
munchie->short_descr=str_dup("Dagger of {WD{0reams");
free_string(munchie->description);
munchie->description=str_dup("A sharp dagger is here.");
munchie->wear_flags=8193;
munchie->value[0]=2;
munchie->value[1]=number_range(1,9);
munchie->value[2]=number_range(1,21);
munchie->value[3]=1;
munchie->value[4]=8;
munchie->extra_flags=1;
munchie->item_type = ITEM_WEAPON;
munchie->timer=number_range(1,75);
obj_to_room( munchie, ch->in_room );
act( "$n lets out a cry and a bit of blood drips from $s hand!", ch, NULL, NULL, TO_ROOM);
act( "Mumbling strange words, $n passes into a deeper sleep.", ch, NULL, NULL, TO_ROOM);
}
else if (dream == 467)
{
send_to_char("You think about vampires and one appears.\n\r",ch);
send_to_char("It reaches for you and you scream in terror as\n\r",ch);
send_to_char("it's fangs bite into your neck!\n\r",ch);
}
else
{
send_to_char("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.\n\r",ch);
}
}
/*** END ADD ***/
if ( !IS_NPC(ch) && ch->level < LEVEL_IMMORTAL )
{
OBJ_DATA *obj;
if ( ( obj = get_eq_char( ch, WEAR_LIGHT ) ) != NULL
&& obj->item_type == ITEM_LIGHT
&& obj->value[2] > 0 )
{
if ( --obj->value[2] == 0 && ch->in_room != NULL )
{
--ch->in_room->light;
act( "$p goes out.", ch, obj, NULL, TO_ROOM );
act( "$p flickers and goes out.", ch, obj, NULL, TO_CHAR );
extract_obj( obj );
}
else if ( obj->value[2] <= 5 && ch->in_room != NULL)
act("$p flickers.",ch,obj,NULL,TO_CHAR);
}
if (IS_IMMORTAL(ch))
ch->timer = 0;
if ( ++ch->timer >= 12 )
{
/* -- lets not allow the use of void triggers and try to stop idlers ~ Stheno: 01-06-2006 */
if ( ch->was_in_room == NULL && ch->in_room != NULL )
{
ch->was_in_room = ch->in_room;
if ( ch->fighting != NULL )
stop_fighting( ch, TRUE );
act( "$n disappears into the void.",ch, NULL, NULL, TO_ROOM );
/*send_to_char( "You disappear into the void.\n\r", ch );*/
if (ch->level > 1)
save_char_obj( ch );
char_from_room( ch );
char_to_room( ch, get_room_index( ROOM_VNUM_LIMBO ) );
}
}
if(!IS_SET(ch->plyr,PLAYER_GHOST))
{
gain_condition( ch, COND_DRUNK, -1 );
gain_condition( ch, COND_FULL, ch->size > SIZE_MEDIUM ? -4 : -2 );
gain_condition( ch, COND_THIRST, -1 );
gain_condition( ch, COND_HUNGER, ch->size > SIZE_MEDIUM ? -2 : -1);
}
}
}
/*
* Autosave and autoquit.
* Check that these chars still exist.
*/
for ( ch = char_list; ch != NULL; ch = ch_next )
{
ch_next = ch->next;
if (ch->desc != NULL && ch->desc->descriptor % 30 == save_number)
save_char_obj(ch);
if ( ch == ch_quit )
do_quit( ch, "" );
}
return;
}
/*
* Update all affects -- chars, including mobs.
*/
void affect_update( void )
{
CHAR_DATA *ch;
CHAR_DATA *ch_next;
for ( ch = char_list; ch != NULL; ch = ch_next )
{
AFFECT_DATA *paf;
AFFECT_DATA *paf_next;
ch_next = ch->next;
for ( paf = ch->affected; paf != NULL; paf = paf_next )
{
paf_next = paf->next;
if ( paf->duration > 0 )
{
paf->duration--;
if (number_range(0,4) == 0 && paf->level > 0)
paf->level--; /* spell strength fades with time */
}
else if ( paf->duration < 0 )
;
else
{
if ( paf_next == NULL
|| paf_next->type != paf->type
|| paf_next->duration > 0 )
{
if ( paf->type > 0 && skill_table[paf->type].msg_off )
{
send_to_char( skill_table[paf->type].msg_off, ch );
send_to_char( "\n\r", ch );
}
}
affect_remove( ch, paf );
}
}
/*
* Careful with the damages here,
* MUST NOT refer to ch after damage taken,
* as it may be lethal damage (on NPC).
*/
if (is_affected(ch, gsn_plague) && ch != NULL)
{
AFFECT_DATA *af, plague;
CHAR_DATA *vch;
int dam;
if (ch->in_room == NULL)
return;
act("$n writhes in agony as plague sores erupt from $s skin.",
ch,NULL,NULL,TO_ROOM);
send_to_char("You writhe in agony from the plague.\n\r",ch);
for ( af = ch->affected; af != NULL; af = af->next )
{
if (af->type == gsn_plague)
break;
}
if (af == NULL)
{
REMOVE_BIT(ch->affected_by,AFF_PLAGUE);
return;
}
if (af->level == 1)
return;
plague.where = TO_AFFECTS;
plague.type = gsn_plague;
plague.level = af->level - 1;
plague.duration = number_range(1,2 * plague.level);
plague.location = APPLY_CON;
plague.modifier = number_range(1,4)*-1;
plague.bitvector = AFF_PLAGUE;
for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room)
{
if (!saves_spell(plague.level - 2,vch,DAM_DISEASE)
&& !IS_IMMORTAL(vch)
&& !IS_AFFECTED(vch,AFF_PLAGUE) && number_bits(4) == 0)
{
send_to_char("You feel hot and feverish.\n\r",vch);
act("$n shivers and looks very ill.",vch,NULL,NULL,TO_ROOM);
affect_join(vch,&plague);
}
}
dam = number_range(1000,4000)/get_curr_stat(ch, STAT_CON);//Between 50 and 200 with 20 Constitution
ch->mana -= dam;
ch->move -= dam;
damage_old( ch, ch, dam/2, gsn_plague,DAM_DISEASE,FALSE);//Let's not do so much damage though. Max of 100.
}
if ( IS_AFFECTED(ch, AFF_POISON) && ch != NULL )
// && !IS_AFFECTED(ch,AFF_SLOW))
{
AFFECT_DATA *poison;
int poidam;
poison = affect_find(ch->affected,gsn_poison);
if (poison != NULL)
{
if(poison->duration < 100)
poidam = UMAX ( 10, number_range (10, poison->level*1.8));
else if(poison->duration < 200)
poidam = UMAX ( 10, number_range (10, poison->level*2.0));
else if(poison->duration < 300)
poidam = UMAX ( 10, number_range (10, poison->level*2.2));
else if(poison->duration < 400)
poidam = UMAX ( 10, number_range (10, poison->level*2.4));
else if(poison->duration < 550)
poidam = UMAX ( 10, number_range (10, poison->level*2.6));
else if(poison->duration < 800)
poidam = UMAX ( 10, number_range (10, poison->level*3.0));
else
poidam = UMAX ( 10, number_range (10, poison->level*3.4));
if(ch->hit*6 < ch->max_hit)
poidam /=3;
if((ch->hit-poidam)<0)
poidam = abs(ch->hit-0);
ch->hit-=poidam;
act( "$n shivers and suffers.", ch, NULL, NULL, TO_ROOM );
send_to_char( "You shiver and suffer.\n\r", ch );
damage_old(ch,ch,poison->level/5 + 1,gsn_poison,
DAM_POISON,FALSE);
}
}
else if ( ch->position == POS_INCAP && number_range(0,1) == 0)
{
damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0);
}
else if ( ch->position == POS_MORTAL )
{
damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0);
}
if (IS_AFFECTED2(ch,AFF2_GARROTE) && ch != NULL)
{
AFFECT_DATA *garrote;
garrote = affect_find(ch->affected,gsn_garrote);
if (garrote != NULL)
{
act( "$n chokes and gags.", ch, NULL, NULL, TO_ROOM );
send_to_char( "You choke and gag.\n\r", ch );
damage(ch,ch,garrote->level + 300,gsn_garrote,DAM_ENERGY,FALSE,0);
}
}
else if ( ch->position == POS_INCAP && number_range(0,1) == 0)
{
damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0);
}
else if ( ch->position == POS_MORTAL )
{
damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0);
}
if (IS_AFFECTED(ch,AFF_DEAF) && ch != NULL)
{
AFFECT_DATA *shriek;
for (shriek = ch->affected; shriek != NULL; shriek = shriek->next) {
if (shriek->type == gsn_shriek)
break;
}
if (shriek->duration && shriek->type == gsn_shriek) {
AFFECT_DATA af;
af.where = TO_AFFECTS;
af.type = gsn_shriek;
af.level = 0;
af.duration = 0;
af.location = APPLY_HITROLL;
af.modifier = shriek->modifier * -1 / 5;
af.bitvector= AFF_DEAF;
act("$n cries out and falls to their knees holding their ears.",ch,NULL,NULL,TO_ROOM);
send_to_char("You tremble and fall to your knees holding your ears.\n\r",ch);
ch->position = POS_RESTING;
affect_join(ch,&af);
}
}
if (is_affected(ch, gsn_on_fire) && ch != NULL)
{
AFFECT_DATA *af, fire;
CHAR_DATA *vch;
int dam;
if (ch->in_room == NULL)
return;
act("$n screams as flames erupt along $s skin.",ch,NULL,NULL,TO_ROOM);
send_to_char("You feel your skin begin to burn.\n\r",ch);
send_to_char("HOT HOT HOT!!\n\r",ch);
for ( af = ch->affected; af != NULL; af = af->next )
{
if (af->type == gsn_on_fire)
break;
}
if (af == NULL)
{
affect_strip(ch,gsn_on_fire);
return;
}
if (af->level == 1)
return;
fire.where = TO_AFFECTS;
fire.type = gsn_on_fire;
fire.level = af->level - 1;
fire.duration = number_range(1,2 * fire.level);
fire.location = APPLY_DEX;
fire.modifier = -2;
fire.bitvector = 0;
for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room)
{
if (!saves_spell(fire.level - 2,vch,DAM_DISEASE)
&& !IS_IMMORTAL(vch)
&& !is_affected(vch,gsn_on_fire) && number_bits(4) == 0)
{
act("Sparks leap from $n and you catch on fire!",ch,NULL,vch,TO_VICT);
act("Sparks from $n ignite $N's hair!",ch,NULL,vch,TO_NOTVICT);
affect_join(vch,&fire);
}
}
dam = UMIN(ch->level * 2, af->level/3 + 1);
ch->move -= dam / 2;
if(( ch->hit - dam ) < 0 )
dam = ch->hit;
ch->hit -= dam;
damage_old( ch, ch, af->level/10 + 1, gsn_on_fire,DAM_FIRE,FALSE);
}
}
return;
}
void cooldown_update( void )
{
char buf[MAX_STRING_LENGTH];
CHAR_DATA *ch;
CHAR_DATA *ch_next;
for ( ch = char_list; ch != NULL; ch = ch_next )
{
COOLDOWN_DATA *pcd, *pcd_next = NULL;
ch_next = ch->next;
for ( pcd = ch->cooldowns; pcd != NULL; pcd = pcd_next )
{
if ( pcd->duration > 0 )
pcd->duration--;
else if ( pcd->duration < 0 )
;
else
{
sprintf( buf, "{W%s is no longer on cooldown.{x\n\r",
skill_table[pcd->type].name );
send_to_char( buf , ch );
cooldown_remove( ch, pcd );
}
}
}
return;
}
/*
* Update all objs.
* This function is performance sensitive.
*/
void obj_update( void )
{
AUCTION_DATA *auc;
OBJ_DATA *obj, *obj_next;
AFFECT_DATA *paf, *paf_next;
char message[MAX_INPUT_LENGTH];
for ( obj = object_list; obj != NULL; obj = obj_next )
{
CHAR_DATA *rch;
obj_next = obj->next;
/* go through affects and decrement */
for ( paf = obj->affected; paf != NULL; paf = paf_next )
{
paf_next = paf->next;
if ( paf->duration > 0 )
{
paf->duration--;
if (number_range(0,4) == 0 && paf->level > 0)
paf->level--; /* spell strength fades with time */
}
else if ( paf->duration < 0 )
;
else
{
if ( paf_next == NULL
|| paf_next->type != paf->type
|| paf_next->duration > 0 )
{
if ( paf->type > 0 && skill_table[paf->type].msg_obj )
{
if (obj->carried_by != NULL)
{
rch = obj->carried_by;
act(skill_table[paf->type].msg_obj,
rch,obj,NULL,TO_CHAR);
}
if (obj->in_room != NULL
&& obj->in_room->people != NULL)
{
rch = obj->in_room->people;
act(skill_table[paf->type].msg_obj,
rch,obj,NULL,TO_ALL);
}
}
}
affect_remove_obj( obj, paf );
}
}
if ( obj->timer <= 0 || --obj->timer > 0 )
continue;
switch ( obj->item_type )
{
default: strcpy( message, "$p crumbles into dust." ); break;
case ITEM_FOUNTAIN: strcpy( message, "$p dries up." ); break;
case ITEM_CORPSE_NPC: strcpy( message, "$p decays into dust." ); break;
case ITEM_CORPSE_PC: strcpy( message, "$p decays into dust." ); break;
case ITEM_FOOD: strcpy( message, "$p decomposes." ); break;
case ITEM_POTION: strcpy( message, "$p has evaporated from disuse." ); break;
case ITEM_PORTAL: strcpy( message, "$p fades out of existence." ); break;
case ITEM_CONTAINER:
case ITEM_PIT:
if (CAN_WEAR(obj,ITEM_WEAR_FLOAT))
if (obj->contains)
strcpy( message, "$p flickers and vanishes, spilling its contents on the floor." );
else
strcpy( message, "$p flickers and vanishes." );
else
strcpy( message, "$p crumbles into dust." );
break;
}
if ( obj->carried_by != NULL )
{
if (IS_NPC(obj->carried_by)
&& obj->carried_by->pIndexData->pShop != NULL)
obj->carried_by->silver += obj->cost/5;
else
{
act( message, obj->carried_by, obj, NULL, TO_CHAR );
if ( obj->wear_loc == WEAR_FLOAT)
act(message,obj->carried_by,obj,NULL,TO_ROOM);
}
}
else if ( obj->in_room != NULL
&& ( rch = obj->in_room->people ) != NULL )
{
if (! (obj->in_obj && obj->in_obj->pIndexData->item_type == ITEM_PIT
&& !CAN_WEAR(obj->in_obj,ITEM_TAKE)))
{
act( message, rch, obj, NULL, TO_ROOM );
act( message, rch, obj, NULL, TO_CHAR );
}
}
if ((obj->item_type == ITEM_CORPSE_PC || obj->wear_loc == WEAR_FLOAT)
&& obj->contains)
{ /* save the contents */
OBJ_DATA *t_obj, *next_obj;
for (t_obj = obj->contains; t_obj != NULL; t_obj = next_obj)
{
next_obj = t_obj->next_content;
obj_from_obj(t_obj);
if (obj->in_obj) /* in another object */
obj_to_obj(t_obj,obj->in_obj);
else if (obj->carried_by) /* carried */
if (obj->wear_loc == WEAR_FLOAT)
if (obj->carried_by->in_room == NULL)
extract_obj(t_obj);
else
obj_to_room(t_obj,obj->carried_by->in_room);
else
obj_to_char(t_obj,obj->carried_by);
else if (obj->in_room == NULL) /* destroy it */
extract_obj(t_obj);
else /* to a room */
obj_to_room(t_obj,obj->in_room);
}
}
for ( auc = auction_list; auc != NULL; auc = auc->next )
{
if (auc->item != NULL && obj == auc->item)
{
char buf[MAX_STRING_LENGTH];
if ( auc->high_bidder != NULL )
{
add_cost(auc->high_bidder,auc->bid_amount,auc->bid_type);
send_to_char("\n\rYour bid has been returned to you.\n\r",auc->high_bidder);
}
sprintf( buf, "{+Ticket [{Y%d{+], Auction stopped: %s{x",
auc->slot, message );
auction_channel( auc->owner, auc->item, buf );
free_auction( auc );
break;
}
}
extract_obj( obj );
}
return;
}
/*
* Aggress.
*
* for each mortal PC
* for each mob in room
* aggress on some random PC
*
* This function takes 25% to 35% of ALL Merc cpu time.
* Unfortunately, checking on each PC move is too tricky,
* because we don't the mob to just attack the first PC
* who leads the party into the room.
*
* -- Furey
*/
void aggr_update( void )
{
CHAR_DATA *wch;
CHAR_DATA *wch_next;
CHAR_DATA *ch;
CHAR_DATA *ch_next;
CHAR_DATA *vch;
CHAR_DATA *vch_next;
CHAR_DATA *victim;
for ( wch = char_list; wch != NULL; wch = wch_next )
{
wch_next = wch->next;
if ( IS_NPC(wch)
|| wch->level >= LEVEL_IMMORTAL
|| wch->in_room == NULL
|| wch->in_room->area->empty)
continue;
for ( ch = wch->in_room->people; ch != NULL; ch = ch_next )
{
int count;
ch_next = ch->next_in_room;
if ( !IS_NPC(ch)
|| !IS_SET(ch->act, ACT_AGGRESSIVE)
|| IS_SET(ch->in_room->room_flags,ROOM_SAFE)
|| IS_AFFECTED(ch,AFF_CALM)
|| ch->fighting != NULL
|| IS_AFFECTED(ch, AFF_CHARM)
|| !IS_AWAKE(ch)
|| ( IS_SET(ch->act, ACT_WIMPY) && IS_AWAKE(wch) )
|| !can_see( ch, wch )
|| ch->leader == wch
|| ch->master == wch
|| number_bits(1) == 0)
continue;
/*
* Ok we have a 'wch' player character and a 'ch' npc aggressor.
* Now make the aggressor fight a RANDOM pc victim in the room,
* giving each 'vch' an equal chance of selection.
*/
count = 0;
victim = NULL;
for ( vch = wch->in_room->people; vch != NULL; vch = vch_next )
{
vch_next = vch->next_in_room;
if ( !IS_NPC(vch)
&& vch->level < LEVEL_IMMORTAL
&& ch->level >= vch->level - 5
&& ( !IS_SET(ch->act, ACT_WIMPY) || !IS_AWAKE(vch) )
&& can_see( ch, vch ) )
{
if ( number_range( 0, count ) == 0 )
victim = vch;
count++;
}
}
if ( victim == NULL )
continue;
multi_hit( ch, victim, TYPE_UNDEFINED );
}
}
return;
}
/*
* Handle all kinds of updates.
* Called once per pulse from game loop.
* Random times to defeat tick-timing clients and players.
*/
void update_handler( bool forced )
{
static int pulse_area;
static int pulse_mobile;
static int pulse_violence;
static int pulse_point;
static int pulse_music;
static int pulse_quest;
static int pulse_tele;
static int pulse_affect;
static int pulse_auction;
if ( --pulse_auction <= 0 )
{
pulse_auction = ( 20 * PULSE_PER_SECOND );
auction_update( );
}
if ( --pulse_tele <= 0 )
{
pulse_tele = PULSE_TELEPORT;
tele_update ( );
}
if ( --pulse_quest <= 0 )
{
pulse_quest = PULSE_QUEST;
quest_update ( );
}
if ( --pulse_area <= 0 )
{
pulse_area = number_range(PULSE_AREA, 3 * PULSE_AREA / 2);
/* pulse_area = PULSE_AREA; */
/* number_range( PULSE_AREA / 2, 3 * PULSE_AREA / 2 ); */
area_update ( );
}
if ( --pulse_music <= 0 )
{
pulse_music = PULSE_MUSIC;
song_update();
// who_html_update();
// note_html_update();
}
if ( --pulse_mobile <= 0 )
{
pulse_mobile = PULSE_MOBILE;
mobile_update ( );
}
if ( --pulse_violence <= 0 )
{
pulse_violence = PULSE_VIOLENCE;
violence_update ( );
}
if (forced)
{
pulse_point = 0;
}
forced = FALSE;
if ( --pulse_point <= 0 )
{
wiznet("TICK!",NULL,NULL,WIZ_TICKS,0,0);
pulse_point = number_range(PULSE_TICK / 3 * 2, 3 * PULSE_TICK / 2);
/* pulse_point = PULSE_TICK; */
/* number_range( PULSE_TICK / 2, 3 * PULSE_TICK / 2 ); */
weather_update ( );
char_update ( );
obj_update ( );
check_reboot ( );
randomize_entrances ( ROOM_VNUM_CHAIN );
}
if ( --pulse_affect <= 0 )
{
wiznet("AFFECT_TICK!",NULL,NULL,WIZ_TICKS,0,0);
pulse_affect = PULSE_TICK;
affect_update ( );
room_affect_update ( );
}
arena_update ( );
aggr_update( );
tail_chain( );
return;
}
void quest_update(void)
{
CHAR_DATA *ch, *ch_next;
for ( ch = char_list; ch != NULL; ch = ch_next )
{
ch_next = ch->next;
if (IS_NPC(ch)) continue;
if (ch->nextquest > 0)
{
ch->nextquest--;
if (ch->nextquest == 0)
{
send_to_char("You may now quest again.\n\r",ch);
return;
}
}
else if (IS_SET(ch->act,PLR_QUESTOR))
{
if (--ch->countdown <= 0)
{
char buf [MAX_STRING_LENGTH], buf2 [MAX_STRING_LENGTH];
ch->nextquest = 10;
strcpy(buf, "You have run out of time for your quest!\n\r");
strcat(buf, "You may quest again in ");
sprintf(buf2, "%d", ch->nextquest);
strcat(buf, buf2);
strcat(buf, " minutes.\n\r");
send_to_char(buf, ch);
REMOVE_BIT(ch->act, PLR_QUESTOR);
ch->questgiver = NULL;
ch->countdown = 0;
ch->questmob = 0;
}
if (ch->countdown > 0 && ch->countdown < 6)
{
char buf [MAX_STRING_LENGTH];
strcpy(buf, "Better hurry, you're almost out of time ");
strcat(buf, "for your quest!\n\r");
send_to_char(buf, ch);
return;
}
}
}
return;
}
void tele_update ( void )
{ /*
CHAR_DATA *ch;
CHAR_DATA *ch_next;
ROOM_INDEX_DATA *pRoomIndex;
for (ch = char_list ; ch != NULL; ch = ch_next )
{
ch_next = ch->next;
if ( IS_SET(ch->in_room->room_flags, ROOM_TELEPORT ) )
{
do_look ( ch, "tele" );
if ( ch->in_room->tele_dest == 0 )
pRoomIndex = get_random_room (ch);
else
pRoomIndex = get_room_index(ch->in_room->tele_dest);
send_to_char ("You have been teleported!!!\n\r", ch);
act("$n vanishes!!!\n\r", ch, NULL, NULL, TO_ROOM);
char_from_room(ch);
char_to_room(ch, pRoomIndex);
act("$n slowly fades into existence.\n\r", ch, NULL, NULL,
TO_ROOM);
do_look(ch, "auto");
}
} */
}
void check_reboot( void )
{
char buf[MAX_STRING_LENGTH];
CHAR_DATA *vch;
DESCRIPTOR_DATA *d;
switch(reboot_counter)
{
case -1:
break;
case 0:
{
for ( d = descriptor_list; d; d = d->next )
{
if ( d->connected == CON_PLAYING )
{
vch = d->original ? d->original : d->character;
if (vch != NULL && d->connected == 0)
{
affect_strip(vch,gsn_plague);
affect_strip(vch,gsn_poison);
affect_strip(vch,gsn_blindness);
affect_strip(vch,gsn_sleep);
affect_strip(vch,gsn_curse);
affect_strip(vch,gsn_wither);
vch->hit = vch->max_hit;
vch->mana = vch->max_mana;
vch->move = vch->max_move;
save_char_obj(vch);
send_to_char("{^*** {#You have been restored{&! {^***{x\n\r",vch);
send_to_char("{^*** {#You are now saved. {^***{x\n\r",vch);
}
}
}
reboot_system("SYSTEM conducting {!Auto-Reboot{x. Please wait 10 seconds before Re-Connecting.");
return;
}
case 1:
case 2:
case 3:
case 4:
case 5:
case 10:
case 15:
sprintf(buf,"{@***** {!REBOOT{x IN %i TICKS {@*****{x\n\r",reboot_counter);
for (d = descriptor_list; d != NULL; d = d->next)
send_to_desc(buf,d);
default:
reboot_counter--;
break;
}
switch(shutdown_counter)
{
case -1:
break;
case 0:
{
for ( d = descriptor_list; d; d = d->next )
{
if ( d->connected == CON_PLAYING )
{
vch = d->original ? d->original : d->character;
if (vch != NULL && d->connected == 0)
{
affect_strip(vch,gsn_plague);
affect_strip(vch,gsn_poison);
affect_strip(vch,gsn_blindness);
affect_strip(vch,gsn_sleep);
affect_strip(vch,gsn_curse);
affect_strip(vch,gsn_wither);
vch->hit = vch->max_hit;
vch->mana = vch->max_mana;
vch->move = vch->max_move;
save_char_obj(vch);
send_to_char("{^*** {#You have been restored{&! {^***{x\n\r",vch);
send_to_char("{^*** {#You are now saved. {^***{x\n\r",vch);
}
}
}
shutdown_system();
return;
}
case 1:
case 2:
case 3:
case 4:
case 5:
case 10:
case 15:
sprintf(buf,"{@***** {!SHUTDOWN{x IN %i TICKS {@*****{x\n\r",shutdown_counter);
for (d = descriptor_list; d != NULL; d = d->next)
send_to_desc(buf,d);
default:
shutdown_counter--;
break;
}
}
/*
* Update Room affects
*/
void room_affect_update( void )
{
ROOM_INDEX_DATA *pRoom;
int iHash;
CHAR_DATA *ich;
for( iHash = 0; iHash < MAX_KEY_HASH; iHash++ )
{
for( pRoom = room_index_hash[iHash]; pRoom; pRoom = pRoom->next )
{
AFFECT_DATA *paf;
AFFECT_DATA *paf_next;
AFFECT_DATA af;
for ( paf = pRoom->affected; paf != NULL; paf = paf_next )
{
paf_next = paf->next;
if ( paf->duration > 0 )
{
paf->duration--;
if (number_range(0,4) == 0 && paf->level > 0)
paf->level--; /* spell strength fades with time */
}
else if ( paf->duration < 0 )
;
else
{
if ( paf_next == NULL
|| paf_next->type != paf->type
|| paf_next->duration > 0 )
{
if ( paf->type > 0 && skill_table[paf->type].msg_obj )
{
for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room )
{
act(skill_table[paf->type].msg_obj,ich,NULL,NULL,TO_CHAR);
}
}
affect_remove_room(pRoom, paf );
}
}
/* Special cases */
if(paf->bitvector == ROOM_AFF_FIRES)
{
for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room )
{
if (ich->invis_level > 0)
continue;
if(!str_cmp(clan_table[ich->clan].name,"torment"))
continue;
if (IS_NPC(ich) || !is_pkill(ich) || ich->level < paf->level-10)
continue;
if ( saves_spell( paf->level, ich, DAM_OTHER) )
continue;
fire_effect(ich,paf->level,300,TARGET_CHAR);
damage_old( ich, ich, 300, gsn_on_fire,DAM_FIRE,FALSE);
act( "$n burns in the Fires of Torment.", ich, NULL, NULL, TO_ROOM );
send_to_char( "You burn in the Fires of Torment.\n\r", ich );
}
}
if(paf->bitvector == ROOM_AFF_FAERIE)
{
for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room )
{
if ((ich->invis_level > 0) || (ich->ghost_level > 0))
continue;
if ( saves_spell( paf->level, ich, DAM_OTHER) )
continue;
affect_strip ( ich, gsn_invis );
affect_strip ( ich, gsn_mass_invis );
affect_strip ( ich, gsn_sneak );
REMOVE_BIT ( ich->affected_by, AFF_HIDE );
REMOVE_BIT ( ich->shielded_by, SHD_INVISIBLE );
REMOVE_BIT ( ich->affected_by, AFF_SNEAK );
affect_strip ( ich, gsn_forest_blend );
affect_strip ( ich, gsn_earthmeld );
act( "$n is revealed!", ich, NULL, NULL, TO_ROOM );
send_to_char( "You are revealed!\n\r", ich );
}
}
if(paf->bitvector == ROOM_AFF_SMOKE)
{
for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room )
{
if (ich->invis_level > 0)
continue;
if ( saves_spell( paf->level, ich, DAM_OTHER) )
continue;
if( !IS_AFFECTED(ich, AFF_BLIND))
{
af.where = TO_AFFECTS;
af.location = APPLY_HITROLL;
af.modifier = -4;
af.duration = 0;
af.type = gsn_smokebomb;
af.bitvector = AFF_BLIND;
affect_to_char( ich, &af );
act("$n is blinded by the {Dsmoke{x in the room!",ich,NULL,NULL,TO_ROOM);
send_to_char( "You are blinded by {Dsmoke{x!\n\r", ich );
}
}
}
}
}
}
}
bool is_warrior_class(int class)
{
if(class == CLASS_WARRIOR || class == CLASS_THIEF || class == CLASS_RANGER
|| class == CLASS_GLADIATOR || class == CLASS_MERCENARY ||
class == CLASS_STRIDER || class == CLASS_HIGHLANDER ||
class == CLASS_CRUSADER || class == CLASS_SWASHBUCKLER
|| class == CLASS_NINJA || class == CLASS_ASSASSIN ||
class == CLASS_BARD || class == CLASS_PALADIN ||
class == CLASS_HUNTER || class == CLASS_MONK)
return TRUE;
return FALSE;
}