Hi, All!
Here's what I found:
Interpreter.c; line 612:
else if (PLR_FLAGGED(ch, PLR_FROZEN) && GET_LEVEL(ch) < LVL_IMPL)
change to:
else if (!IS_NPC(ch) && ... )
Comm.c; line 2154:
#define SENDOK(ch) ((ch)->desc && (AWAKE(ch) || sleep) && \
!PLR_FLAGGED((ch), PLR_WRITING))
change to:
#define SENDOK(ch) ((ch)->desc && (AWAKE(ch) || sleep) && \
(IS_NPC(ch) || !PLR_FLAGGED((ch), PLR_WRITING)))
^^ and move it to utils.h
Fight.c; line 929: more serious bug: if player with PLR_KILLER flag tries
to attack someone, he is treated as mobile:
if (MOB_FLAGGED(ch, MOB_SPEC) && mob_index[GET_MOB_RNUM(ch)].func != NULL)
(mob_index[GET_MOB_RNUM(ch)].func) (ch, ch, 0, "");
change to:
if (IS_NPC(ch) && MOB_FLAGGED(ch, MOB_SPEC)) {
if (ch->nr > -1 && mob_index[GET_MOB_RNUM(ch)].func != NULL)
(mob_index[GET_MOB_RNUM(ch)].func) (ch, ch, 0, "");
else
log("SYSERR: Non-indexed NPC or MOB without function is flagged with
MOB_SPEC.");
}
Act.informatice.c; line 294:
if (PLR_FLAGGED(i, PLR_WRITING))
strcat(buf, " (writing)");
change to:
if (!IS_NPC(i) && PLR_FLAGGED(i, PLR_WRITING))
strcat(buf, " (writing)");
To detect other bugs of this type:
// first of all, remove CHECK() from PRF_FLAGS:
#define PRF_FLAGS(ch) ((ch)->player_specials->saved.pref)
// now replace the following macros with these ones:
#define MOB_FLAGGED(ch, flag) (IS_NPC(ch) ? IS_SET(MOB_FLAGS(ch), (flag)) : \
log("SYSERR: PC using MOB_FLAGS at %s:%d.", __FILE__,
__LINE__), FALSE)
#define PLR_FLAGGED(ch, flag) (!IS_NPC(ch) ? IS_SET(PLR_FLAGS(ch), (flag)) : \
log("SYSERR: NPC using PLR_FLAGS at %s:%d.", __FILE__,
__LINE__), FALSE)
#define PRF_FLAGGED(ch, flag) (!IS_NPC(ch) ? IS_SET(PRF_FLAGS(ch), (flag)) :\
(ch)->desc && (ch)->desc->original ? \
IS_SET(PRF_FLAGS((ch)->desc->original), (flag)) : \
log("SYSERR: non-switched NPC using PRF_FLAGS at
%s:%d.", __FILE__, __LINE__) ,0)
Ok, now I want to suggest another idea.
We can change few macros and allow switched players to use their color
and full statusbar (mobile's). (see how I made PRF_FLAGGED work?)
To George: If you're interested in implementing this, I can send you
everything I
changed to made it work.
Also, I think that ripping out entire commands for mobiles (do_score)
because of few variables (condition) whose can be avoided with a simple
if(!IS_NPC) is a bad thing to do.
Andrey (andrey@alex-ua.com)
aka Zmey // RMUD
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST