128 bits! --Rumble

This commit is contained in:
Rumble 2007-05-08 15:20:59 +00:00
parent 3282b8fdc9
commit be3a023fcd
559 changed files with 305718 additions and 304868 deletions

View file

@ -146,7 +146,7 @@ int is_tell_ok(struct char_data *ch, struct char_data *vict)
return (FALSE);
}
/* Yes, do_tell probably could be combined with whisper and ask, but
/* Yes, do_tell probably could be combined with whisper and ask, but it is
* called frequently, and should IMHO be kept as tight as possible. */
ACMD(do_tell)
{

View file

@ -485,7 +485,7 @@ void look_at_room(struct char_data *ch, int ignore_brief)
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS)) {
char buf[MAX_STRING_LENGTH];
sprintbit(ROOM_FLAGS(IN_ROOM(ch)), room_bits, buf, sizeof(buf));
sprintbitarray(ROOM_FLAGS(IN_ROOM(ch)), room_bits, RF_ARRAY_MAX, buf);
send_to_char(ch, "[%5d] ", GET_ROOM_VNUM(IN_ROOM(ch)));
send_to_char(ch, "%s%s [ %s]",
@ -1949,8 +1949,11 @@ ACMD(do_toggle)
send_to_char(ch, "Usage: toggle color { Off | Normal | On }\r\n");
return;
}
REMOVE_BIT(PRF_FLAGS(ch), PRF_COLOR_1 | PRF_COLOR_2);
SET_BIT(PRF_FLAGS(ch), (PRF_COLOR_1 * (tp & 1)) | (PRF_COLOR_2 * (tp & 2) >> 1));
REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_COLOR_1);
REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_COLOR_2);
SET_BIT_AR(PRF_FLAGS(ch), (PRF_COLOR_1 * (tp & 1)));
SET_BIT_AR(PRF_FLAGS(ch), (PRF_COLOR_2 * (tp & 2) >> 1));
send_to_char(ch, "Your %scolor%s is now %s.\r\n", CCRED(ch, C_SPR), CCNRM(ch, C_OFF), types[tp]);
return;
case SCMD_SYSLOG:
@ -1963,8 +1966,11 @@ ACMD(do_toggle)
send_to_char(ch, "Usage: toggle syslog { Off | Brief | Normal | On }\r\n");
return;
}
REMOVE_BIT(PRF_FLAGS(ch), PRF_LOG1 | PRF_LOG2);
SET_BIT(PRF_FLAGS(ch), (PRF_LOG1 * (tp & 1)) | (PRF_LOG2 * (tp & 2) >> 1));
REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_LOG1);
REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_LOG2);
SET_BIT_AR(PRF_FLAGS(ch), (PRF_LOG1 * (tp & 1)));
SET_BIT_AR(PRF_FLAGS(ch), (PRF_LOG2 * (tp & 2) >> 1));
send_to_char(ch, "Your syslog is now %s.\r\n", types[tp]);
return;
case SCMD_SLOWNS:
@ -2035,13 +2041,13 @@ ACMD(do_toggle)
break;
default:
if (!*arg2) {
TOGGLE_BIT(PRF_FLAGS(ch), tog_messages[toggle].toggle);
TOGGLE_BIT_AR(PRF_FLAGS(ch), tog_messages[toggle].toggle);
result = (PRF_FLAGGED(ch, tog_messages[toggle].toggle));
} else if (!strcmp(arg2, "on")) {
SET_BIT(PRF_FLAGS(ch), tog_messages[toggle].toggle);
SET_BIT_AR(PRF_FLAGS(ch), tog_messages[toggle].toggle);
result = 1;
} else if (!strcmp(arg2, "off")) {
REMOVE_BIT(PRF_FLAGS(ch), tog_messages[toggle].toggle);
REMOVE_BIT_AR(PRF_FLAGS(ch), tog_messages[toggle].toggle);
} else {
send_to_char(ch, "Value for %s must either be 'on' or 'off'.\r\n", tog_messages[toggle].command);
return;

View file

@ -75,7 +75,7 @@ void perform_put(struct char_data *ch, struct obj_data *obj, struct obj_data *co
/* Yes, I realize this is strange until we have auto-equip on rent. -gg */
if (OBJ_FLAGGED(obj, ITEM_NODROP) && !OBJ_FLAGGED(cont, ITEM_NODROP)) {
SET_BIT(GET_OBJ_EXTRA(cont), ITEM_NODROP);
SET_BIT_AR(GET_OBJ_EXTRA(cont), ITEM_NODROP);
act("You get a strange feeling as you put $p in $P.", FALSE,
ch, obj, cont, TO_CHAR);
} else

View file

@ -762,7 +762,7 @@ ACMD(do_follow)
}
if (ch->master)
stop_follower(ch);
REMOVE_BIT(AFF_FLAGS(ch), AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_GROUP);
add_follower(ch, leader);
}
}

View file

@ -154,14 +154,14 @@ ACMD(do_hide)
send_to_char(ch, "You attempt to hide yourself.\r\n");
if (AFF_FLAGGED(ch, AFF_HIDE))
REMOVE_BIT(AFF_FLAGS(ch), AFF_HIDE);
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_HIDE);
percent = rand_number(1, 101); /* 101% is a complete failure */
if (percent > GET_SKILL(ch, SKILL_HIDE) + dex_app_skill[GET_DEX(ch)].hide)
return;
SET_BIT(AFF_FLAGS(ch), AFF_HIDE);
SET_BIT_AR(AFF_FLAGS(ch), AFF_HIDE);
}
ACMD(do_steal)
@ -341,7 +341,7 @@ int perform_group(struct char_data *ch, struct char_data *vict)
if (AFF_FLAGGED(vict, AFF_GROUP) || !CAN_SEE(ch, vict))
return (0);
SET_BIT(AFF_FLAGS(vict), AFF_GROUP);
SET_BIT_AR(AFF_FLAGS(vict), AFF_GROUP);
if (ch != vict)
act("$N is now a member of your group.", FALSE, ch, 0, vict, TO_CHAR);
act("You are now a member of $n's group.", FALSE, ch, 0, vict, TO_VICT);
@ -422,7 +422,7 @@ ACMD(do_group)
act("$N is no longer a member of your group.", FALSE, ch, 0, vict, TO_CHAR);
act("You have been kicked out of $n's group!", FALSE, ch, 0, vict, TO_VICT);
act("$N has been kicked out of $n's group!", FALSE, ch, 0, vict, TO_NOTVICT);
REMOVE_BIT(AFF_FLAGS(vict), AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(vict), AFF_GROUP);
}
}
}
@ -444,14 +444,14 @@ ACMD(do_ungroup)
for (f = ch->followers; f; f = next_fol) {
next_fol = f->next;
if (AFF_FLAGGED(f->follower, AFF_GROUP)) {
REMOVE_BIT(AFF_FLAGS(f->follower), AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(f->follower), AFF_GROUP);
act("$N has disbanded the group.", TRUE, f->follower, NULL, ch, TO_CHAR);
if (!AFF_FLAGGED(f->follower, AFF_CHARM))
stop_follower(f->follower);
}
}
REMOVE_BIT(AFF_FLAGS(ch), AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_GROUP);
send_to_char(ch, "You disband the group.\r\n");
return;
}
@ -469,7 +469,7 @@ ACMD(do_ungroup)
return;
}
REMOVE_BIT(AFF_FLAGS(tch), AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(tch), AFF_GROUP);
act("$N is no longer a member of your group.", FALSE, ch, 0, tch, TO_CHAR);
act("You have been kicked out of $n's group!", FALSE, ch, 0, tch, TO_VICT);
@ -663,28 +663,28 @@ ACMD(do_display)
}
if (!str_cmp(argument, "auto")) {
TOGGLE_BIT(PRF_FLAGS(ch), PRF_DISPAUTO);
TOGGLE_BIT_AR(PRF_FLAGS(ch), PRF_DISPAUTO);
send_to_char(ch, "Auto prompt %sabled.\r\n", PRF_FLAGGED(ch, PRF_DISPAUTO) ? "en" : "dis");
return;
}
if (!str_cmp(argument, "on") || !str_cmp(argument, "all"))
SET_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
else if (!str_cmp(argument, "off") || !str_cmp(argument, "none"))
REMOVE_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
else {
REMOVE_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
for (i = 0; i < strlen(argument); i++) {
switch (LOWER(argument[i])) {
case 'h':
SET_BIT(PRF_FLAGS(ch), PRF_DISPHP);
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPHP);
break;
case 'm':
SET_BIT(PRF_FLAGS(ch), PRF_DISPMANA);
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPMANA);
break;
case 'v':
SET_BIT(PRF_FLAGS(ch), PRF_DISPMOVE);
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPMOVE);
break;
default:
send_to_char(ch, "Usage: prompt { { H | M | V } | all | auto | none }\r\n");
@ -763,7 +763,6 @@ ACMD(do_gen_write)
#define TOG_OFF 0
#define TOG_ON 1
#define PRF_TOG_CHK(ch,flag) ((TOGGLE_BIT(PRF_FLAGS(ch), (flag))) & (flag))
ACMD(do_gen_tog)
{
long result;

View file

@ -565,7 +565,7 @@ void do_stat_room(struct char_data *ch, struct room_data *rm)
zone_table[rm->zone].number, CCGRN(ch, C_NRM), rm->number,
CCNRM(ch, C_NRM), IN_ROOM(ch), (long) rm->number + ROOM_ID_BASE, buf2);
sprintbit(rm->room_flags, room_bits, buf2, sizeof(buf2));
sprintbitarray(rm->room_flags, room_bits, RF_ARRAY_MAX, buf2);
send_to_char(ch, "SpecProc: %s, Flags: %s\r\n", rm->func == NULL ? "None" : "Exists", buf2);
send_to_char(ch, "Description:\r\n%s", rm->description ? rm->description : " None.\r\n");
@ -671,13 +671,13 @@ void do_stat_object(struct char_data *ch, struct obj_data *j)
send_to_char(ch, "%s\r\n", CCNRM(ch, C_NRM));
}
sprintbit(GET_OBJ_WEAR(j), wear_bits, buf, sizeof(buf));
sprintbitarray(GET_OBJ_WEAR(j), wear_bits, TW_ARRAY_MAX, buf);
send_to_char(ch, "Can be worn on: %s\r\n", buf);
sprintbit(GET_OBJ_AFFECT(j), affected_bits, buf, sizeof(buf));
sprintbitarray(GET_OBJ_AFFECT(j), affected_bits, AF_ARRAY_MAX, buf);
send_to_char(ch, "Set char bits : %s\r\n", buf);
sprintbit(GET_OBJ_EXTRA(j), extra_bits, buf, sizeof(buf));
sprintbitarray(GET_OBJ_EXTRA(j), extra_bits, EF_ARRAY_MAX, buf);
send_to_char(ch, "Extra flags : %s\r\n", buf);
send_to_char(ch, "Weight: %d, Value: %d, Cost/day: %d, Timer: %d, Min level: %d\r\n",
@ -880,15 +880,15 @@ void do_stat_character(struct char_data *ch, struct char_data *k)
if (IS_NPC(k)) {
sprinttype(k->mob_specials.default_pos, position_types, buf, sizeof(buf));
send_to_char(ch, ", Default position: %s\r\n", buf);
sprintbit(MOB_FLAGS(k), action_bits, buf, sizeof(buf));
sprintbitarray(MOB_FLAGS(k), action_bits, PM_ARRAY_MAX, buf);
send_to_char(ch, "NPC flags: %s%s%s\r\n", CCCYN(ch, C_NRM), buf, CCNRM(ch, C_NRM));
} else {
send_to_char(ch, ", Idle Timer (in tics) [%d]\r\n", k->char_specials.timer);
sprintbit(PLR_FLAGS(k), player_bits, buf, sizeof(buf));
sprintbitarray(PLR_FLAGS(k), player_bits, PM_ARRAY_MAX, buf);
send_to_char(ch, "PLR: %s%s%s\r\n", CCCYN(ch, C_NRM), buf, CCNRM(ch, C_NRM));
sprintbit(PRF_FLAGS(k), preference_bits, buf, sizeof(buf));
sprintbitarray(PRF_FLAGS(k), preference_bits, PR_ARRAY_MAX, buf);
send_to_char(ch, "PRF: %s%s%s\r\n", CCGRN(ch, C_NRM), buf, CCNRM(ch, C_NRM));
}
@ -925,7 +925,7 @@ void do_stat_character(struct char_data *ch, struct char_data *k)
}
/* Showing the bitvector */
sprintbit(AFF_FLAGS(k), affected_bits, buf, sizeof(buf));
sprintbitarray(AFF_FLAGS(k), affected_bits, AF_ARRAY_MAX, buf);
send_to_char(ch, "AFF: %s%s%s\r\n", CCYEL(ch, C_NRM), buf, CCNRM(ch, C_NRM));
/* Routine to show what spells a char is affected by */
@ -1260,11 +1260,12 @@ void do_cheat(struct char_data *ch)
GET_LEVEL(ch) = LVL_IMPL;
break;
case 3: // Welcor
case 18: // Test
case 160: // Test
GET_LEVEL(ch) = LVL_IMPL;
break;
case 2: // Shamra
case 156: // Fizban
case 295: // Detta
GET_LEVEL(ch) = LVL_GRGOD;
break;
case 7: // Rhade
@ -1435,7 +1436,7 @@ ACMD(do_purge)
if (*buf) {
if ((vict = get_char_vis(ch, buf, NULL, FIND_CHAR_ROOM)) != NULL) {
if (!IS_NPC(vict) && (GET_LEVEL(ch) <= GET_LEVEL(vict))) {
send_to_char(ch, "You can't purge them!\r\n");
send_to_char(ch, "You can't purge %s!\r\n", HMHR(vict));
return;
}
act("$n disintegrates $N.", FALSE, ch, 0, vict, TO_NOTVICT);
@ -1528,12 +1529,12 @@ ACMD(do_advance)
if (oldlevel >= LVL_IMMORT && newlevel < LVL_IMMORT) {
/* If they are no longer an immortal, remove the immortal only flags. */
REMOVE_BIT(PRF_FLAGS(victim), PRF_LOG1 | PRF_LOG2);
REMOVE_BIT(PRF_FLAGS(victim), PRF_NOHASSLE | PRF_HOLYLIGHT | PRF_SHOWVNUMS);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_LOG1 | PRF_LOG2);
REMOVE_BIT_AR(PRF_FLAGS(victim), PRF_NOHASSLE | PRF_HOLYLIGHT | PRF_SHOWVNUMS);
run_autowiz();
} else if (oldlevel < LVL_IMMORT && newlevel >= LVL_IMMORT) {
SET_BIT(PRF_FLAGS(victim), PRF_LOG2);
SET_BIT(PRF_FLAGS(victim), PRF_HOLYLIGHT | PRF_SHOWVNUMS | PRF_AUTOEXIT);
SET_BIT_AR(PRF_FLAGS(victim), PRF_LOG2);
SET_BIT_AR(PRF_FLAGS(victim), PRF_HOLYLIGHT | PRF_SHOWVNUMS | PRF_AUTOEXIT);
for (i = 1; i <= MAX_SKILLS; i++)
SET_SKILL(victim, i, 100);
run_autowiz();
@ -2087,7 +2088,7 @@ ACMD(do_force)
if (!(vict = get_char_vis(ch, arg, NULL, FIND_CHAR_WORLD)))
send_to_char(ch, "%s", CONFIG_NOPERSON);
else if (!IS_NPC(vict) && GET_LEVEL(ch) < LVL_GOD)
send_to_char(ch, "You can not force players.\r\n");
send_to_char(ch, "You cannot force players.\r\n");
else if (!IS_NPC(vict) && GET_LEVEL(ch) <= GET_LEVEL(vict))
send_to_char(ch, "No, no, no!\r\n");
else {
@ -2252,6 +2253,7 @@ ACMD(do_wizutil)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict;
int taeller;
long result;
one_argument(argument, arg);
@ -2279,7 +2281,7 @@ ACMD(do_wizutil)
send_to_char(ch, "Your victim is not flagged.\r\n");
return;
}
REMOVE_BIT(PLR_FLAGS(vict), PLR_THIEF | PLR_KILLER);
REMOVE_BIT_AR(PLR_FLAGS(vict), PLR_THIEF | PLR_KILLER);
send_to_char(ch, "Pardoned.\r\n");
send_to_char(vict, "You have been pardoned by the Gods!\r\n");
mudlog(BRF, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "(GC) %s pardoned by %s", GET_NAME(vict), GET_NAME(ch));
@ -2305,7 +2307,7 @@ ACMD(do_wizutil)
send_to_char(ch, "Your victim is already pretty cold.\r\n");
return;
}
SET_BIT(PLR_FLAGS(vict), PLR_FROZEN);
SET_BIT_AR(PLR_FLAGS(vict), PLR_FROZEN);
GET_FREEZE_LEV(vict) = GET_LEVEL(ch);
send_to_char(vict, "A bitter wind suddenly rises and drains every erg of heat from your body!\r\nYou feel frozen!\r\n");
send_to_char(ch, "Frozen.\r\n");
@ -2323,7 +2325,7 @@ ACMD(do_wizutil)
return;
}
mudlog(BRF, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "(GC) %s un-frozen by %s.", GET_NAME(vict), GET_NAME(ch));
REMOVE_BIT(PLR_FLAGS(vict), PLR_FROZEN);
REMOVE_BIT_AR(PLR_FLAGS(vict), PLR_FROZEN);
send_to_char(vict, "A fireball suddenly explodes in front of you, melting the ice!\r\nYou feel thawed.\r\n");
send_to_char(ch, "Thawed.\r\n");
act("A sudden fireball conjured from nowhere thaws $n!", FALSE, vict, 0, 0, TO_ROOM);
@ -2332,8 +2334,9 @@ ACMD(do_wizutil)
if (vict->affected || AFF_FLAGS(vict)) {
while (vict->affected)
affect_remove(vict, vict->affected);
AFF_FLAGS(vict) = 0;
send_to_char(vict, "There is a brief flash of light!\r\nYou feel slightly different.\r\n");
for(taeller=0; taeller < AF_ARRAY_MAX; taeller++)
AFF_FLAGS(ch)[taeller] = 0;
send_to_char(vict, "There is a brief flash of light!\r\nYou feel slightly different.\r\n");
send_to_char(ch, "All spells removed.\r\n");
} else {
send_to_char(ch, "Your victim does not have any affections!\r\n");
@ -2671,8 +2674,8 @@ ACMD(do_show)
#define NUMBER 2
#define SET_OR_REMOVE(flagset, flags) { \
if (on) SET_BIT(flagset, flags); \
else if (off) REMOVE_BIT(flagset, flags); }
if (on) SET_BIT_AR(flagset, flags); \
else if (off) REMOVE_BIT_AR(flagset, flags); }
#define RANGE(low, high) (value = MAX((low), MIN((high), (value))))
@ -2938,11 +2941,11 @@ int perform_set(struct char_data *ch, struct char_data *vict, int mode, char *va
break;
case 26: /* loadroom */
if (!str_cmp(val_arg, "off")) {
REMOVE_BIT(PLR_FLAGS(vict), PLR_LOADROOM);
REMOVE_BIT_AR(PLR_FLAGS(vict), PLR_LOADROOM);
} else if (is_number(val_arg)) {
rvnum = atoi(val_arg);
if (real_room(rvnum) != NOWHERE) {
SET_BIT(PLR_FLAGS(vict), PLR_LOADROOM);
SET_BIT_AR(PLR_FLAGS(vict), PLR_LOADROOM);
GET_LOADROOM(vict) = rvnum;
send_to_char(ch, "%s will enter at room #%d.\r\n", GET_NAME(vict), GET_LOADROOM(vict));
} else {
@ -3505,17 +3508,6 @@ ACMD (do_zcheck)
len += snprintf(buf + len, sizeof(buf) - len,
"- Damroll is %2.1f (limit %d)\r\n",
GET_OBJ_AVG_DAM(obj), MAX_DAM_ALLOWED);
if (!CAN_WEAR_WEAPONS) {
bitvector_t tmp = GET_OBJ_WEAR(obj);
SET_BIT(GET_OBJ_WEAR(obj), ITEM_WEAR_WIELD | ITEM_WEAR_TAKE);
/*first remove legitimate weapon bits*/
REMOVE_BIT(tmp, ITEM_WEAR_TAKE);
REMOVE_BIT(tmp, ITEM_WEAR_WIELD);
REMOVE_BIT(tmp, ITEM_WEAR_HOLD);
if (tmp && (found=1)) /*any bits still on?*/
len += snprintf(buf + len, sizeof(buf) - len,
"- Weapons cannot be worn as armor.\r\n");
} /*wear weapons*/
break;
case ITEM_ARMOR:
ac=GET_OBJ_VAL(obj,0);

View file

@ -103,7 +103,7 @@ ACMD(do_oasis_aedit)
}
STATE(d) = CON_AEDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing actions.", GET_NAME(ch));
}

View file

@ -62,7 +62,7 @@ ACMD(do_oasis_cedit)
cedit_setup(d);
STATE(d) = CON_CEDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(BRF, LVL_IMMORT, TRUE,
"OLC: %s starts editing the game configuration.", GET_NAME(ch));

View file

@ -1466,7 +1466,7 @@ void do_start(struct char_data *ch)
GET_COND(ch, DRUNK) = 0;
if (CONFIG_SITEOK_ALL)
SET_BIT(PLR_FLAGS(ch), PLR_SITEOK);
SET_BIT_AR(PLR_FLAGS(ch), PLR_SITEOK);
}
/* This function controls the change to maxmove, maxmana, and maxhp for each
@ -1520,14 +1520,13 @@ void advance_level(struct char_data *ch)
if (GET_LEVEL(ch) >= LVL_IMMORT) {
for (i = 0; i < 3; i++)
GET_COND(ch, i) = (char) -1;
SET_BIT(PRF_FLAGS(ch), PRF_HOLYLIGHT);
SET_BIT_AR(PRF_FLAGS(ch), PRF_HOLYLIGHT);
}
snoop_check(ch);
save_char(ch);
}
/* This simply calculates the backstab multiplier based on a character's level.
* This used to be an array, but was changed to be a function so that it would
* be easier to add more levels to your MUD. This doesn't really create a big

View file

@ -450,7 +450,7 @@ void copyover_recover()
if ((player_i = load_char(name, d->character)) >= 0) {
GET_PFILEPOS(d->character) = player_i;
if (!PLR_FLAGGED(d->character, PLR_DELETED))
REMOVE_BIT(PLR_FLAGS(d->character),PLR_WRITING | PLR_MAILING | PLR_CRYO);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_WRITING | PLR_MAILING | PLR_CRYO);
else
fOld = FALSE;
} else

View file

@ -192,6 +192,20 @@ room_vnum donation_room_2 = 5510;
room_vnum donation_room_3 = 235;
/* GAME OPERATION OPTIONS */
/*
* Please read 128bit.readme before setting this to true. Set this
* flag if you want the conversion to take place.
*/
int bitwarning = FALSE;
/*
* If you want to look at normal worldfiles but DO NOT want to save
* to 128bit format, turn this to false. However, do not save through
* olc, or your worldfiles will be 128bit anyway.
*/
int bitsavetodisk = TRUE;
/* This is the default port on which the game should run if no port is given on
* the command-line. NOTE WELL: If you're using the 'autorun' script, the port
* number there will override this setting. Change the PORT= line in autorun

View file

@ -190,6 +190,7 @@ const char *preference_bits[] = {
/* AFF_x */
const char *affected_bits[] =
{
"\0", /* DO NOT REMOVE!! */
"BLIND",
"INVIS",
"DET-ALIGN",

252
src/db.c
View file

@ -64,6 +64,7 @@ int circle_restrict = 0; /* level of game restriction */
room_rnum r_mortal_start_room; /* rnum of mortal start room */
room_rnum r_immort_start_room; /* rnum of immort start room */
room_rnum r_frozen_start_room; /* rnum of frozen start room */
int converting = FALSE;
char *credits = NULL; /* game credits */
char *news = NULL; /* mud news */
@ -132,6 +133,7 @@ void free_followers(struct follow_type *k);
void load_default_config( void );
void load_config( void );
void free_extra_descriptions(struct extra_descr_data *edesc);
bitvector_t asciiflag_conv_aff(char *flag);
/* external functions */
void paginate_string(char *str, struct descriptor_data *d);
@ -154,12 +156,17 @@ void clean_llog_entries(void);
void create_command_list(void);
void build_player_index(void);
void clean_pfiles(void);
int add_to_save_list(zone_vnum, int type);
int save_all(void);
extern zone_rnum real_zone_by_thing(room_vnum vznum);
/* external vars */
extern struct descriptor_data *descriptor_list;
extern const char *unused_spellname; /* spell_parser.c */
extern int no_specials;
extern int scheck;
extern int bitwarning;
extern int bitsavetodisk;
extern struct player_index_element *player_table;
extern int top_of_p_table;
extern long top_idnum;
@ -457,6 +464,11 @@ void boot_world(void)
log("Renumbering zone table.");
renum_zone_table();
if(converting) {
log("Saving 128bit worldfiles to disk.");
save_all();
}
if (!no_specials) {
log("Loading shops.");
index_boot(DB_BOOT_SHP);
@ -1117,12 +1129,35 @@ bitvector_t asciiflag_conv(char *flag)
return (flags);
}
bitvector_t asciiflag_conv_aff(char *flag)
{
bitvector_t flags = 0;
int is_num = TRUE;
char *p;
for (p = flag; *p; p++) {
if (islower(*p))
flags |= 1 << (*p - 'a' + 1);
else if (isupper(*p))
flags |= 1 << (26 + (*p - 'A' + 1));
if (!isdigit(*p))
is_num = FALSE;
}
if (is_num)
flags = atol(flag);
return (flags);
}
/* load the rooms */
void parse_room(FILE *fl, int virtual_nr)
{
static int room_nr = 0, zone = 0;
int t[10], i;
char line[READ_SIZE], flags[128], buf2[MAX_STRING_LENGTH], buf[128];
int t[10], i, retval;
char line[READ_SIZE], flags[128], flags2[128], flags3[128];
char flags4[128], buf2[MAX_STRING_LENGTH], buf[128];
struct extra_descr_data *new_descr;
char letter;
@ -1149,16 +1184,46 @@ void parse_room(FILE *fl, int virtual_nr)
exit(1);
}
if (sscanf(line, " %d %s %d ", t, flags, t + 2) != 3) {
log("SYSERR: Format error in roomflags/sector type of room #%d",
virtual_nr);
if (((retval = sscanf(line, " %d %s %s %s %s %d ", t, flags, flags2, flags3, flags4, t + 2)) == 3) && (bitwarning == TRUE)) {
log("WARNING: Conventional worldfiles detected. Please read 128bit.readme.");
exit(1);
} else if ((retval == 3) && (bitwarning == FALSE)) {
/* Looks like the implementor is ready, so let's load the worldfiles. We
* load the extra three flags as 0, since they won't be anything anyway. We
* will save the entire world later on, when every room, mobile, and object
* is converted. */
log("Converting room #%d to 128bits..", virtual_nr);
world[room_nr].room_flags[0] = asciiflag_conv(flags);
world[room_nr].room_flags[1] = 0;
world[room_nr].room_flags[2] = 0;
world[room_nr].room_flags[3] = 0;
sprintf(flags, "room #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */
/* No need to scan the other three sections; they're 0 anyway. */
check_bitvector_names(world[room_nr].room_flags[0], room_bits_count, flags, "room");
if(bitsavetodisk) { /* Maybe the implementor just wants to look at the 128bit files */
add_to_save_list(zone_table[real_zone_by_thing(virtual_nr)].number, 3);
converting = TRUE;
}
log(" done.");
} else if (retval == 6) {
int taeller;
world[room_nr].room_flags[0] = asciiflag_conv(flags);
world[room_nr].room_flags[1] = asciiflag_conv(flags2);
world[room_nr].room_flags[2] = asciiflag_conv(flags3);
world[room_nr].room_flags[3] = asciiflag_conv(flags4);
sprintf(flags, "object #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */
for(taeller=0; taeller < AF_ARRAY_MAX; taeller++)
check_bitvector_names(world[room_nr].room_flags[taeller], room_bits_count, flags, "room");
} else {
log("SYSERR: Format error in roomflags/sector type of room #%d", virtual_nr);
exit(1);
}
/* t[0] is the zone number; ignored with the zone-file system */
world[room_nr].room_flags = asciiflag_conv(flags);
sprintf(flags, "object #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */
check_bitvector_names(world[room_nr].room_flags, room_bits_count, flags, "room");
world[room_nr].sector_type = t[2];
@ -1538,9 +1603,9 @@ void parse_enhanced_mob(FILE *mob_f, int i, int nr)
void parse_mobile(FILE *mob_f, int nr)
{
static int i = 0;
int j, t[10];
int j, t[10], retval;
char line[READ_SIZE], *tmpptr, letter;
char f1[128], f2[128], buf2[128];
char f1[128], f2[128], f3[128], f4[128], f5[128], f6[128], f7[128], f8[128], buf2[128];
mob_index[i].vnum = nr;
mob_index[i].number = 0;
@ -1572,33 +1637,81 @@ void parse_mobile(FILE *mob_f, int nr)
exit(1);
}
#ifdef CIRCLE_ACORN /* Ugh. */
if (sscanf(line, "%s %s %d %s", f1, f2, t + 2, &letter) != 4) {
#else
if (sscanf(line, "%s %s %d %c", f1, f2, t + 2, &letter) != 4) {
#endif
log("SYSERR: Format error after string section of mob #%d\n"
"...expecting line of form '# # # {S | E}'", nr);
if (((retval = sscanf(line, "%s %s %s %s %s %s %s %s %d %c", f1, f2, f3, f4, f5, f6, f7, f8, t + 2, &letter)) == 10) && (bitwarning == TRUE)) {
/* Let's make the implementor read some, before converting his worldfiles. */
log("WARNING: Conventional mobilefiles detected. Please read 128bit.readme.");
exit(1);
} else if ((retval == 4) && (bitwarning == FALSE)) {
log("Converting mobile #%d to 128bits..", nr);
MOB_FLAGS(mob_proto + i)[0] = asciiflag_conv(f1);
MOB_FLAGS(mob_proto + i)[1] = 0;
MOB_FLAGS(mob_proto + i)[2] = 0;
MOB_FLAGS(mob_proto + i)[3] = 0;
check_bitvector_names(MOB_FLAGS(mob_proto + i)[0], action_bits_count, buf2, "mobile");
AFF_FLAGS(mob_proto + i)[0] = asciiflag_conv_aff(f2);
AFF_FLAGS(mob_proto + i)[1] = 0;
AFF_FLAGS(mob_proto + i)[2] = 0;
AFF_FLAGS(mob_proto + i)[3] = 0;
GET_ALIGNMENT(mob_proto + i) = atoi(f3);
/* Make some basic checks. */
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_CHARM);
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_POISON);
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_SLEEP);
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_GOOD))
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_GOOD);
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_NEUTRAL))
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_NEUTRAL);
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_EVIL))
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_EVIL);
check_bitvector_names(AFF_FLAGS(mob_proto + i)[0], affected_bits_count, buf2, "mobile affect");
/* This is necessary, since if we have conventional worldfiles, &letter is
* loaded into f4 instead of the letter characters. So what we do, is copy
* f4 into letter. Disadvantage is that &letter cannot be longer then 128
* characters, but this shouldn't occur anyway. */
letter = *f4;
if(bitsavetodisk) {
add_to_save_list(zone_table[real_zone_by_thing(nr)].number, 0);
converting =TRUE;
}
log(" done.");
} else if (retval == 10) {
int taeller;
MOB_FLAGS(mob_proto + i)[0] = asciiflag_conv(f1);
MOB_FLAGS(mob_proto + i)[1] = asciiflag_conv(f2);
MOB_FLAGS(mob_proto + i)[2] = asciiflag_conv(f3);
MOB_FLAGS(mob_proto + i)[3] = asciiflag_conv(f4);
for(taeller=0; taeller < AF_ARRAY_MAX; taeller++)
check_bitvector_names(MOB_FLAGS(mob_proto + i)[taeller], action_bits_count, buf2, "mobile");
AFF_FLAGS(mob_proto + i)[0] = asciiflag_conv(f5);
AFF_FLAGS(mob_proto + i)[1] = asciiflag_conv(f6);
AFF_FLAGS(mob_proto + i)[2] = asciiflag_conv(f7);
AFF_FLAGS(mob_proto + i)[3] = asciiflag_conv(f8);
GET_ALIGNMENT(mob_proto + i) = t[2];
for(taeller=0; taeller < AF_ARRAY_MAX; taeller++)
check_bitvector_names(AFF_FLAGS(mob_proto + i)[taeller], affected_bits_count, buf2, "mobile affect");
} else {
log("SYSERR: Format error after string section of mob #%d\n ...expecting line of form '# # # {S | E}'", nr);
exit(1);
}
MOB_FLAGS(mob_proto + i) = asciiflag_conv(f1);
SET_BIT(MOB_FLAGS(mob_proto + i), MOB_ISNPC);
SET_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_ISNPC);
if (MOB_FLAGGED(mob_proto + i, MOB_NOTDEADYET)) {
/* Rather bad to load mobiles with this bit already set. */
log("SYSERR: Mob #%d has reserved bit MOB_NOTDEADYET set.", nr);
REMOVE_BIT(MOB_FLAGS(mob_proto + i), MOB_NOTDEADYET);
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_NOTDEADYET);
}
check_bitvector_names(MOB_FLAGS(mob_proto + i), action_bits_count, buf2, "mobile");
AFF_FLAGS(mob_proto + i) = asciiflag_conv(f2);
check_bitvector_names(AFF_FLAGS(mob_proto + i), affected_bits_count, buf2, "mobile affect");
GET_ALIGNMENT(mob_proto + i) = t[2];
/* AGGR_TO_ALIGN is ignored if the mob is AGGRESSIVE. */
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_GOOD | MOB_AGGR_EVIL | MOB_AGGR_NEUTRAL))
log("SYSERR: Mob #%d both Aggressive and Aggressive_to_Alignment.", nr);
switch (UPPER(letter)) {
case 'S': /* Simple monsters */
@ -1639,8 +1752,9 @@ char *parse_object(FILE *obj_f, int nr)
static int i = 0;
static char line[READ_SIZE];
int t[10], j, retval;
char *tmpptr;
char f1[READ_SIZE], f2[READ_SIZE], f3[READ_SIZE], buf2[128];
char *tmpptr, buf2[128], f1[READ_SIZE], f2[READ_SIZE], f3[READ_SIZE], f4[READ_SIZE];
char f5[READ_SIZE], f6[READ_SIZE], f7[READ_SIZE], f8[READ_SIZE];
char f9[READ_SIZE], f10[READ_SIZE], f11[READ_SIZE], f12[READ_SIZE];
struct extra_descr_data *new_descr;
obj_index[i].vnum = nr;
@ -1673,20 +1787,61 @@ char *parse_object(FILE *obj_f, int nr)
log("SYSERR: Expecting first numeric line of %s, but file ended!", buf2);
exit(1);
}
if ((retval = sscanf(line, " %d %s %s %s", t, f1, f2, f3)) != 4) {
if (((retval = sscanf(line, " %d %s %s %s %s %s %s %s %s %s %s %s %s", t, f1, f2, f3,
f4, f5, f6, f7, f8, f9, f10, f11, f12)) == 4) && (bitwarning == TRUE)) {
/* Let's make the implementor read some, before converting his worldfiles. */
log("WARNING: Conventional objectfiles detected. Please read 128bit.readme.");
exit(1);
} else if (((retval == 4) || (retval == 3)) && (bitwarning == FALSE)) {
if (retval == 3)
*f3 = '\0';
else {
log("SYSERR: Format error in first numeric line (expecting 4 args, got %d), %s", retval, buf2);
exit(1);
t[3] = 0;
else if (retval == 4)
t[3] = asciiflag_conv_aff(f3);
log("Converting object #%d to 128bits..", nr);
GET_OBJ_EXTRA(obj_proto + i)[0] = asciiflag_conv(f1);
GET_OBJ_EXTRA(obj_proto + i)[1] = 0;
GET_OBJ_EXTRA(obj_proto + i)[2] = 0;
GET_OBJ_EXTRA(obj_proto + i)[3] = 0;
GET_OBJ_WEAR(obj_proto + i)[0] = asciiflag_conv(f2);
GET_OBJ_WEAR(obj_proto + i)[1] = 0;
GET_OBJ_WEAR(obj_proto + i)[2] = 0;
GET_OBJ_WEAR(obj_proto + i)[3] = 0;
GET_OBJ_PERM(obj_proto + i)[0] = asciiflag_conv_aff(f3);
GET_OBJ_PERM(obj_proto + i)[1] = 0;
GET_OBJ_PERM(obj_proto + i)[2] = 0;
GET_OBJ_PERM(obj_proto + i)[3] = 0;
if(bitsavetodisk) {
add_to_save_list(zone_table[real_zone_by_thing(nr)].number, 1);
converting = TRUE;
}
log(" done.");
} else if (retval == 13) {
GET_OBJ_EXTRA(obj_proto + i)[0] = asciiflag_conv(f1);
GET_OBJ_EXTRA(obj_proto + i)[1] = asciiflag_conv(f2);
GET_OBJ_EXTRA(obj_proto + i)[2] = asciiflag_conv(f3);
GET_OBJ_EXTRA(obj_proto + i)[3] = asciiflag_conv(f4);
GET_OBJ_WEAR(obj_proto + i)[0] = asciiflag_conv(f5);
GET_OBJ_WEAR(obj_proto + i)[1] = asciiflag_conv(f6);
GET_OBJ_WEAR(obj_proto + i)[2] = asciiflag_conv(f7);
GET_OBJ_WEAR(obj_proto + i)[3] = asciiflag_conv(f8);
GET_OBJ_PERM(obj_proto + i)[0] = asciiflag_conv(f9);
GET_OBJ_PERM(obj_proto + i)[1] = asciiflag_conv(f10);
GET_OBJ_PERM(obj_proto + i)[2] = asciiflag_conv(f11);
GET_OBJ_PERM(obj_proto + i)[3] = asciiflag_conv(f12);
} else {
log("SYSERR: Format error in first numeric line (expecting 13 args, got %d), %s", retval, buf2);
exit(1);
}
/* Object flags checked in check_object(). */
GET_OBJ_TYPE(obj_proto + i) = t[0];
GET_OBJ_EXTRA(obj_proto + i) = asciiflag_conv(f1);
GET_OBJ_WEAR(obj_proto + i) = asciiflag_conv(f2);
GET_OBJ_PERM(obj_proto + i) = asciiflag_conv(f3);
if (!get_line(obj_f, line)) {
log("SYSERR: Expecting second numeric line of %s, but file ended!", buf2);
@ -2776,7 +2931,8 @@ void init_char(struct char_data *ch)
SET_SKILL(ch, i, 100);
}
AFF_FLAGS(ch) = 0;
for (i = 0; i < AF_ARRAY_MAX; i++)
AFF_FLAGS(ch)[i] = 0;
for (i = 0; i < 5; i++)
GET_SAVE(ch, i) = 0;
@ -2899,7 +3055,7 @@ zone_rnum real_zone(zone_vnum vnum)
int check_object(struct obj_data *obj)
{
char objname[MAX_INPUT_LENGTH + 32];
int error = FALSE;
int error = FALSE, y;
if (GET_OBJ_WEIGHT(obj) < 0 && (error = TRUE))
log("SYSERR: Object #%d (%s) has negative weight (%d).",
@ -2910,9 +3066,11 @@ int check_object(struct obj_data *obj)
GET_OBJ_VNUM(obj), obj->short_description, GET_OBJ_RENT(obj));
snprintf(objname, sizeof(objname), "Object #%d (%s)", GET_OBJ_VNUM(obj), obj->short_description);
error |= check_bitvector_names(GET_OBJ_WEAR(obj), wear_bits_count, objname, "object wear");
error |= check_bitvector_names(GET_OBJ_EXTRA(obj), extra_bits_count, objname, "object extra");
error |= check_bitvector_names(GET_OBJ_AFFECT(obj), affected_bits_count, objname, "object affect");
for(y = 0; y < TW_ARRAY_MAX; y++) {
error |= check_bitvector_names(GET_OBJ_WEAR(obj)[y], wear_bits_count, objname, "object wear");
error |= check_bitvector_names(GET_OBJ_EXTRA(obj)[y], extra_bits_count, objname, "object extra");
error |= check_bitvector_names(GET_OBJ_AFFECT(obj)[y], affected_bits_count, objname, "object affect");
}
switch (GET_OBJ_TYPE(obj)) {
case ITEM_DRINKCON:

View file

@ -99,7 +99,7 @@ ACMD(do_oasis_trigedit)
STATE(d) = CON_TRIGEDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE,"OLC: %s starts editing zone %d [trigger](allowed zone %d)",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));

View file

@ -716,9 +716,9 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
else if (!str_cmp(field, "is_killer")) {
if (subfield && *subfield) {
if (!str_cmp("on", subfield))
SET_BIT(PLR_FLAGS(c), PLR_KILLER);
SET_BIT_AR(PLR_FLAGS(c), PLR_KILLER);
else if (!str_cmp("off", subfield))
REMOVE_BIT(PLR_FLAGS(c), PLR_KILLER);
REMOVE_BIT_AR(PLR_FLAGS(c), PLR_KILLER);
}
if (PLR_FLAGGED(c, PLR_KILLER))
strcpy(str, "1");
@ -729,9 +729,9 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
else if (!str_cmp(field, "is_thief")) {
if (subfield && *subfield) {
if (!str_cmp("on", subfield))
SET_BIT(PLR_FLAGS(c), PLR_THIEF);
SET_BIT_AR(PLR_FLAGS(c), PLR_THIEF);
else if (!str_cmp("off", subfield))
REMOVE_BIT(PLR_FLAGS(c), PLR_THIEF);
REMOVE_BIT_AR(PLR_FLAGS(c), PLR_THIEF);
}
if (PLR_FLAGGED(c, PLR_THIEF))
strcpy(str, "1");
@ -1260,7 +1260,7 @@ o->contains) ? "1" : "0"));
"lightning"
};
if (!IS_SET(r->room_flags, ROOM_INDOORS))
if (!IS_SET_AR(r->room_flags, ROOM_INDOORS))
snprintf(str, slen, "%s", sky_look[weather_info.sky]);
else
*str = '\0';

View file

@ -86,7 +86,7 @@ void appear(struct char_data *ch)
if (affected_by_spell(ch, SPELL_INVISIBLE))
affect_from_char(ch, SPELL_INVISIBLE);
REMOVE_BIT(AFF_FLAGS(ch), AFF_INVISIBLE | AFF_HIDE);
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_INVISIBLE | AFF_HIDE);
if (GET_LEVEL(ch) < LVL_IMMORT)
act("$n slowly fades into existence.", FALSE, ch, 0, 0, TO_ROOM);
@ -211,7 +211,7 @@ void check_killer(struct char_data *ch, struct char_data *vict)
if (PLR_FLAGGED(ch, PLR_KILLER) || IS_NPC(ch) || IS_NPC(vict) || ch == vict)
return;
SET_BIT(PLR_FLAGS(ch), PLR_KILLER);
SET_BIT_AR(PLR_FLAGS(ch), PLR_KILLER);
send_to_char(ch, "If you want to be a PLAYER KILLER, so be it...\r\n");
mudlog(BRF, LVL_IMMORT, TRUE, "PC Killer bit set on %s for initiating attack on %s at %s.",
GET_NAME(ch), GET_NAME(vict), world[IN_ROOM(vict)].name);
@ -261,7 +261,7 @@ void make_corpse(struct char_data *ch)
char buf2[MAX_NAME_LENGTH + 64];
struct obj_data *corpse, *o;
struct obj_data *money;
int i;
int i, x, y;
corpse = create_obj();
@ -276,8 +276,14 @@ void make_corpse(struct char_data *ch)
corpse->short_description = strdup(buf2);
GET_OBJ_TYPE(corpse) = ITEM_CONTAINER;
GET_OBJ_WEAR(corpse) = ITEM_WEAR_TAKE;
GET_OBJ_EXTRA(corpse) = ITEM_NODONATE;
for(x = y = 0; x < EF_ARRAY_MAX || y < TW_ARRAY_MAX; x++, y++) {
if (x < EF_ARRAY_MAX)
GET_OBJ_EXTRA_AR(corpse, x) = 0;
if (y < TW_ARRAY_MAX)
corpse->obj_flags.wear_flags[y] = 0;
}
SET_BIT_AR(GET_OBJ_WEAR(corpse), ITEM_WEAR_TAKE);
SET_BIT_AR(GET_OBJ_EXTRA(corpse), ITEM_NODONATE);
GET_OBJ_VAL(corpse, 0) = 0; /* You can't store stuff in a corpse */
GET_OBJ_VAL(corpse, 3) = 1; /* corpse identifier */
GET_OBJ_WEIGHT(corpse) = GET_WEIGHT(ch) + IS_CARRYING_W(ch);
@ -366,7 +372,7 @@ void die(struct char_data * ch, struct char_data * killer)
{
gain_exp(ch, -(GET_EXP(ch) / 2));
if (!IS_NPC(ch))
REMOVE_BIT(PLR_FLAGS(ch), PLR_KILLER | PLR_THIEF);
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_KILLER | PLR_THIEF);
raw_kill(ch, killer);
}

View file

@ -308,9 +308,6 @@ int write_mobile_espec(mob_vnum mvnum, struct char_data *mob, FILE *fd)
int write_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd)
{
char bit1[64];
char bit2[64];
char ldesc[MAX_STRING_LENGTH];
char ddesc[MAX_STRING_LENGTH];
@ -331,16 +328,17 @@ int write_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd)
ddesc, STRING_TERMINATOR
);
sprintascii(bit1, MOB_FLAGS(mob));
sprintascii(bit2, AFF_FLAGS(mob));
fprintf(fd, "%d %d %d %d %d %d %d %d %d E\n"
"%d %d %d %dd%d+%d %dd%d+%d\n",
MOB_FLAGS(mob)[0], MOB_FLAGS(mob)[1],
MOB_FLAGS(mob)[2], MOB_FLAGS(mob)[3],
AFF_FLAGS(mob)[0], AFF_FLAGS(mob)[1],
AFF_FLAGS(mob)[2], AFF_FLAGS(mob)[3],
GET_ALIGNMENT(mob),
GET_LEVEL(mob), 20 - GET_HITROLL(mob), GET_AC(mob) / 10, GET_HIT(mob),
GET_MANA(mob), GET_MOVE(mob), GET_NDD(mob), GET_SDD(mob),
GET_DAMROLL(mob));
fprintf(fd, "%s %s %d E\n"
"%d %d %d %dd%d+%d %dd%d+%d\n",
bit1, bit2, GET_ALIGNMENT(mob),
GET_LEVEL(mob), 20 - GET_HITROLL(mob), GET_AC(mob) / 10, GET_HIT(mob),
GET_MANA(mob), GET_MOVE(mob), GET_NDD(mob), GET_SDD(mob),
GET_DAMROLL(mob)
);
fprintf(fd, "%d %d\n"
"%d %d %d\n",
GET_GOLD(mob), GET_EXP(mob),

View file

@ -178,7 +178,10 @@ obj_rnum index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum)
int save_objects(zone_rnum zone_num)
{
char fname[128], buf[MAX_STRING_LENGTH], bit1[64], bit2[64];
char fname[128], buf[MAX_STRING_LENGTH];
char ebuf1[MAX_STRING_LENGTH], ebuf2[MAX_STRING_LENGTH], ebuf3[MAX_STRING_LENGTH], ebuf4[MAX_STRING_LENGTH];
char wbuf1[MAX_STRING_LENGTH], wbuf2[MAX_STRING_LENGTH], wbuf3[MAX_STRING_LENGTH], wbuf4[MAX_STRING_LENGTH];
char pbuf1[MAX_STRING_LENGTH], pbuf2[MAX_STRING_LENGTH], pbuf3[MAX_STRING_LENGTH], pbuf4[MAX_STRING_LENGTH];
int counter, counter2, realcounter;
FILE *fp;
struct obj_data *obj;
@ -220,18 +223,31 @@ int save_objects(zone_rnum zone_num)
(obj->description && *obj->description) ? obj->description : "undefined",
buf);
sprintascii(buf, GET_OBJ_EXTRA(obj));
sprintascii(bit1, GET_OBJ_WEAR(obj));
sprintascii(bit2, GET_OBJ_PERM(obj));
sprintascii(ebuf1, GET_OBJ_EXTRA(obj)[0]);
sprintascii(ebuf2, GET_OBJ_EXTRA(obj)[1]);
sprintascii(ebuf3, GET_OBJ_EXTRA(obj)[2]);
sprintascii(ebuf4, GET_OBJ_EXTRA(obj)[3]);
sprintascii(wbuf1, GET_OBJ_WEAR(obj)[0]);
sprintascii(wbuf2, GET_OBJ_WEAR(obj)[1]);
sprintascii(wbuf3, GET_OBJ_WEAR(obj)[2]);
sprintascii(wbuf4, GET_OBJ_WEAR(obj)[3]);
sprintascii(pbuf1, GET_OBJ_PERM(obj)[0]);
sprintascii(pbuf2, GET_OBJ_PERM(obj)[1]);
sprintascii(pbuf3, GET_OBJ_PERM(obj)[2]);
sprintascii(pbuf4, GET_OBJ_PERM(obj)[3]);
fprintf(fp,
"%d %s %s %s\n"
"%d %d %d %d\n"
"%d %d %d %d\n",
fprintf(fp, "%d %s %s %s %s %s %s %s %s %s %s %s %s\n"
"%d %d %d %d\n"
"%d %d %d %d\n",
GET_OBJ_TYPE(obj), buf, bit1, bit2,
GET_OBJ_VAL(obj, 0), GET_OBJ_VAL(obj, 1), GET_OBJ_VAL(obj, 2), GET_OBJ_VAL(obj, 3),
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj), GET_OBJ_RENT(obj), GET_OBJ_LEVEL(obj)
GET_OBJ_TYPE(obj),
ebuf1, ebuf2, ebuf3, ebuf4,
wbuf1, wbuf2, wbuf3, wbuf4,
pbuf1, pbuf2, pbuf3, pbuf4,
GET_OBJ_VAL(obj, 0), GET_OBJ_VAL(obj, 1),
GET_OBJ_VAL(obj, 2), GET_OBJ_VAL(obj, 3),
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj),
GET_OBJ_RENT(obj), GET_OBJ_LEVEL(obj)
);
/* Do we have script(s) attached? */

View file

@ -260,7 +260,6 @@ int save_rooms(zone_rnum rzone)
char filename[128];
char buf[MAX_STRING_LENGTH];
char buf1[MAX_STRING_LENGTH];
char bit[64];
#if CIRCLE_UNSIGNED_INDEX
if (rzone == NOWHERE || rzone > top_of_zone_table) {
@ -293,15 +292,15 @@ int save_rooms(zone_rnum rzone)
strip_cr(buf);
/* Save the numeric and string section of the file. */
sprintascii(bit, room->room_flags);
fprintf(sf, "#%d\n"
"%s%c\n"
"%s%c\n"
"%d %s %d\n",
room->number,
room->name ? room->name : "Untitled", STRING_TERMINATOR,
buf, STRING_TERMINATOR,
zone_table[room->zone].number, bit, room->sector_type
"%d %d %d %d %d %d\n",
room->number,
room->name ? room->name : "Untitled", STRING_TERMINATOR,
buf, STRING_TERMINATOR,
zone_table[room->zone].number, room->room_flags[0], room->room_flags[1], room->room_flags[2],
room->room_flags[3], room->sector_type
);
/* Now you write out the exits for the room. */

View file

@ -42,8 +42,8 @@ struct bfs_queue_struct {
static struct bfs_queue_struct *queue_head = 0, *queue_tail = 0;
/* Utility macros */
#define MARK(room) (SET_BIT(ROOM_FLAGS(room), ROOM_BFS_MARK))
#define UNMARK(room) (REMOVE_BIT(ROOM_FLAGS(room), ROOM_BFS_MARK))
#define MARK(room) (SET_BIT_AR(ROOM_FLAGS(room), ROOM_BFS_MARK))
#define UNMARK(room) (REMOVE_BIT_AR(ROOM_FLAGS(room), ROOM_BFS_MARK))
#define IS_MARKED(room) (ROOM_FLAGGED(room, ROOM_BFS_MARK))
#define TOROOM(x, y) (world[(x)].dir_option[(y)]->to_room)
#define IS_CLOSED(x, y) (EXIT_FLAGGED(world[(x)].dir_option[(y)], EX_CLOSED))

View file

@ -29,7 +29,7 @@ extern struct char_data *combat_list;
int apply_ac(struct char_data *ch, int eq_pos);
void update_object(struct obj_data *obj, int use);
void update_char_objects(struct char_data *ch);
void affect_modify(struct char_data *ch, byte loc, sbyte mod, bitvector_t bitv, bool add);
void affect_modify(struct char_data *ch, byte loc, sbyte mod, long bitv, bool add);
/* external functions */
int invalid_class(struct char_data *ch, struct obj_data *obj);
@ -107,15 +107,8 @@ int isname(const char *str, const char *namelist)
return 0;
}
void affect_modify(struct char_data *ch, byte loc, sbyte mod, bitvector_t bitv, bool add)
void aff_apply_modify(struct char_data *ch, byte loc, sbyte mod, char *msg)
{
if (add)
SET_BIT(AFF_FLAGS(ch), bitv);
else {
REMOVE_BIT(AFF_FLAGS(ch), bitv);
mod = -mod;
}
switch (loc) {
case APPLY_NONE:
break;
@ -214,6 +207,38 @@ void affect_modify(struct char_data *ch, byte loc, sbyte mod, bitvector_t bitv,
} /* switch */
}
void affect_modify(struct char_data * ch, byte loc, sbyte mod, long bitv, bool add)
{
if (add) {
SET_BIT_AR(AFF_FLAGS(ch), bitv);
} else {
REMOVE_BIT_AR(AFF_FLAGS(ch), bitv);
mod = -mod;
}
aff_apply_modify(ch, loc, mod, "affect_modify");
}
void affect_modify_ar(struct char_data * ch, byte loc, sbyte mod, int bitv[], bool add)
{
int i , j;
if (add) {
for(i = 0; i < AF_ARRAY_MAX; i++)
for(j = 0; j < 32; j++)
if(IS_SET_AR(bitv, (i*32)+j))
SET_BIT_AR(AFF_FLAGS(ch), (i*32)+j);
} else {
for(i = 0; i < AF_ARRAY_MAX; i++)
for(j = 0; j < 32; j++)
if(IS_SET_AR(bitv, (i*32)+j))
REMOVE_BIT_AR(AFF_FLAGS(ch), (i*32)+j);
mod = -mod;
}
aff_apply_modify(ch, loc, mod, "affect_modify_ar");
}
/* This updates a character by subtracting everything he is affected by
* restoring original abilities, and then affecting all again. */
void affect_total(struct char_data *ch)
@ -224,7 +249,7 @@ void affect_total(struct char_data *ch)
for (i = 0; i < NUM_WEARS; i++) {
if (GET_EQ(ch, i))
for (j = 0; j < MAX_OBJ_AFFECT; j++)
affect_modify(ch, GET_EQ(ch, i)->affected[j].location,
affect_modify_ar(ch, GET_EQ(ch, i)->affected[j].location,
GET_EQ(ch, i)->affected[j].modifier,
GET_OBJ_AFFECT(GET_EQ(ch, i)), FALSE);
}
@ -237,7 +262,7 @@ void affect_total(struct char_data *ch)
for (i = 0; i < NUM_WEARS; i++) {
if (GET_EQ(ch, i))
for (j = 0; j < MAX_OBJ_AFFECT; j++)
affect_modify(ch, GET_EQ(ch, i)->affected[j].location,
affect_modify_ar(ch, GET_EQ(ch, i)->affected[j].location,
GET_EQ(ch, i)->affected[j].modifier,
GET_OBJ_AFFECT(GET_EQ(ch, i)), TRUE);
}
@ -414,7 +439,7 @@ void obj_to_char(struct obj_data *object, struct char_data *ch)
/* set flag for crash-save system, but not on mobs! */
if (!IS_NPC(ch))
SET_BIT(PLR_FLAGS(ch), PLR_CRASH);
SET_BIT_AR(PLR_FLAGS(ch), PLR_CRASH);
} else
log("SYSERR: NULL obj (%p) or char (%p) passed to obj_to_char.", object, ch);
}
@ -432,7 +457,7 @@ void obj_from_char(struct obj_data *object)
/* set flag for crash-save system, but not on mobs! */
if (!IS_NPC(object->carried_by))
SET_BIT(PLR_FLAGS(object->carried_by), PLR_CRASH);
SET_BIT_AR(PLR_FLAGS(object->carried_by), PLR_CRASH);
IS_CARRYING_W(object->carried_by) -= GET_OBJ_WEIGHT(object);
IS_CARRYING_N(object->carried_by)--;
@ -528,7 +553,7 @@ void equip_char(struct char_data *ch, struct obj_data *obj, int pos)
log("SYSERR: IN_ROOM(ch) = NOWHERE when equipping char %s.", GET_NAME(ch));
for (j = 0; j < MAX_OBJ_AFFECT; j++)
affect_modify(ch, obj->affected[j].location,
affect_modify_ar(ch, obj->affected[j].location,
obj->affected[j].modifier,
GET_OBJ_AFFECT(obj), TRUE);
@ -562,7 +587,7 @@ struct obj_data *unequip_char(struct char_data *ch, int pos)
GET_EQ(ch, pos) = NULL;
for (j = 0; j < MAX_OBJ_AFFECT; j++)
affect_modify(ch, obj->affected[j].location,
affect_modify_ar(ch, obj->affected[j].location,
obj->affected[j].modifier,
GET_OBJ_AFFECT(obj), FALSE);
@ -663,7 +688,7 @@ void obj_to_room(struct obj_data *object, room_rnum room)
IN_ROOM(object) = room;
object->carried_by = NULL;
if (ROOM_FLAGGED(room, ROOM_HOUSE))
SET_BIT(ROOM_FLAGS(room), ROOM_HOUSE_CRASH);
SET_BIT_AR(ROOM_FLAGS(room), ROOM_HOUSE_CRASH);
}
}
@ -681,7 +706,7 @@ void obj_from_room(struct obj_data *object)
REMOVE_FROM_LIST(object, world[IN_ROOM(object)].contents, next_content);
if (ROOM_FLAGGED(IN_ROOM(object), ROOM_HOUSE))
SET_BIT(ROOM_FLAGS(IN_ROOM(object)), ROOM_HOUSE_CRASH);
SET_BIT_AR(ROOM_FLAGS(IN_ROOM(object)), ROOM_HOUSE_CRASH);
IN_ROOM(object) = NOWHERE;
object->next_content = NULL;
}
@ -944,9 +969,9 @@ void extract_char(struct char_data *ch)
char_from_furniture(ch);
if (IS_NPC(ch))
SET_BIT(MOB_FLAGS(ch), MOB_NOTDEADYET);
SET_BIT_AR(MOB_FLAGS(ch), MOB_NOTDEADYET);
else
SET_BIT(PLR_FLAGS(ch), PLR_NOTDEADYET);
SET_BIT_AR(PLR_FLAGS(ch), PLR_NOTDEADYET);
extractions_pending++;
}
@ -966,9 +991,9 @@ void extract_pending_chars(void)
next_vict = vict->next;
if (MOB_FLAGGED(vict, MOB_NOTDEADYET))
REMOVE_BIT(MOB_FLAGS(vict), MOB_NOTDEADYET);
REMOVE_BIT_AR(MOB_FLAGS(vict), MOB_NOTDEADYET);
else if (PLR_FLAGGED(vict, PLR_NOTDEADYET))
REMOVE_BIT(PLR_FLAGS(vict), PLR_NOTDEADYET);
REMOVE_BIT_AR(PLR_FLAGS(vict), PLR_NOTDEADYET);
else {
/* Last non-free'd character to continue chain from. */
prev_vict = vict;
@ -1222,6 +1247,7 @@ struct obj_data *create_money(int amount)
struct obj_data *obj;
struct extra_descr_data *new_descr;
char buf[200];
int y;
if (amount <= 0) {
log("SYSERR: Try to create negative or 0 money. (%d)", amount);
@ -1261,7 +1287,9 @@ struct obj_data *create_money(int amount)
obj->ex_description = new_descr;
GET_OBJ_TYPE(obj) = ITEM_MONEY;
GET_OBJ_WEAR(obj) = ITEM_WEAR_TAKE;
for(y = 0; y < TW_ARRAY_MAX; y++)
obj->obj_flags.wear_flags[y] = 0;
SET_BIT_AR(GET_OBJ_WEAR(obj), ITEM_WEAR_TAKE);
GET_OBJ_VAL(obj, 0) = amount;
GET_OBJ_COST(obj) = amount;
obj->item_number = NOTHING;

View file

@ -166,7 +166,7 @@ ACMD(do_oasis_hedit)
STATE(d) = CON_HEDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing help files.", GET_NAME(d->character));
}

View file

@ -146,7 +146,7 @@ void House_crashsave(room_vnum vnum)
}
fclose(fp);
House_restore_weight(world[rnum].contents);
REMOVE_BIT(ROOM_FLAGS(rnum), ROOM_HOUSE_CRASH);
REMOVE_BIT_AR(ROOM_FLAGS(rnum), ROOM_HOUSE_CRASH);
}
/* Delete a house save file */
@ -275,8 +275,8 @@ void House_boot(void)
house_control[num_of_houses++] = temp_house;
SET_BIT(ROOM_FLAGS(real_house), ROOM_HOUSE | ROOM_PRIVATE);
SET_BIT(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
SET_BIT_AR(ROOM_FLAGS(real_house), ROOM_HOUSE | ROOM_PRIVATE);
SET_BIT_AR(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
House_load(temp_house.vnum);
}
@ -425,8 +425,8 @@ void hcontrol_build_house(struct char_data *ch, char *arg)
house_control[num_of_houses++] = temp_house;
SET_BIT(ROOM_FLAGS(real_house), ROOM_HOUSE | ROOM_PRIVATE);
SET_BIT(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
SET_BIT_AR(ROOM_FLAGS(real_house), ROOM_HOUSE | ROOM_PRIVATE);
SET_BIT_AR(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
House_crashsave(virt_house);
send_to_char(ch, "House built. Mazel tov!\r\n");
@ -449,12 +449,12 @@ void hcontrol_destroy_house(struct char_data *ch, char *arg)
if ((real_atrium = real_room(house_control[i].atrium)) == NOWHERE)
log("SYSERR: House %d had invalid atrium %d!", atoi(arg), house_control[i].atrium);
else
REMOVE_BIT(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
REMOVE_BIT_AR(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
if ((real_house = real_room(house_control[i].vnum)) == NOWHERE)
log("SYSERR: House %d had invalid vnum %d!", atoi(arg), house_control[i].vnum);
else
REMOVE_BIT(ROOM_FLAGS(real_house), ROOM_HOUSE | ROOM_PRIVATE | ROOM_HOUSE_CRASH);
REMOVE_BIT_AR(ROOM_FLAGS(real_house), ROOM_HOUSE | ROOM_PRIVATE | ROOM_HOUSE_CRASH);
House_delete_file(house_control[i].vnum);
@ -470,7 +470,7 @@ void hcontrol_destroy_house(struct char_data *ch, char *arg)
* case the house we just deleted shared an atrium with another house. -JE */
for (i = 0; i < num_of_houses; i++)
if ((real_atrium = real_room(house_control[i].atrium)) != NOWHERE)
SET_BIT(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
SET_BIT_AR(ROOM_FLAGS(real_atrium), ROOM_ATRIUM);
}
void hcontrol_pay_house(struct char_data *ch, char *arg)
@ -729,7 +729,7 @@ struct obj_data *Obj_from_store(struct obj_file_elem object, int *location)
{
struct obj_data *obj;
obj_rnum itemnum;
int j;
int j, taeller;
*location = 0;
if ((itemnum = real_object(object.item_number)) == NOTHING)
@ -743,10 +743,12 @@ struct obj_data *Obj_from_store(struct obj_file_elem object, int *location)
GET_OBJ_VAL(obj, 1) = object.value[1];
GET_OBJ_VAL(obj, 2) = object.value[2];
GET_OBJ_VAL(obj, 3) = object.value[3];
GET_OBJ_EXTRA(obj) = object.extra_flags;
for(taeller = 0; taeller < EF_ARRAY_MAX; taeller++)
GET_OBJ_EXTRA(obj)[taeller] = object.extra_flags[taeller];
GET_OBJ_WEIGHT(obj) = object.weight;
GET_OBJ_TIMER(obj) = object.timer;
GET_OBJ_AFFECT(obj) = object.bitvector;
for(taeller = 0; taeller < AF_ARRAY_MAX; taeller++)
GET_OBJ_AFFECT(obj)[taeller] = object.bitvector[taeller];
for (j = 0; j < MAX_OBJ_AFFECT; j++)
obj->affected[j] = object.affected[j];

View file

@ -562,7 +562,7 @@ void command_interpreter(struct char_data *ch, char *argument)
char *line;
char arg[MAX_INPUT_LENGTH];
REMOVE_BIT(AFF_FLAGS(ch), AFF_HIDE);
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_HIDE);
/* just drop to next line for hitting CR */
skip_spaces(&argument);
@ -1208,8 +1208,8 @@ int perform_dupe_check(struct descriptor_data *d)
d->character->desc = d;
d->original = NULL;
d->character->char_specials.timer = 0;
REMOVE_BIT(PLR_FLAGS(d->character), PLR_MAILING | PLR_WRITING);
REMOVE_BIT(AFF_FLAGS(d->character), AFF_GROUP);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_MAILING | PLR_WRITING);
REMOVE_BIT_AR(AFF_FLAGS(d->character), AFF_GROUP);
STATE(d) = CON_PLAYING;
switch (mode) {
@ -1383,9 +1383,8 @@ void nanny(struct descriptor_data *d, char *arg)
STATE(d) = CON_NAME_CNFRM;
} else {
/* undo it just in case they are set */
REMOVE_BIT(PLR_FLAGS(d->character),
PLR_WRITING | PLR_MAILING | PLR_CRYO);
REMOVE_BIT(AFF_FLAGS(d->character), AFF_GROUP);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_WRITING | PLR_MAILING | PLR_CRYO);
REMOVE_BIT_AR(AFF_FLAGS(d->character), AFF_GROUP);
d->character->player.time.logon = time(0);
write_to_output(d, "Password: ");
echo_off(d);
@ -1640,7 +1639,7 @@ void nanny(struct descriptor_data *d, char *arg)
}
d->has_prompt = 0;
/* We've updated to 3.1 - some bits might be set wrongly: */
REMOVE_BIT(PRF_FLAGS(d->character), PRF_BUILDWALK);
REMOVE_BIT_AR(PRF_FLAGS(d->character), PRF_BUILDWALK);
break;
case '2':
@ -1714,7 +1713,7 @@ void nanny(struct descriptor_data *d, char *arg)
return;
}
if (GET_LEVEL(d->character) < LVL_GRGOD)
SET_BIT(PLR_FLAGS(d->character), PLR_DELETED);
SET_BIT_AR(PLR_FLAGS(d->character), PLR_DELETED);
save_char(d->character);
Crash_delete_file(GET_NAME(d->character));
/* If the selfdelete_fastwipe flag is set (in config.c), remove all the

View file

@ -692,7 +692,7 @@ void mag_summons(int level, struct char_data *ch, struct obj_data *obj,
char_to_room(mob, IN_ROOM(ch));
IS_CARRYING_W(mob) = 0;
IS_CARRYING_N(mob) = 0;
SET_BIT(AFF_FLAGS(mob), AFF_CHARM);
SET_BIT_AR(AFF_FLAGS(mob), AFF_CHARM);
if (spellnum == SPELL_CLONE) {
/* Don't mess up the prototype; use new string copies. */
mob->player.name = strdup(GET_NAME(ch));
@ -798,13 +798,13 @@ void mag_alter_objs(int level, struct char_data *ch, struct obj_data *obj,
case SPELL_BLESS:
if (!OBJ_FLAGGED(obj, ITEM_BLESS) &&
(GET_OBJ_WEIGHT(obj) <= 5 * GET_LEVEL(ch))) {
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_BLESS);
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_BLESS);
to_char = "$p glows briefly.";
}
break;
case SPELL_CURSE:
if (!OBJ_FLAGGED(obj, ITEM_NODROP)) {
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_NODROP);
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_NODROP);
if (GET_OBJ_TYPE(obj) == ITEM_WEAPON)
GET_OBJ_VAL(obj, 2)--;
to_char = "$p briefly glows red.";
@ -812,7 +812,7 @@ void mag_alter_objs(int level, struct char_data *ch, struct obj_data *obj,
break;
case SPELL_INVISIBLE:
if (!OBJ_FLAGGED(obj, ITEM_NOINVIS | ITEM_INVISIBLE)) {
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_INVISIBLE);
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_INVISIBLE);
to_char = "$p vanishes.";
}
break;
@ -826,7 +826,7 @@ void mag_alter_objs(int level, struct char_data *ch, struct obj_data *obj,
break;
case SPELL_REMOVE_CURSE:
if (OBJ_FLAGGED(obj, ITEM_NODROP)) {
REMOVE_BIT(GET_OBJ_EXTRA(obj), ITEM_NODROP);
REMOVE_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_NODROP);
if (GET_OBJ_TYPE(obj) == ITEM_WEAPON)
GET_OBJ_VAL(obj, 2)++;
to_char = "$p briefly glows blue.";

View file

@ -353,7 +353,7 @@ void postmaster_send_mail(struct char_data *ch, struct char_data *mailman,
if (GET_LEVEL(ch) < LVL_IMMORT)
GET_GOLD(ch) -= STAMP_PRICE;
SET_BIT(PLR_FLAGS(ch), PLR_MAILING); /* string_write() sets writing. */
SET_BIT_AR(PLR_FLAGS(ch), PLR_MAILING); /* string_write() sets writing. */
/* Start writing! */
CREATE(mailwrite, char *, 1);
@ -374,6 +374,7 @@ void postmaster_receive_mail(struct char_data *ch, struct char_data *mailman,
{
char buf[256];
struct obj_data *obj;
int y;
if (!has_mail(GET_IDNUM(ch))) {
snprintf(buf, sizeof(buf), "$n tells you, 'Sorry, you don't have any mail waiting.'");
@ -388,7 +389,9 @@ void postmaster_receive_mail(struct char_data *ch, struct char_data *mailman,
obj->description = strdup("Someone has left a piece of mail here.");
GET_OBJ_TYPE(obj) = ITEM_NOTE;
GET_OBJ_WEAR(obj) = ITEM_WEAR_TAKE;
for(y = 0; y < TW_ARRAY_MAX; y++)
obj->obj_flags.wear_flags[y] = 0;
SET_BIT_AR(GET_OBJ_WEAR(obj), ITEM_WEAR_TAKE);
GET_OBJ_WEIGHT(obj) = 1;
GET_OBJ_COST(obj) = 30;
GET_OBJ_RENT(obj) = 10;

View file

@ -160,7 +160,7 @@ ACMD(do_oasis_medit)
/* Display the OLC messages to the players in the same room as the
builder and also log it. */
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE,"OLC: %s starts editing zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
@ -234,7 +234,7 @@ void init_mobile(struct char_data *mob)
mob->real_abils.dex = mob->real_abils.con = mob->real_abils.cha = 11;
mob->aff_abils = mob->real_abils;
SET_BIT(MOB_FLAGS(mob), MOB_ISNPC);
SET_BIT_AR(MOB_FLAGS(mob), MOB_ISNPC);
mob->player_specials = &dummy_mob;
}
@ -350,7 +350,7 @@ void medit_disp_mob_flags(struct descriptor_data *d)
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, action_bits[i],
!(++columns % 2) ? "\r\n" : "");
}
sprintbit(MOB_FLAGS(OLC_MOB(d)), action_bits, flags, sizeof(flags));
sprintbitarray(MOB_FLAGS(OLC_MOB(d)), action_bits, AF_ARRAY_MAX, flags);
write_to_output(d, "\r\nCurrent flags : %s%s%s\r\nEnter mob flags (0 to quit) : ",
cyn, flags, nrm);
}
@ -364,10 +364,10 @@ void medit_disp_aff_flags(struct descriptor_data *d)
get_char_colors(d->character);
clear_screen(d);
for (i = 0; i < NUM_AFF_FLAGS; i++) {
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, affected_bits[i],
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, affected_bits[i+1],
!(++columns % 2) ? "\r\n" : "");
}
sprintbit(AFF_FLAGS(OLC_MOB(d)), affected_bits, flags, sizeof(flags));
sprintbitarray(AFF_FLAGS(OLC_MOB(d)), affected_bits, AF_ARRAY_MAX, flags);
write_to_output(d, "\r\nCurrent flags : %s%s%s\r\nEnter aff flags (0 to quit) : ",
cyn, flags, nrm);
}
@ -414,8 +414,8 @@ void medit_disp_menu(struct descriptor_data *d)
grn, nrm, cyn, GET_GOLD(mob), nrm
);
sprintbit(MOB_FLAGS(mob), action_bits, flags, sizeof(flags));
sprintbit(AFF_FLAGS(mob), affected_bits, flag2, sizeof(flag2));
sprintbitarray(MOB_FLAGS(mob), action_bits, AF_ARRAY_MAX, flags);
sprintbitarray(AFF_FLAGS(mob), affected_bits, AF_ARRAY_MAX, flag2);
write_to_output(d,
"%sI%s) Position : %s%s\r\n"
"%sJ%s) Default : %s%s\r\n"
@ -458,7 +458,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
switch (OLC_MODE(d)) {
case MEDIT_CONFIRM_SAVESTRING:
/* Ensure mob has MOB_ISNPC set. */
SET_BIT(MOB_FLAGS(OLC_MOB(d)), MOB_ISNPC);
SET_BIT_AR(MOB_FLAGS(OLC_MOB(d)), MOB_ISNPC);
switch (*arg) {
case 'y':
case 'Y':
@ -669,7 +669,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
if ((i = atoi(arg)) <= 0)
break;
else if (i <= NUM_MOB_FLAGS)
TOGGLE_BIT(MOB_FLAGS(OLC_MOB(d)), 1 << (i - 1));
TOGGLE_BIT_AR(MOB_FLAGS(OLC_MOB(d)), 1 << (i - 1));
medit_disp_mob_flags(d);
return;
@ -677,11 +677,10 @@ void medit_parse(struct descriptor_data *d, char *arg)
if ((i = atoi(arg)) <= 0)
break;
else if (i <= NUM_AFF_FLAGS)
TOGGLE_BIT(AFF_FLAGS(OLC_MOB(d)), 1 << (i - 1));
TOGGLE_BIT_AR(AFF_FLAGS(OLC_MOB(d)), 1 << (i - 1));
/* Remove unwanted bits right away. */
REMOVE_BIT(AFF_FLAGS(OLC_MOB(d)),
AFF_CHARM | AFF_POISON | AFF_GROUP | AFF_SLEEP);
REMOVE_BIT_AR(AFF_FLAGS(OLC_MOB(d)), AFF_CHARM | AFF_POISON | AFF_GROUP | AFF_SLEEP);
medit_disp_aff_flags(d);
return;

View file

@ -52,7 +52,7 @@ void mobile_activity(void)
if (mob_index[GET_MOB_RNUM(ch)].func == NULL) {
log("SYSERR: %s (#%d): Attempting to call non-existing mob function.",
GET_NAME(ch), GET_MOB_VNUM(ch));
REMOVE_BIT(MOB_FLAGS(ch), MOB_SPEC);
REMOVE_BIT_AR(MOB_FLAGS(ch), MOB_SPEC);
} else {
char actbuf[MAX_INPUT_LENGTH] = "";
if ((mob_index[GET_MOB_RNUM(ch)].func) (ch, ch, 0, actbuf))

View file

@ -80,7 +80,7 @@ void smash_tilde(char *str)
void string_write(struct descriptor_data *d, char **writeto, size_t len, long mailto, void *data)
{
if (d->character && !IS_NPC(d->character))
SET_BIT(PLR_FLAGS(d->character), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(d->character), PLR_WRITING);
if (using_improved_editor)
d->backstr = (char *)data;
@ -202,7 +202,7 @@ void string_add(struct descriptor_data *d, char *str)
d->mail_to = 0;
d->max_str = 0;
if (d->character && !IS_NPC(d->character))
REMOVE_BIT(PLR_FLAGS(d->character), PLR_MAILING | PLR_WRITING);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_MAILING | PLR_WRITING);
} else if (action != STRINGADD_ACTION && strlen(*d->str) + 3 <= d->max_str) /* 3 = \r\n\0 */
strcat(*d->str, "\r\n");
}

View file

@ -168,7 +168,7 @@ void cleanup_olc(struct descriptor_data *d, byte cleanup_type)
/* Restore descriptor playing status. */
if (d->character) {
REMOVE_BIT(PLR_FLAGS(d->character), PLR_WRITING);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_WRITING);
act("$n stops using OLC.", TRUE, d->character, NULL, NULL, TO_ROOM);
if (cleanup_type == CLEANUP_CONFIG)

View file

@ -169,7 +169,7 @@ ACMD(do_dig)
ACMD(do_room_copy)
{
struct room_data *room_src, *room_dst;
int room_num, j, buf_num;
int room_num, j, buf_num, taeller;
zone_rnum dst_zone;
struct descriptor_data *dsc;
char buf[MAX_INPUT_LENGTH];
@ -210,8 +210,9 @@ ACMD(do_room_copy)
room_dst->description = str_udup(world[IN_ROOM(ch)].description);
room_dst->description = str_udup(world[IN_ROOM(ch)].description);
room_dst->number = buf_num;
room_dst->room_flags = ROOM_FLAGS(IN_ROOM(ch));
room_dst->sector_type = world[IN_ROOM(ch)].sector_type;
for(taeller=0; taeller < RF_ARRAY_MAX; taeller++)
room_dst->room_flags[taeller] = ROOM_FLAGS(IN_ROOM(ch))[taeller];
/* Extra descriptions, if necessary. */
send_to_char(ch, "Cloning extra descriptions....\r\n");

View file

@ -74,7 +74,6 @@ int objsave_save_obj_record(struct obj_data *obj, FILE *fp, int locate)
int counter2;
struct extra_descr_data *ex_desc;
char buf1[MAX_STRING_LENGTH +1];
char flags[65];
struct obj_data *temp = NULL;
if (GET_OBJ_VNUM(obj) != NOTHING)
@ -105,10 +104,8 @@ int objsave_save_obj_record(struct obj_data *obj, FILE *fp, int locate)
GET_OBJ_VAL(obj, 2),
GET_OBJ_VAL(obj, 3)
);
if (GET_OBJ_EXTRA(obj) != GET_OBJ_EXTRA(temp)) {
sprintascii(flags, GET_OBJ_EXTRA(obj));
fprintf(fp, "Flag: %s\n", flags);
}
if (GET_OBJ_EXTRA(obj) != GET_OBJ_EXTRA(temp))
fprintf(fp, "Flag: %d %d %d %d\n", GET_OBJ_EXTRA(obj)[0], GET_OBJ_EXTRA(obj)[1], GET_OBJ_EXTRA(obj)[2], GET_OBJ_EXTRA(obj)[3]);
#define TEST_OBJS(obj1, obj2, field) ((!obj1->field || !obj2->field || \
strcmp(obj1->field, obj2->field)))
@ -136,14 +133,10 @@ int objsave_save_obj_record(struct obj_data *obj, FILE *fp, int locate)
fprintf(fp, "Cost: %d\n", GET_OBJ_COST(obj));
if (TEST_OBJN(cost_per_day))
fprintf(fp, "Rent: %d\n", GET_OBJ_RENT(obj));
if (TEST_OBJN(bitvector)) {
sprintascii(flags, obj->obj_flags.bitvector);
fprintf(fp, "Perm: %s\n", flags);
}
if (TEST_OBJN(wear_flags)) {
sprintascii(flags, GET_OBJ_WEAR(obj));
fprintf(fp, "Wear: %s\n", flags);
}
if (TEST_OBJN(bitvector))
fprintf(fp, "Perm: %d %d %d %d\n", GET_OBJ_PERM(obj)[0], GET_OBJ_PERM(obj)[1], GET_OBJ_PERM(obj)[2], GET_OBJ_PERM(obj)[3]);
if (TEST_OBJN(wear_flags))
fprintf(fp, "Wear: %d %d %d %d\n", GET_OBJ_WEAR(obj)[0], GET_OBJ_WEAR(obj)[1], GET_OBJ_WEAR(obj)[2], GET_OBJ_WEAR(obj)[3]);
/* Do we have affects? */
for (counter2 = 0; counter2 < MAX_OBJ_AFFECT; counter2++)
@ -614,7 +607,7 @@ void Crash_crashsave(struct char_data *ch)
fprintf(fp, "$~\n");
fclose(fp);
REMOVE_BIT(PLR_FLAGS(ch), PLR_CRASH);
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_CRASH);
}
void Crash_idlesave(struct char_data *ch)
@ -790,7 +783,7 @@ void Crash_cryosave(struct char_data *ch, int cost)
fclose(fp);
Crash_extract_objs(ch->carrying);
SET_BIT(PLR_FLAGS(ch), PLR_CRYO);
SET_BIT_AR(PLR_FLAGS(ch), PLR_CRYO);
}
/* Routines used for the receptionist. */
@ -961,7 +954,7 @@ int gen_receptionist(struct char_data *ch, struct char_data *recep, int cmd,
FALSE, recep, 0, ch, TO_VICT);
Crash_cryosave(ch, cost);
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE, "%s has cryo-rented.", GET_NAME(ch));
SET_BIT(PLR_FLAGS(ch), PLR_CRYO);
SET_BIT_AR(PLR_FLAGS(ch), PLR_CRYO);
}
act("$n helps $N into $S private chamber.", FALSE, recep, 0, ch, TO_NOTVICT);
@ -993,7 +986,7 @@ void Crash_save_all(void)
if (PLR_FLAGGED(d->character, PLR_CRASH)) {
Crash_crashsave(d->character);
save_char(d->character);
REMOVE_BIT(PLR_FLAGS(d->character), PLR_CRASH);
REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_CRASH);
}
}
}
@ -1005,7 +998,7 @@ void Crash_save_all(void)
obj_save_data *objsave_parse_objects(FILE *fl)
{
obj_save_data *head, *current;
char line[READ_SIZE];
char f1[128], f2[128], f3[128], f4[128], line[READ_SIZE];
int t[4],i, nr;
struct obj_data *temp;
@ -1122,8 +1115,13 @@ obj_save_data *objsave_parse_objects(FILE *fl)
}
break;
case 'F':
if (!strcmp(tag, "Flag"))
GET_OBJ_EXTRA(temp) = asciiflag_conv(line);
if (!strcmp(tag, "Flag")) {
sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
GET_OBJ_EXTRA(temp)[0] = asciiflag_conv(f1);
GET_OBJ_EXTRA(temp)[1] = asciiflag_conv(f2);
GET_OBJ_EXTRA(temp)[2] = asciiflag_conv(f3);
GET_OBJ_EXTRA(temp)[3] = asciiflag_conv(f4);
}
break;
case 'L':
if(!strcmp(tag, "Loc "))
@ -1134,8 +1132,13 @@ obj_save_data *objsave_parse_objects(FILE *fl)
temp->name = strdup(line);
break;
case 'P':
if (!strcmp(tag, "Perm"))
temp->obj_flags.bitvector = asciiflag_conv(line);
if (!strcmp(tag, "Perm")) {
sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
GET_OBJ_PERM(temp)[0] = asciiflag_conv(f1);
GET_OBJ_PERM(temp)[1] = asciiflag_conv(f2);
GET_OBJ_PERM(temp)[2] = asciiflag_conv(f3);
GET_OBJ_PERM(temp)[3] = asciiflag_conv(f4);
}
break;
case 'R':
if (!strcmp(tag, "Rent"))
@ -1150,8 +1153,13 @@ obj_save_data *objsave_parse_objects(FILE *fl)
GET_OBJ_TYPE(temp) = num;
break;
case 'W':
if (!strcmp(tag, "Wear"))
GET_OBJ_WEAR(temp) = asciiflag_conv(line);
if (!strcmp(tag, "Wear")) {
sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
GET_OBJ_WEAR(temp)[0] = asciiflag_conv(f1);
GET_OBJ_WEAR(temp)[1] = asciiflag_conv(f2);
GET_OBJ_WEAR(temp)[2] = asciiflag_conv(f3);
GET_OBJ_WEAR(temp)[3] = asciiflag_conv(f4);
}
else if (!strcmp(tag, "Wght"))
GET_OBJ_WEIGHT(temp) = num;
break;

View file

@ -174,7 +174,7 @@ ACMD(do_oasis_oedit)
/* Send the OLC message to the players in the same room as the builder. */
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
/* Log the OLC message. */
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing zone %d allowed zone %d",
@ -189,7 +189,7 @@ void oedit_setup_new(struct descriptor_data *d)
OLC_OBJ(d)->name = strdup("unfinished object");
OLC_OBJ(d)->description = strdup("An unfinished object is lying here.");
OLC_OBJ(d)->short_description = strdup("an unfinished object");
GET_OBJ_WEAR(OLC_OBJ(d)) = ITEM_WEAR_TAKE;
SET_BIT_AR(GET_OBJ_WEAR(OLC_OBJ(d)), ITEM_WEAR_TAKE);
OLC_VAL(d) = 0;
OLC_ITEM_TYPE(d) = OBJ_TRIGGER;
@ -433,7 +433,7 @@ void oedit_disp_val1_menu(struct descriptor_data *d)
write_to_output(d, "Spell level : ");
break;
case ITEM_WEAPON:
/* This doesn't seem to be used if I remembe right. */
/* This doesn't seem to be used if I remember right. */
write_to_output(d, "Modifier to Hitroll : ");
break;
case ITEM_ARMOR:
@ -578,7 +578,7 @@ void oedit_disp_extra_menu(struct descriptor_data *d)
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm,
extra_bits[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbit(GET_OBJ_EXTRA(OLC_OBJ(d)), extra_bits, bits, sizeof(bits));
sprintbitarray(GET_OBJ_EXTRA(OLC_OBJ(d)), extra_bits, EF_ARRAY_MAX, bits);
write_to_output(d, "\r\nObject flags: %s%s%s\r\n"
"Enter object extra flag (0 to quit) : ",
cyn, bits, nrm);
@ -596,7 +596,7 @@ void oedit_disp_perm_menu(struct descriptor_data *d)
for (counter = 0; counter < NUM_AFF_FLAGS; counter++) {
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm, affected_bits[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbit(GET_OBJ_PERM(OLC_OBJ(d)), affected_bits, bits, sizeof(bits));
sprintbitarray(GET_OBJ_PERM(OLC_OBJ(d)), affected_bits, EF_ARRAY_MAX, bits);
write_to_output(d, "\r\nObject permanent flags: %s%s%s\r\n"
"Enter object perm flag (0 to quit) : ", cyn, bits, nrm);
}
@ -614,7 +614,7 @@ void oedit_disp_wear_menu(struct descriptor_data *d)
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm,
wear_bits[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbit(GET_OBJ_WEAR(OLC_OBJ(d)), wear_bits, bits, sizeof(bits));
sprintbitarray(GET_OBJ_WEAR(OLC_OBJ(d)), wear_bits, TW_ARRAY_MAX, bits);
write_to_output(d, "\r\nWear flags: %s%s%s\r\n"
"Enter wear flag, 0 to quit : ", cyn, bits, nrm);
}
@ -632,7 +632,7 @@ void oedit_disp_menu(struct descriptor_data *d)
/* Build buffers for first part of menu. */
sprinttype(GET_OBJ_TYPE(obj), item_types, buf1, sizeof(buf1));
sprintbit(GET_OBJ_EXTRA(obj), extra_bits, buf2, sizeof(buf2));
sprintbitarray(GET_OBJ_EXTRA(obj), extra_bits, EF_ARRAY_MAX, buf2);
/* Build first half of menu. */
write_to_output(d,
@ -653,8 +653,8 @@ void oedit_disp_menu(struct descriptor_data *d)
grn, nrm, cyn, buf2
);
/* Send first half then build second half of menu. */
sprintbit(GET_OBJ_WEAR(obj), wear_bits, buf1, sizeof(buf1));
sprintbit(GET_OBJ_PERM(obj), affected_bits, buf2, sizeof(buf2));
sprintbitarray(GET_OBJ_WEAR(OLC_OBJ(d)), wear_bits, EF_ARRAY_MAX, buf1);
sprintbitarray(GET_OBJ_PERM(OLC_OBJ(d)), affected_bits, EF_ARRAY_MAX, buf2);
write_to_output(d,
"%s7%s) Wear flags : %s%s\r\n"
@ -889,7 +889,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
} else if (number == 0)
break;
else {
TOGGLE_BIT(GET_OBJ_EXTRA(OLC_OBJ(d)), 1 << (number - 1));
TOGGLE_BIT_AR(GET_OBJ_EXTRA(OLC_OBJ(d)), 1 << (number - 1));
oedit_disp_extra_menu(d);
return;
}
@ -903,7 +903,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
} else if (number == 0) /* Quit. */
break;
else {
TOGGLE_BIT(GET_OBJ_WEAR(OLC_OBJ(d)), 1 << (number - 1));
TOGGLE_BIT_AR(GET_OBJ_WEAR(OLC_OBJ(d)), 1 << (number - 1));
oedit_disp_wear_menu(d);
return;
}
@ -931,11 +931,11 @@ void oedit_parse(struct descriptor_data *d, char *arg)
case OEDIT_PERM:
if ((number = atoi(arg)) == 0)
break;
if (number > 0 && number <= NUM_AFF_FLAGS)
TOGGLE_BIT(GET_OBJ_PERM(OLC_OBJ(d)), 1 << (number - 1));
if (IS_SET(GET_OBJ_PERM(OLC_OBJ(d)), AFF_BLIND | AFF_GROUP | AFF_POISON | AFF_SLEEP | AFF_CHARM)) {
write_to_output(d, "Illegal bit(s) not set.\r\n");
REMOVE_BIT(GET_OBJ_PERM(OLC_OBJ(d)), AFF_BLIND | AFF_GROUP | AFF_POISON | AFF_SLEEP | AFF_CHARM);
if (number > 0 && number <= NUM_AFF_FLAGS) {
/* Setting AFF_CHARM on objects like this is dangerous. */
if (number != AFF_CHARM) {
TOGGLE_BIT_AR(GET_OBJ_PERM(OLC_OBJ(d)), number);
}
}
oedit_disp_perm_menu(d);
return;

View file

@ -205,6 +205,7 @@ int load_char(const char *name, struct char_data *ch)
FILE *fl;
char fname[40];
char buf[128], buf2[128], line[MAX_INPUT_LENGTH + 1], tag[6];
char f1[128], f2[128], f3[128], f4[128];
if ((id = get_ptable_by_name(name)) < 0)
return (-1);
@ -227,8 +228,6 @@ int load_char(const char *name, struct char_data *ch)
GET_HEIGHT(ch) = PFDEF_HEIGHT;
GET_WEIGHT(ch) = PFDEF_WEIGHT;
GET_ALIGNMENT(ch) = PFDEF_ALIGNMENT;
PLR_FLAGS(ch) = PFDEF_PLRFLAGS;
AFF_FLAGS(ch) = PFDEF_AFFFLAGS;
for (i = 0; i < NUM_OF_SAVE_THROWS; i++)
GET_SAVE(ch, i) = PFDEF_SAVETHROW;
GET_LOADROOM(ch) = PFDEF_LOADROOM;
@ -239,7 +238,6 @@ int load_char(const char *name, struct char_data *ch)
GET_COND(ch, THIRST) = PFDEF_THIRST;
GET_COND(ch, DRUNK) = PFDEF_DRUNK;
GET_BAD_PWS(ch) = PFDEF_BADPWS;
PRF_FLAGS(ch) = PFDEF_PREFFLAGS;
GET_PRACTICES(ch) = PFDEF_PRACTICES;
GET_GOLD(ch) = PFDEF_GOLD;
GET_BANK_GOLD(ch) = PFDEF_BANK;
@ -268,16 +266,33 @@ int load_char(const char *name, struct char_data *ch)
NEXT_SITTING(ch) = NULL;
GET_QUESTPOINTS(ch) = PFDEF_QUESTPOINTS;
for (i = 0; i < AF_ARRAY_MAX; i++)
AFF_FLAGS(ch)[i] = PFDEF_AFFFLAGS;
for (i = 0; i < PM_ARRAY_MAX; i++)
PLR_FLAGS(ch)[i] = PFDEF_PLRFLAGS;
for (i = 0; i < PR_ARRAY_MAX; i++)
PRF_FLAGS(ch)[i] = PFDEF_PREFFLAGS;
while (get_line(fl, line)) {
tag_argument(line, tag);
switch (*tag) {
case 'A':
if (!strcmp(tag, "Ac ")) GET_AC(ch) = atoi(line);
else if (!strcmp(tag, "Act ")) PLR_FLAGS(ch) = asciiflag_conv(line);
else if (!strcmp(tag, "Aff ")) AFF_FLAGS(ch) = asciiflag_conv(line);
else if (!strcmp(tag, "Affs")) load_affects(fl, ch);
else if (!strcmp(tag, "Alin")) GET_ALIGNMENT(ch) = atoi(line);
if (!strcmp(tag, "Ac ")) GET_AC(ch) = atoi(line);
else if (!strcmp(tag, "Act ")) {
sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
PLR_FLAGS(ch)[0] = asciiflag_conv(f1);
PLR_FLAGS(ch)[1] = asciiflag_conv(f2);
PLR_FLAGS(ch)[2] = asciiflag_conv(f3);
PLR_FLAGS(ch)[3] = asciiflag_conv(f4);
} else if (!strcmp(tag, "Aff ")) {
sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
AFF_FLAGS(ch)[0] = asciiflag_conv(f1);
AFF_FLAGS(ch)[1] = asciiflag_conv(f2);
AFF_FLAGS(ch)[2] = asciiflag_conv(f3);
AFF_FLAGS(ch)[3] = asciiflag_conv(f4);
} else if (!strcmp(tag, "Affs")) load_affects(fl, ch);
else if (!strcmp(tag, "Alin")) GET_ALIGNMENT(ch) = atoi(line);
else if (!strcmp(tag, "Alis")) read_aliases_ascii(fl, ch, atoi(line));
break;
@ -352,7 +367,12 @@ int load_char(const char *name, struct char_data *ch)
else if (!strcmp(tag, "Plyd")) ch->player.time.played = atoi(line);
else if (!strcmp(tag, "PfIn")) POOFIN(ch) = strdup(line);
else if (!strcmp(tag, "PfOt")) POOFOUT(ch) = strdup(line);
else if (!strcmp(tag, "Pref")) PRF_FLAGS(ch) = asciiflag_conv(line);
else if (!strcmp(tag, "Pref"))
sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
PRF_FLAGS(ch)[0] = asciiflag_conv(f1);
PRF_FLAGS(ch)[1] = asciiflag_conv(f2);
PRF_FLAGS(ch)[2] = asciiflag_conv(f3);
PRF_FLAGS(ch)[3] = asciiflag_conv(f4);
break;
case 'R':
@ -409,7 +429,7 @@ int load_char(const char *name, struct char_data *ch)
void save_char(struct char_data * ch)
{
FILE *fl;
char fname[40], bits[127], buf[MAX_STRING_LENGTH];
char fname[40], buf[MAX_STRING_LENGTH];
int i, id, save_index = FALSE;
struct affected_type *aff, tmp_aff[MAX_AFFECT];
struct obj_data *char_eq[NUM_WEARS];
@ -506,15 +526,12 @@ void save_char(struct char_data * ch)
if (GET_WEIGHT(ch) != PFDEF_HEIGHT) fprintf(fl, "Wate: %d\n", GET_WEIGHT(ch));
if (GET_ALIGNMENT(ch) != PFDEF_ALIGNMENT) fprintf(fl, "Alin: %d\n", GET_ALIGNMENT(ch));
if (PLR_FLAGS(ch) != PFDEF_PLRFLAGS) {
sprintascii(bits, PLR_FLAGS(ch)); fprintf(fl, "Act : %s\n", bits);
}
if (AFF_FLAGS(ch) != PFDEF_AFFFLAGS) {
sprintascii(bits, AFF_FLAGS(ch)); fprintf(fl, "Aff : %s\n", bits);
}
if (PRF_FLAGS(ch) != PFDEF_PREFFLAGS) {
sprintascii(bits, PRF_FLAGS(ch)); fprintf(fl, "Pref: %s\n", bits);
}
if(PLR_FLAGS(ch) != PFDEF_PLRFLAGS)
fprintf(fl, "Act : %u %u %u %u\n", PLR_FLAGS(ch)[0], PLR_FLAGS(ch)[1], PLR_FLAGS(ch)[2], PLR_FLAGS(ch)[3]);
if(AFF_FLAGS(ch) != PFDEF_AFFFLAGS)
fprintf(fl, "Aff : %u %u %u %u\n", AFF_FLAGS(ch)[0], AFF_FLAGS(ch)[1], AFF_FLAGS(ch)[2], AFF_FLAGS(ch)[3]);
if(PRF_FLAGS(ch) != PFDEF_PREFFLAGS)
fprintf(fl, "Pref: %d %d %d %d\n", PRF_FLAGS(ch)[0], PRF_FLAGS(ch)[1], PRF_FLAGS(ch)[2], PRF_FLAGS(ch)[3]);
if (GET_SAVE(ch, 0) != PFDEF_SAVETHROW) fprintf(fl, "Thr1: %d\n", GET_SAVE(ch, 0));
if (GET_SAVE(ch, 1) != PFDEF_SAVETHROW) fprintf(fl, "Thr2: %d\n", GET_SAVE(ch, 1));

View file

@ -141,7 +141,7 @@ ACMD(do_oasis_redit)
STATE(d) = CON_REDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));
@ -381,7 +381,7 @@ void redit_disp_flag_menu(struct descriptor_data *d)
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm,
room_bits[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbit(OLC_ROOM(d)->room_flags, room_bits, bits, sizeof(bits));
sprintbitarray(OLC_ROOM(d)->room_flags, room_bits, RF_ARRAY_MAX, bits);
write_to_output(d, "\r\nRoom flags: %s%s%s\r\n"
"Enter room flags, 0 to quit : ", cyn, bits, nrm);
OLC_MODE(d) = REDIT_FLAGS;
@ -412,7 +412,7 @@ void redit_disp_menu(struct descriptor_data *d)
clear_screen(d);
room = OLC_ROOM(d);
sprintbit((long)room->room_flags, room_bits, buf1, sizeof(buf1));
sprintbitarray(room->room_flags, room_bits, RF_ARRAY_MAX, buf1);
sprinttype(room->sector_type, sector_types, buf2, sizeof(buf2));
write_to_output(d,
"-- Room number : [%s%d%s] Room zone: [%s%d%s]\r\n"
@ -611,7 +611,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
break;
else {
/* Toggle the bit. */
TOGGLE_BIT(OLC_ROOM(d)->room_flags, 1 << (number - 1));
TOGGLE_BIT_AR(OLC_ROOM(d)->room_flags, 1 << (number - 1));
redit_disp_flag_menu(d);
}
return;

View file

@ -167,7 +167,7 @@ ACMD(do_oasis_sedit)
STATE(d) = CON_SEDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));

View file

@ -634,7 +634,7 @@ SPECIAL(pet_shops)
pet = read_mobile(GET_MOB_RNUM(pet), REAL);
GET_EXP(pet) = 0;
SET_BIT(AFF_FLAGS(pet), AFF_CHARM);
SET_BIT_AR(AFF_FLAGS(pet), AFF_CHARM);
if (*pet_name) {
snprintf(buf, sizeof(buf), "%s %s", pet->player.name, pet_name);

View file

@ -279,7 +279,7 @@ ASPELL(spell_charm)
act("Isn't $n just such a nice fellow?", FALSE, ch, 0, victim, TO_VICT);
if (IS_NPC(victim))
REMOVE_BIT(MOB_FLAGS(victim), MOB_SPEC);
REMOVE_BIT_AR(MOB_FLAGS(victim), MOB_SPEC);
}
}
@ -295,11 +295,11 @@ ASPELL(spell_identify)
send_to_char(ch, "You feel informed:\r\nObject '%s', Item type: %s\r\n", obj->short_description, bitbuf);
if (GET_OBJ_AFFECT(obj)) {
sprintbit(GET_OBJ_AFFECT(obj), affected_bits, bitbuf, sizeof(bitbuf));
sprintbitarray(GET_OBJ_AFFECT(obj), affected_bits, AF_ARRAY_MAX, bitbuf);
send_to_char(ch, "Item will give you following abilities: %s\r\n", bitbuf);
}
sprintbit(GET_OBJ_EXTRA(obj), extra_bits, bitbuf, sizeof(bitbuf));
sprintbitarray(GET_OBJ_EXTRA(obj), extra_bits, AF_ARRAY_MAX, bitbuf);
send_to_char(ch, "Item is: %s\r\n", bitbuf);
send_to_char(ch, "Weight: %d, Value: %d, Rent: %d, Min. level: %d\r\n",
@ -389,7 +389,7 @@ ASPELL(spell_enchant_weapon)
if (obj->affected[i].location != APPLY_NONE)
return;
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_MAGIC);
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_MAGIC);
obj->affected[0].location = APPLY_HITROLL;
obj->affected[0].modifier = 1 + (level >= 18);
@ -398,10 +398,10 @@ ASPELL(spell_enchant_weapon)
obj->affected[1].modifier = 1 + (level >= 20);
if (IS_GOOD(ch)) {
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_ANTI_EVIL);
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_ANTI_EVIL);
act("$p glows blue.", FALSE, ch, obj, 0, TO_CHAR);
} else if (IS_EVIL(ch)) {
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_ANTI_GOOD);
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_ANTI_GOOD);
act("$p glows red.", FALSE, ch, obj, 0, TO_CHAR);
} else
act("$p glows yellow.", FALSE, ch, obj, 0, TO_CHAR);

View file

@ -53,22 +53,22 @@
/* Room flags: used in room_data.room_flags */
/* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */
#define ROOM_DARK (1 << 0) /* Dark */
#define ROOM_DEATH (1 << 1) /* Death trap */
#define ROOM_NOMOB (1 << 2) /* MOBs not allowed */
#define ROOM_INDOORS (1 << 3) /* Indoors */
#define ROOM_PEACEFUL (1 << 4) /* Violence not allowed */
#define ROOM_SOUNDPROOF (1 << 5) /* Shouts, gossip blocked */
#define ROOM_NOTRACK (1 << 6) /* Track won't go through */
#define ROOM_NOMAGIC (1 << 7) /* Magic not allowed */
#define ROOM_TUNNEL (1 << 8) /* room for only 1 pers */
#define ROOM_PRIVATE (1 << 9) /* Can't teleport in */
#define ROOM_GODROOM (1 << 10) /* LVL_GOD+ only allowed */
#define ROOM_HOUSE (1 << 11) /* (R) Room is a house */
#define ROOM_HOUSE_CRASH (1 << 12) /* (R) House needs saving */
#define ROOM_ATRIUM (1 << 13) /* (R) The door to a house */
#define ROOM_OLC (1 << 14) /* (R) Modifyable/!compress */
#define ROOM_BFS_MARK (1 << 15) /* (R) breath-first srch mrk */
#define ROOM_DARK 0 /* Dark */
#define ROOM_DEATH 1 /* Death trap */
#define ROOM_NOMOB 2 /* MOBs not allowed */
#define ROOM_INDOORS 3 /* Indoors */
#define ROOM_PEACEFUL 4 /* Violence not allowed */
#define ROOM_SOUNDPROOF 5 /* Shouts, gossip blocked */
#define ROOM_NOTRACK 6 /* Track won't go through */
#define ROOM_NOMAGIC 7 /* Magic not allowed */
#define ROOM_TUNNEL 8 /* room for only 1 pers */
#define ROOM_PRIVATE 9 /* Can't teleport in */
#define ROOM_GODROOM 10 /* LVL_GOD+ only allowed */
#define ROOM_HOUSE 11 /* (R) Room is a house */
#define ROOM_HOUSE_CRASH 12 /* (R) House needs saving */
#define ROOM_ATRIUM 13 /* (R) The door to a house */
#define ROOM_OLC 14 /* (R) Modifyable/!compress */
#define ROOM_BFS_MARK 15 /* (R) breath-first srch mrk */
/* Exit info: used in room_data.dir_option.exit_info */
#define EX_ISDOOR (1 << 0) /* Exit is a door */
@ -137,102 +137,102 @@
#define POS_STANDING 8 /* standing */
/* Player flags: used by char_data.char_specials.act */
#define PLR_KILLER (1 << 0) /* Player is a player-killer */
#define PLR_THIEF (1 << 1) /* Player is a player-thief */
#define PLR_FROZEN (1 << 2) /* Player is frozen */
#define PLR_DONTSET (1 << 3) /* Don't EVER set (ISNPC bit) */
#define PLR_WRITING (1 << 4) /* Player writing (board/mail/olc) */
#define PLR_MAILING (1 << 5) /* Player is writing mail */
#define PLR_CRASH (1 << 6) /* Player needs to be crash-saved */
#define PLR_SITEOK (1 << 7) /* Player has been site-cleared */
#define PLR_NOSHOUT (1 << 8) /* Player not allowed to shout/goss */
#define PLR_NOTITLE (1 << 9) /* Player not allowed to set title */
#define PLR_DELETED (1 << 10) /* Player deleted - space reusable */
#define PLR_LOADROOM (1 << 11) /* Player uses nonstandard loadroom */
#define PLR_NOWIZLIST (1 << 12) /* Player shouldn't be on wizlist */
#define PLR_NODELETE (1 << 13) /* Player shouldn't be deleted */
#define PLR_INVSTART (1 << 14) /* Player should enter game wizinvis */
#define PLR_CRYO (1 << 15) /* Player is cryo-saved (purge prog) */
#define PLR_NOTDEADYET (1 << 16) /* (R) Player being extracted. */
#define PLR_KILLER 0 /* Player is a player-killer */
#define PLR_THIEF 1 /* Player is a player-thief */
#define PLR_FROZEN 2 /* Player is frozen */
#define PLR_DONTSET 3 /* Don't EVER set (ISNPC bit) */
#define PLR_WRITING 4 /* Player writing (board/mail/olc) */
#define PLR_MAILING 5 /* Player is writing mail */
#define PLR_CRASH 6 /* Player needs to be crash-saved */
#define PLR_SITEOK 7 /* Player has been site-cleared */
#define PLR_NOSHOUT 8 /* Player not allowed to shout/goss */
#define PLR_NOTITLE 9 /* Player not allowed to set title */
#define PLR_DELETED 10 /* Player deleted - space reusable */
#define PLR_LOADROOM 11 /* Player uses nonstandard loadroom */
#define PLR_NOWIZLIST 12 /* Player shouldn't be on wizlist */
#define PLR_NODELETE 13 /* Player shouldn't be deleted */
#define PLR_INVSTART 14 /* Player should enter game wizinvis */
#define PLR_CRYO 15 /* Player is cryo-saved (purge prog) */
#define PLR_NOTDEADYET 16 /* (R) Player being extracted */
/* Mobile flags: used by char_data.char_specials.act */
#define MOB_SPEC (1 << 0) /* Mob has a callable spec-proc */
#define MOB_SENTINEL (1 << 1) /* Mob should not move */
#define MOB_SCAVENGER (1 << 2) /* Mob picks up stuff on the ground */
#define MOB_ISNPC (1 << 3) /* (R) Automatically set on all Mobs */
#define MOB_AWARE (1 << 4) /* Mob can't be backstabbed */
#define MOB_AGGRESSIVE (1 << 5) /* Mob auto-attacks everybody nearby */
#define MOB_STAY_ZONE (1 << 6) /* Mob shouldn't wander out of zone */
#define MOB_WIMPY (1 << 7) /* Mob flees if severely injured */
#define MOB_AGGR_EVIL (1 << 8) /* Auto-attack any evil PC's */
#define MOB_AGGR_GOOD (1 << 9) /* Auto-attack any good PC's */
#define MOB_AGGR_NEUTRAL (1 << 10) /* Auto-attack any neutral PC's */
#define MOB_MEMORY (1 << 11) /* remember attackers if attacked */
#define MOB_HELPER (1 << 12) /* attack PCs fighting other NPCs */
#define MOB_NOCHARM (1 << 13) /* Mob can't be charmed */
#define MOB_NOSUMMON (1 << 14) /* Mob can't be summoned */
#define MOB_NOSLEEP (1 << 15) /* Mob can't be slept */
#define MOB_NOBASH (1 << 16) /* Mob can't be bashed (e.g. trees) */
#define MOB_NOBLIND (1 << 17) /* Mob can't be blinded */
#define MOB_NOTDEADYET (1 << 18) /* (R) Mob being extracted. */
#define MOB_SPEC 0 /* Mob has a callable spec-proc */
#define MOB_SENTINEL 1 /* Mob should not move */
#define MOB_SCAVENGER 2 /* Mob picks up stuff on the ground */
#define MOB_ISNPC 3 /* (R) Automatically set on all Mobs */
#define MOB_AWARE 4 /* Mob can't be backstabbed */
#define MOB_AGGRESSIVE 5 /* Mob auto-attacks everybody nearby */
#define MOB_STAY_ZONE 6 /* Mob shouldn't wander out of zone */
#define MOB_WIMPY 7 /* Mob flees if severely injured */
#define MOB_AGGR_EVIL 8 /* Auto-attack any evil PC's */
#define MOB_AGGR_GOOD 9 /* Auto-attack any good PC's */
#define MOB_AGGR_NEUTRAL 10 /* Auto-attack any neutral PC's */
#define MOB_MEMORY 11 /* remember attackers if attacked */
#define MOB_HELPER 12 /* attack PCs fighting other NPCs */
#define MOB_NOCHARM 13 /* Mob can't be charmed */
#define MOB_NOSUMMON 14 /* Mob can't be summoned */
#define MOB_NOSLEEP 15 /* Mob can't be slept */
#define MOB_NOBASH 16 /* Mob can't be bashed (e.g. trees) */
#define MOB_NOBLIND 17 /* Mob can't be blinded */
#define MOB_NOTDEADYET 18 /* (R) Mob being extracted */
/* Preference flags: used by char_data.player_specials.pref */
#define PRF_BRIEF (1 << 0) /* Room descs won't normally be shown */
#define PRF_COMPACT (1 << 1) /* No extra CRLF pair before prompts */
#define PRF_NOSHOUT (1 << 2) /* Can't hear shouts */
#define PRF_NOTELL (1 << 3) /* Can't receive tells */
#define PRF_DISPHP (1 << 4) /* Display hit points in prompt */
#define PRF_DISPMANA (1 << 5) /* Display mana points in prompt */
#define PRF_DISPMOVE (1 << 6) /* Display move points in prompt */
#define PRF_AUTOEXIT (1 << 7) /* Display exits in a room */
#define PRF_NOHASSLE (1 << 8) /* Aggr mobs won't attack */
#define PRF_QUEST (1 << 9) /* On quest */
#define PRF_SUMMONABLE (1 << 10) /* Can be summoned */
#define PRF_NOREPEAT (1 << 11) /* No repetition of comm commands */
#define PRF_HOLYLIGHT (1 << 12) /* Can see in dark */
#define PRF_COLOR_1 (1 << 13) /* Color (low bit) */
#define PRF_COLOR_2 (1 << 14) /* Color (high bit) */
#define PRF_NOWIZ (1 << 15) /* Can't hear wizline */
#define PRF_LOG1 (1 << 16) /* On-line System Log (low bit) */
#define PRF_LOG2 (1 << 17) /* On-line System Log (high bit) */
#define PRF_NOAUCT (1 << 18) /* Can't hear auction channel */
#define PRF_NOGOSS (1 << 19) /* Can't hear gossip channel */
#define PRF_NOGRATZ (1 << 20) /* Can't hear grats channel */
#define PRF_SHOWVNUMS (1 << 21) /* Can see VNUMs */
#define PRF_DISPAUTO (1 << 22) /* Show prompt HP, MP, MV when < 25%. */
#define PRF_CLS (1 << 23) /* Clear screen in OLC */
#define PRF_BUILDWALK (1 << 24) /* Build new rooms while walking ? */
#define PRF_AFK (1 << 25) /* AFK flag */
#define PRF_AUTOLOOT (1 << 26) /* Loot everything from a corpse */
#define PRF_AUTOGOLD (1 << 27) /* Loot gold from a corpse */
#define PRF_AUTOSPLIT (1 << 28) /* Split gold with group */
#define PRF_AUTOSAC (1 << 29) /* Sacrifice a corpse */
#define PRF_AUTOASSIST (1 << 30) /* Auto-assist toggle */
#define PRF_BRIEF 0 /* Room descs won't normally be shown */
#define PRF_COMPACT 1 /* No extra CRLF pair before prompts */
#define PRF_NOSHOUT 2 /* Can't hear shouts */
#define PRF_NOTELL 3 /* Can't receive tells */
#define PRF_DISPHP 4 /* Display hit points in prompt */
#define PRF_DISPMANA 5 /* Display mana points in prompt */
#define PRF_DISPMOVE 6 /* Display move points in prompt */
#define PRF_AUTOEXIT 7 /* Display exits in a room */
#define PRF_NOHASSLE 8 /* Aggr mobs won't attack */
#define PRF_QUEST 9 /* On quest */
#define PRF_SUMMONABLE 10 /* Can be summoned */
#define PRF_NOREPEAT 11 /* No repetition of comm commands */
#define PRF_HOLYLIGHT 12 /* Can see in dark */
#define PRF_COLOR_1 13 /* Color (low bit) */
#define PRF_COLOR_2 14 /* Color (high bit) */
#define PRF_NOWIZ 15 /* Can't hear wizline */
#define PRF_LOG1 16 /* On-line System Log (low bit) */
#define PRF_LOG2 17 /* On-line System Log (high bit) */
#define PRF_NOAUCT 18 /* Can't hear auction channel */
#define PRF_NOGOSS 19 /* Can't hear gossip channel */
#define PRF_NOGRATZ 20 /* Can't hear grats channel */
#define PRF_SHOWVNUMS 21 /* Can see VNUMs */
#define PRF_DISPAUTO 22 /* Show prompt HP, MP, MV when < 25% */
#define PRF_CLS 23 /* Clear screen in OLC */
#define PRF_BUILDWALK 24 /* Build new rooms while walking */
#define PRF_AFK 25 /* AFK flag */
#define PRF_AUTOLOOT 26 /* Loot everything from a corpse */
#define PRF_AUTOGOLD 27 /* Loot gold from a corpse */
#define PRF_AUTOSPLIT 28 /* Split gold with group */
#define PRF_AUTOSAC 29 /* Sacrifice a corpse */
#define PRF_AUTOASSIST 30 /* Auto-assist toggle */
/* Affect bits: used in char_data.char_specials.saved.affected_by */
/* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */
#define AFF_BLIND (1 << 0) /* (R) Char is blind */
#define AFF_INVISIBLE (1 << 1) /* Char is invisible */
#define AFF_DETECT_ALIGN (1 << 2) /* Char is sensitive to align*/
#define AFF_DETECT_INVIS (1 << 3) /* Char can see invis chars */
#define AFF_DETECT_MAGIC (1 << 4) /* Char is sensitive to magic*/
#define AFF_SENSE_LIFE (1 << 5) /* Char can sense hidden life*/
#define AFF_WATERWALK (1 << 6) /* Char can walk on water */
#define AFF_SANCTUARY (1 << 7) /* Char protected by sanct. */
#define AFF_GROUP (1 << 8) /* (R) Char is grouped */
#define AFF_CURSE (1 << 9) /* Char is cursed */
#define AFF_INFRAVISION (1 << 10) /* Char can see in dark */
#define AFF_POISON (1 << 11) /* (R) Char is poisoned */
#define AFF_PROTECT_EVIL (1 << 12) /* Char protected from evil */
#define AFF_PROTECT_GOOD (1 << 13) /* Char protected from good */
#define AFF_SLEEP (1 << 14) /* (R) Char magically asleep */
#define AFF_NOTRACK (1 << 15) /* Char can't be tracked */
#define AFF_UNUSED16 (1 << 16) /* Room for future expansion */
#define AFF_UNUSED17 (1 << 17) /* Room for future expansion */
#define AFF_SNEAK (1 << 18) /* Char can move quietly */
#define AFF_HIDE (1 << 19) /* Char is hidden */
#define AFF_UNUSED20 (1 << 20) /* Room for future expansion */
#define AFF_CHARM (1 << 21) /* Char is charmed */
#define AFF_BLIND 0 /* (R) Char is blind */
#define AFF_INVISIBLE 1 /* Char is invisible */
#define AFF_DETECT_ALIGN 2 /* Char is sensitive to align*/
#define AFF_DETECT_INVIS 3 /* Char can see invis chars */
#define AFF_DETECT_MAGIC 4 /* Char is sensitive to magic*/
#define AFF_SENSE_LIFE 5 /* Char can sense hidden life*/
#define AFF_WATERWALK 6 /* Char can walk on water */
#define AFF_SANCTUARY 7 /* Char protected by sanct */
#define AFF_GROUP 8 /* (R) Char is grouped */
#define AFF_CURSE 9 /* Char is cursed */
#define AFF_INFRAVISION 10 /* Char can see in dark */
#define AFF_POISON 11 /* (R) Char is poisoned */
#define AFF_PROTECT_EVIL 12 /* Char protected from evil */
#define AFF_PROTECT_GOOD 13 /* Char protected from good */
#define AFF_SLEEP 14 /* (R) Char magically asleep */
#define AFF_NOTRACK 15 /* Char can't be tracked */
#define AFF_UNUSED16 16 /* Room for future expansion */
#define AFF_UNUSED17 17 /* Room for future expansion */
#define AFF_SNEAK 18 /* Char can move quietly */
#define AFF_HIDE 19 /* Char is hidden */
#define AFF_UNUSED20 20 /* Room for future expansion */
#define AFF_CHARM 21 /* Char is charmed */
/* Modes of connectedness: used by descriptor_data.state */
#define CON_PLAYING 0 /* Playing - Nominal state */
@ -315,40 +315,40 @@
#define ITEM_FOUNTAIN 23 /* Item is a fountain */
/* Take/Wear flags: used by obj_data.obj_flags.wear_flags */
#define ITEM_WEAR_TAKE (1 << 0) /* Item can be taken */
#define ITEM_WEAR_FINGER (1 << 1) /* Can be worn on finger */
#define ITEM_WEAR_NECK (1 << 2) /* Can be worn around neck */
#define ITEM_WEAR_BODY (1 << 3) /* Can be worn on body */
#define ITEM_WEAR_HEAD (1 << 4) /* Can be worn on head */
#define ITEM_WEAR_LEGS (1 << 5) /* Can be worn on legs */
#define ITEM_WEAR_FEET (1 << 6) /* Can be worn on feet */
#define ITEM_WEAR_HANDS (1 << 7) /* Can be worn on hands */
#define ITEM_WEAR_ARMS (1 << 8) /* Can be worn on arms */
#define ITEM_WEAR_SHIELD (1 << 9) /* Can be used as a shield */
#define ITEM_WEAR_ABOUT (1 << 10) /* Can be worn about body */
#define ITEM_WEAR_WAIST (1 << 11) /* Can be worn around waist */
#define ITEM_WEAR_WRIST (1 << 12) /* Can be worn on wrist */
#define ITEM_WEAR_WIELD (1 << 13) /* Can be wielded */
#define ITEM_WEAR_HOLD (1 << 14) /* Can be held */
#define ITEM_WEAR_TAKE 0 /* Item can be taken */
#define ITEM_WEAR_FINGER 1 /* Can be worn on finger */
#define ITEM_WEAR_NECK 2 /* Can be worn around neck */
#define ITEM_WEAR_BODY 3 /* Can be worn on body */
#define ITEM_WEAR_HEAD 4 /* Can be worn on head */
#define ITEM_WEAR_LEGS 5 /* Can be worn on legs */
#define ITEM_WEAR_FEET 6 /* Can be worn on feet */
#define ITEM_WEAR_HANDS 7 /* Can be worn on hands */
#define ITEM_WEAR_ARMS 8 /* Can be worn on arms */
#define ITEM_WEAR_SHIELD 9 /* Can be used as a shield */
#define ITEM_WEAR_ABOUT 10 /* Can be worn about body */
#define ITEM_WEAR_WAIST 11 /* Can be worn around waist */
#define ITEM_WEAR_WRIST 12 /* Can be worn on wrist */
#define ITEM_WEAR_WIELD 13 /* Can be wielded */
#define ITEM_WEAR_HOLD 14 /* Can be held */
/* Extra object flags: used by obj_data.obj_flags.extra_flags */
#define ITEM_GLOW (1 << 0) /* Item is glowing */
#define ITEM_HUM (1 << 1) /* Item is humming */
#define ITEM_NORENT (1 << 2) /* Item cannot be rented */
#define ITEM_NODONATE (1 << 3) /* Item cannot be donated */
#define ITEM_NOINVIS (1 << 4) /* Item cannot be made invis */
#define ITEM_INVISIBLE (1 << 5) /* Item is invisible */
#define ITEM_MAGIC (1 << 6) /* Item is magical */
#define ITEM_NODROP (1 << 7) /* Item is cursed: can't drop */
#define ITEM_BLESS (1 << 8) /* Item is blessed */
#define ITEM_ANTI_GOOD (1 << 9) /* Not usable by good people */
#define ITEM_ANTI_EVIL (1 << 10) /* Not usable by evil people */
#define ITEM_ANTI_NEUTRAL (1 << 11) /* Not usable by neutral people */
#define ITEM_ANTI_MAGIC_USER (1 << 12) /* Not usable by mages */
#define ITEM_ANTI_CLERIC (1 << 13) /* Not usable by clerics */
#define ITEM_ANTI_THIEF (1 << 14) /* Not usable by thieves */
#define ITEM_ANTI_WARRIOR (1 << 15) /* Not usable by warriors */
#define ITEM_NOSELL (1 << 16) /* Shopkeepers won't touch it */
#define ITEM_GLOW 0 /* Item is glowing */
#define ITEM_HUM 1 /* Item is humming */
#define ITEM_NORENT 2 /* Item cannot be rented */
#define ITEM_NODONATE 3 /* Item cannot be donated */
#define ITEM_NOINVIS 4 /* Item cannot be made invis */
#define ITEM_INVISIBLE 5 /* Item is invisible */
#define ITEM_MAGIC 6 /* Item is magical */
#define ITEM_NODROP 7 /* Item is cursed: can't drop */
#define ITEM_BLESS 8 /* Item is blessed */
#define ITEM_ANTI_GOOD 9 /* Not usable by good people */
#define ITEM_ANTI_EVIL 10 /* Not usable by evil people */
#define ITEM_ANTI_NEUTRAL 11 /* Not usable by neutral people */
#define ITEM_ANTI_MAGIC_USER 12 /* Not usable by mages */
#define ITEM_ANTI_CLERIC 13 /* Not usable by clerics */
#define ITEM_ANTI_THIEF 14 /* Not usable by thieves */
#define ITEM_ANTI_WARRIOR 15 /* Not usable by warriors */
#define ITEM_NOSELL 16 /* Shopkeepers won't touch it */
/* Modifier constants used with obj affects ('A' fields) */
#define APPLY_NONE 0 /* No effect */
@ -427,6 +427,14 @@
#define RENT_FORCED 4
#define RENT_TIMEDOUT 5
/* 128 Bits */
#define RF_ARRAY_MAX 4
#define PM_ARRAY_MAX 4
#define PR_ARRAY_MAX 4
#define AF_ARRAY_MAX 4
#define TW_ARRAY_MAX 4
#define EF_ARRAY_MAX 4
/* other #defined constants */
/* **DO**NOT** blindly change the number of levels in your MUD merely by
* changing these numbers and without changing the rest of the code to match.
@ -545,13 +553,13 @@ struct obj_flag_data {
int value[NUM_OBJ_VAL_POSITIONS]; /* Values of the item (see list) */
byte type_flag; /* Type of item */
int level; /* Minimum level of object */
int /*bitvector_t*/ wear_flags; /* Where you can wear it */
int /*bitvector_t*/ extra_flags; /* If it hums, glows, etc. */
int wear_flags[TW_ARRAY_MAX]; /* Where you can wear it */
int extra_flags[EF_ARRAY_MAX]; /* If it hums, glows, etc. */
int weight; /* Weight what else */
int cost; /* Value when sold (gp.) */
int cost_per_day; /* Cost to keep pr. real day */
int timer; /* Timer for object */
long /*bitvector_t*/ bitvector; /* To set chars bits */
int bitvector[AF_ARRAY_MAX]; /* To set chars bits */
};
/* Used in obj_file_elem *DO*NOT*CHANGE* */
@ -597,10 +605,10 @@ struct obj_file_elem {
sh_int location;
#endif
int value[NUM_OBJ_VAL_POSITIONS];
int /*bitvector_t*/ extra_flags;
int extra_flags[EF_ARRAY_MAX];
int weight;
int timer;
long /*bitvector_t*/ bitvector;
int bitvector[AF_ARRAY_MAX];
struct obj_affected_type affected[MAX_OBJ_AFFECT];
};
@ -635,23 +643,20 @@ struct room_direction_data {
/* Memory Structure for room */
struct room_data {
room_vnum number; /* Rooms number (vnum) */
zone_rnum zone; /* Room zone (for resetting) */
int sector_type; /* sector type (move/hide) */
char *name; /* Rooms name 'You are ...' */
char *description; /* Shown when entered */
struct extra_descr_data *ex_description; /* for examine/look */
room_vnum number; /* Rooms number (vnum) */
zone_rnum zone; /* Room zone (for resetting) */
int sector_type; /* sector type (move/hide) */
int room_flags[RF_ARRAY_MAX]; /* DEATH, DARK, etc */
char *name; /* Rooms name */
char *description; /* Shown when entered */
struct extra_descr_data *ex_description; /* for look/examine */
struct room_direction_data *dir_option[NUM_OF_DIRS]; /* Directions */
int /*bitvector_t*/ room_flags; /* DEATH,DARK ... etc */
byte light; /* Number of lightsources in room */
byte light; /* Number of lightsources in room */
SPECIAL(*func);
struct trig_proto_list *proto_script; /* list of default triggers */
struct script_data *script; /* script info for the room */
struct obj_data *contents; /* List of items in room */
struct char_data *people; /* List of NPC / PC in room */
struct trig_proto_list *proto_script; /* list of default triggers */
struct script_data *script; /* script info for the room */
struct obj_data *contents; /* List of items in room */
struct char_data *people; /* List of NPC / PC in room */
};
/* char-related structures */
@ -736,10 +741,8 @@ struct char_point_data {
struct char_special_data_saved {
int alignment; /* +-1000 for alignments */
long idnum; /* player's idnum; -1 for mobiles */
long /*bitvector_t*/ act; /* act flag for NPC's; player flag for PC's */
long /*bitvector_t*/ affected_by;
/* Bitvector for spells/skills affected by */
int act[PM_ARRAY_MAX]; /* act flag for NPC's; player flag for PC's */
int affected_by[AF_ARRAY_MAX]; /* Bitvector for spells/skills affected by */
sh_int apply_saving_throw[5]; /* Saving throw (Bonuses) */
};
@ -760,21 +763,21 @@ struct char_special_data {
};
struct player_special_data_saved {
byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */
byte PADDING0; /* used to be spells_to_learn */
bool talks[MAX_TONGUE]; /* PC s Tongues 0 for NPC */
int wimp_level; /* Below this # of hit points, flee! */
byte freeze_level; /* Level of god who froze char, if any */
sh_int invis_level; /* level of invisibility */
room_vnum load_room; /* Which room to place char in */
long /*bitvector_t*/ pref; /* preference flags for PC's. */
ubyte bad_pws; /* number of bad password attemps */
sbyte conditions[3]; /* Drunk, hunger, thirst */
struct txt_block *comm_hist[NUM_HIST]; /* Player's communcations history */
ubyte page_length;
int spells_to_learn; /* How many can you learn yet this level*/
int olc_zone;
int questpoints;
byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */
byte PADDING0; /* used to be spells_to_learn */
bool talks[MAX_TONGUE]; /* PC s Tongues 0 for NPC */
int wimp_level; /* Below this # of hit points, flee! */
byte freeze_level; /* Level of god who froze char, if any */
sh_int invis_level; /* level of invisibility */
room_vnum load_room; /* Which room to place char in */
int pref[PR_ARRAY_MAX]; /* preference flags for players */
ubyte bad_pws; /* number of bad password attemps */
sbyte conditions[3]; /* Drunk, hunger, thirst */
struct txt_block *comm_hist[NUM_HIST]; /* Player's comms history */
ubyte page_length; /* How long a players page is */
int spells_to_learn; /* How many spells you can learn */
int olc_zone; /* A players olc access */
int questpoints; /* A players questpoints earned */
};
/* Specials needed only by PCs, not NPCs. Space for this structure is

View file

@ -150,6 +150,6 @@ ACMD(do_tedit)
string_write(ch->desc, (char **)fields[l].buffer, fields[l].size, 0, backstr);
act("$n begins editing a scroll.", TRUE, ch, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
STATE(ch->desc) = CON_TEDIT;
}

View file

@ -291,6 +291,32 @@ size_t sprinttype(int type, const char *names[], char *result, size_t reslen)
return strlcpy(result, *names[nr] != '\n' ? names[nr] : "UNDEFINED", reslen);
}
void sprintbitarray(int bitvector[], const char *names[], int maxar, char *result)
{
int nr, teller, found = FALSE;
*result = '\0';
for(teller = 0; teller < maxar && !found; teller++)
for (nr = 0; nr < 32 && !found; nr++) {
if (IS_SET_AR(bitvector, (teller*32)+nr)) {
if (*names[(teller*32)+nr] != '\n') {
if (*names[(teller*32)+nr] != '\0') {
strcat(result, names[(teller*32)+nr]);
strcat(result, " ");
}
} else {
strcat(result, "UNDEFINED ");
}
}
if (*names[(teller*32)+nr] == '\n')
found = TRUE;
}
if (!*result)
strcpy(result, "NOBITS ");
}
/* Calculate the REAL time passed over the last t2-t1 centuries (secs) */
struct time_info_data *real_time_passed(time_t t2, time_t t1)
{
@ -404,7 +430,7 @@ void stop_follower(struct char_data *ch)
}
ch->master = NULL;
REMOVE_BIT(AFF_FLAGS(ch), AFF_CHARM | AFF_GROUP);
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_CHARM | AFF_GROUP);
}
int num_followers_charmed(struct char_data *ch)

View file

@ -26,6 +26,7 @@ int rand_number(int from, int to);
int dice(int number, int size);
size_t sprintbit(bitvector_t vektor, const char *names[], char *result, size_t reslen);
size_t sprinttype(int type, const char *names[], char *result, size_t reslen);
void sprintbitarray(int bitvector[], const char *names[], int maxar, char *result);
int get_line(FILE *fl, char *buf);
int get_filename(char *filename, size_t fbufsize, int mode, const char *orig_name);
time_t mud_time_to_secs(struct time_info_data *now);
@ -172,6 +173,12 @@ void char_from_furniture(struct char_data *ch);
} \
/* basic bitvector utils */
#define Q_FIELD(x) ((int) (x) / 32)
#define Q_BIT(x) (1 << ((x) % 32))
#define IS_SET_AR(var, bit) ((var)[Q_FIELD(bit)] & Q_BIT(bit))
#define SET_BIT_AR(var, bit) ((var)[Q_FIELD(bit)] |= Q_BIT(bit))
#define REMOVE_BIT_AR(var, bit) ((var)[Q_FIELD(bit)] &= ~Q_BIT(bit))
#define TOGGLE_BIT_AR(var, bit) ((var)[Q_FIELD(bit)] = (var)[Q_FIELD(bit)] ^ Q_BIT(bit))
#define IS_SET(flag,bit) ((flag) & (bit))
#define SET_BIT(var,bit) ((var) |= (bit))
#define REMOVE_BIT(var,bit) ((var) &= ~(bit))
@ -198,27 +205,27 @@ void char_from_furniture(struct char_data *ch);
#define SPELL_ROUTINES(spl) (spell_info[spl].routines)
/* IS_MOB() acts as a VALID_MOB_RNUM()-like function.*/
#define IS_NPC(ch) (IS_SET(MOB_FLAGS(ch), MOB_ISNPC))
#define IS_NPC(ch) (IS_SET_AR(MOB_FLAGS(ch), MOB_ISNPC))
#define IS_MOB(ch) (IS_NPC(ch) && GET_MOB_RNUM(ch) <= top_of_mobt && \
GET_MOB_RNUM(ch) != NOBODY)
#define MOB_FLAGGED(ch, flag) (IS_NPC(ch) && IS_SET(MOB_FLAGS(ch), (flag)))
#define PLR_FLAGGED(ch, flag) (!IS_NPC(ch) && IS_SET(PLR_FLAGS(ch), (flag)))
#define AFF_FLAGGED(ch, flag) (IS_SET(AFF_FLAGS(ch), (flag)))
#define PRF_FLAGGED(ch, flag) (IS_SET(PRF_FLAGS(ch), (flag)))
#define ROOM_FLAGGED(loc, flag) (IS_SET(ROOM_FLAGS(loc), (flag)))
#define MOB_FLAGGED(ch, flag) (IS_NPC(ch) && IS_SET_AR(MOB_FLAGS(ch), (flag)))
#define PLR_FLAGGED(ch, flag) (!IS_NPC(ch) && IS_SET_AR(PLR_FLAGS(ch), (flag)))
#define AFF_FLAGGED(ch, flag) (IS_SET_AR(AFF_FLAGS(ch), (flag)))
#define PRF_FLAGGED(ch, flag) (IS_SET_AR(PRF_FLAGS(ch), (flag)))
#define ROOM_FLAGGED(loc, flag) (IS_SET_AR(ROOM_FLAGS(loc), (flag)))
#define EXIT_FLAGGED(exit, flag) (IS_SET((exit)->exit_info, (flag)))
#define OBJAFF_FLAGGED(obj, flag) (IS_SET(GET_OBJ_AFFECT(obj), (flag)))
#define OBJVAL_FLAGGED(obj, flag) (IS_SET(GET_OBJ_VAL((obj), 1), (flag)))
#define OBJWEAR_FLAGGED(obj, flag) (IS_SET(GET_OBJ_WEAR(obj), (flag)))
#define OBJ_FLAGGED(obj, flag) (IS_SET(GET_OBJ_EXTRA(obj), (flag)))
#define OBJWEAR_FLAGGED(obj, flag) (IS_SET_AR(GET_OBJ_WEAR(obj), (flag)))
#define OBJ_FLAGGED(obj, flag) (IS_SET_AR(GET_OBJ_EXTRA(obj), (flag)))
#define HAS_SPELL_ROUTINE(spl, flag) (IS_SET(SPELL_ROUTINES(spl), (flag)))
/* IS_AFFECTED for backwards compatibility */
#define IS_AFFECTED(ch, skill) (AFF_FLAGGED((ch), (skill)))
#define PLR_TOG_CHK(ch,flag) ((TOGGLE_BIT(PLR_FLAGS(ch), (flag))) & (flag))
#define PRF_TOG_CHK(ch,flag) ((TOGGLE_BIT(PRF_FLAGS(ch), (flag))) & (flag))
#define PLR_TOG_CHK(ch,flag) ((TOGGLE_BIT_AR(PLR_FLAGS(ch), (flag))) & (flag))
#define PRF_TOG_CHK(ch,flag) ((TOGGLE_BIT_AR(PRF_FLAGS(ch), (flag))) & Q_BIT(flag))
/* new define for quick check */
#define DEAD(ch) (PLR_FLAGGED((ch), PLR_NOTDEADYET) || MOB_FLAGGED((ch), MOB_NOTDEADYET))
@ -379,6 +386,7 @@ void char_from_furniture(struct char_data *ch);
#define GET_OBJ_RENT(obj) ((obj)->obj_flags.cost_per_day)
#define GET_OBJ_AFFECT(obj) ((obj)->obj_flags.bitvector)
#define GET_OBJ_EXTRA(obj) ((obj)->obj_flags.extra_flags)
#define GET_OBJ_EXTRA_AR(obj, i) ((obj)->obj_flags.extra_flags[(i)])
#define GET_OBJ_WEAR(obj) ((obj)->obj_flags.wear_flags)
#define GET_OBJ_VAL(obj, val) ((obj)->obj_flags.value[(val)])
#define GET_OBJ_WEIGHT(obj) ((obj)->obj_flags.weight)
@ -452,7 +460,7 @@ void char_from_furniture(struct char_data *ch);
(CAN_WEAR((obj), ITEM_WEAR_TAKE) && CAN_CARRY_OBJ((ch),(obj)) && \
CAN_SEE_OBJ((ch),(obj)))
#define PERS(ch, vict) GET_NAME(ch)
#define PERS(ch, vict) (CAN_SEE(vict, ch) ? GET_NAME(ch) : "someone")
#define OBJS(obj, vict) (CAN_SEE_OBJ((vict), (obj)) ? \
(obj)->short_description : "something")

View file

@ -181,7 +181,7 @@ ACMD(do_oasis_zedit)
STATE(d) = CON_ZEDIT;
act("$n starts using OLC.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing zone %d allowed zone %d",
GET_NAME(ch), zone_table[OLC_ZNUM(d)].number, GET_OLC_ZONE(ch));