Some time ago I submitted do_order crash bug fix (by adding additional
variable struct char_data -> bool cloop_member; it isn't fixed yet, btw,
any player can crash MUD by calling "order" command). Here's my version
of perform_immort_invis (with correct visibility checking) which also uses
cloop_member variable (as visibility flag).
-void perform_immort_invis(struct char_data *ch, int level)
-{
- struct char_data *tch;
-
- if (IS_NPC(ch))
- return;
-
- for (tch = world[ch->in_room].people; tch; tch = tch->next_in_room) {
- if (tch == ch)
- continue;
- if (GET_LEVEL(tch) >= GET_INVIS_LEV(ch) && GET_LEVEL(tch) < level)
- act("You blink and suddenly realize that $n is gone.", FALSE, ch, 0,
- tch, TO_VICT);
- if (GET_LEVEL(tch) < GET_INVIS_LEV(ch) && GET_LEVEL(tch) >= level)
- act("You suddenly realize that $n is standing beside you.", FALSE,
ch, 0,
- tch, TO_VICT);
- }
-
- GET_INVIS_LEV(ch) = level;
- sprintf(buf, "Your invisibility level is %d.\r\n", level);
- send_to_char(buf, ch);
-}
+void perform_immort_invis(struct char_data *ch, int level)
+{
+ struct char_data *tch;
+
+ for (tch = world[ch->in_room].people; tch; tch = tch->next_in_room) {
+ if (tch == ch)
+ continue;
+ tch->cloop_member = CAN_SEE(tch, ch);
+ }
+
+ GET_INVIS_LEV(ch) = level;
+ sprintf(buf, "Your invisibility level is %d.\r\n", level);
+ send_to_char(buf, ch);
+
+ for (tch = world[ch->in_room].people; tch; tch = tch->next_in_room) {
+ if (tch == ch)
+ continue;
+ if (tch->cloop_member && !CAN_SEE(tch, ch)) {
+ sprintf(buf, "You blink and suddenly realize that %s is gone.\r\n",
+ GET_NAME(ch));
+ send_to_char(buf, tch);
+ } else if (!tch->cloop_member && CAN_SEE(tch, ch)) {
+ act("You suddenly realize that $n is standing beside you.",
+ FALSE, ch, 0, tch, TO_VICT);
+ }
+ }
+}
Andrey
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 04/10/01 PDT