#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <ctype.h>
#include "merc.h"
#include "tables.h"
#include "lookup.h"
Include dependency graph for mob_prog.c:

Go to the source code of this file.
Defines | |
| #define | BEGIN_BLOCK 0 |
| #define | CHK_ACT (26) |
| #define | CHK_AFFECTED (25) |
| #define | CHK_ALIGN (44) |
| #define | CHK_CARRIES (29) |
| #define | CHK_CLAN (35) |
| #define | CHK_CLASS (37) |
| #define | CHK_CLONES (8) |
| #define | CHK_EXISTS (24) |
| #define | CHK_GRPSIZE (51) |
| #define | CHK_HAS (31) |
| #define | CHK_HASTARGET (22) |
| #define | CHK_HOUR (10) |
| #define | CHK_HPCNT (40) |
| #define | CHK_IMM (28) |
| #define | CHK_ISACTIVE (19) |
| #define | CHK_ISCHARM (17) |
| #define | CHK_ISDELAY (20) |
| #define | CHK_ISEVIL (14) |
| #define | CHK_ISFOLLOW (18) |
| #define | CHK_ISGOOD (13) |
| #define | CHK_ISIMMORT (16) |
| #define | CHK_ISNEUTRAL (15) |
| #define | CHK_ISNPC (12) |
| #define | CHK_ISPC (11) |
| #define | CHK_ISTARGET (23) |
| #define | CHK_ISVISIBLE (21) |
| #define | CHK_LEVEL (43) |
| #define | CHK_MOBEXISTS (3) |
| #define | CHK_MOBHERE (1) |
| #define | CHK_MOBS (7) |
| #define | CHK_MONEY (45) |
| #define | CHK_NAME (33) |
| #define | CHK_OBJEXISTS (4) |
| #define | CHK_OBJHERE (2) |
| #define | CHK_OBJTYPE (38) |
| #define | CHK_OBJVAL0 (46) |
| #define | CHK_OBJVAL1 (47) |
| #define | CHK_OBJVAL2 (48) |
| #define | CHK_OBJVAL3 (49) |
| #define | CHK_OBJVAL4 (50) |
| #define | CHK_OFF (27) |
| #define | CHK_ORDER (9) |
| #define | CHK_PEOPLE (5) |
| #define | CHK_PLAYERS (6) |
| #define | CHK_POS (34) |
| #define | CHK_RACE (36) |
| #define | CHK_RAND (0) |
| #define | CHK_ROOM (41) |
| #define | CHK_SEX (42) |
| #define | CHK_USES (32) |
| #define | CHK_VNUM (39) |
| #define | CHK_WEARS (30) |
| #define | END_BLOCK -2 |
| #define | EVAL_EQ 0 |
| #define | EVAL_GE 1 |
| #define | EVAL_GT 3 |
| #define | EVAL_LE 2 |
| #define | EVAL_LT 4 |
| #define | EVAL_NE 5 |
| #define | IN_BLOCK -1 |
| #define | MAX_CALL_LEVEL 10 |
| #define | MAX_NESTED_LEVEL 12 |
Functions | |
| int | cmd_eval (int vnum, char *line, int check, CHAR_DATA *mob, CHAR_DATA *ch, const void *arg1, const void *arg2, CHAR_DATA *rch) |
| int | count_people_room (CHAR_DATA *mob, int iFlag) |
| void | expand_arg (char *buf, const char *format, CHAR_DATA *mob, CHAR_DATA *ch, const void *arg1, const void *arg2, CHAR_DATA *rch) |
| int | flag_lookup (const char *word, const struct flag_type *flag_table) |
| bool | get_mob_vnum_room (CHAR_DATA *ch, int vnum) |
| bool | get_obj_vnum_room (CHAR_DATA *ch, int vnum) |
| int | get_order (CHAR_DATA *ch) |
| CHAR_DATA * | get_random_char (CHAR_DATA *mob) |
| bool | has_item (CHAR_DATA *ch, int vnum, sh_int item_type, bool fWear) |
| int | keyword_lookup (const char **table, char *keyword) |
| void | mp_act_trigger (char *argument, CHAR_DATA *mob, CHAR_DATA *ch, const void *arg1, const void *arg2, int type) |
| void | mp_bribe_trigger (CHAR_DATA *mob, CHAR_DATA *ch, int amount) |
| bool | mp_exit_trigger (CHAR_DATA *ch, int dir) |
| void | mp_give_trigger (CHAR_DATA *mob, CHAR_DATA *ch, OBJ_DATA *obj) |
| void | mp_greet_trigger (CHAR_DATA *ch) |
| void | mp_hprct_trigger (CHAR_DATA *mob, CHAR_DATA *ch) |
| bool | mp_percent_trigger (CHAR_DATA *mob, CHAR_DATA *ch, const void *arg1, const void *arg2, int type) |
| int | num_eval (int lval, int oper, int rval) |
| void | program_flow (int pvnum, char *source, CHAR_DATA *mob, CHAR_DATA *ch, const void *arg1, const void *arg2) |
Variables | |
| const char * | fn_evals [] |
| const char * | fn_keyword [] |
|
|
Definition at line 934 of file mob_prog.c. Referenced by program_flow(). |
|
|
Definition at line 80 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 79 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 98 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 83 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 89 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 91 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 62 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 78 of file mob_prog.c. |
|
|
Definition at line 105 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 85 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 76 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 64 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 94 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 82 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 73 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 71 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 74 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 68 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 72 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 67 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 70 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 69 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 66 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 65 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 77 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 75 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 97 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 57 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 55 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 61 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 99 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 87 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 58 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 56 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 92 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 100 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 101 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 102 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 103 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 104 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 81 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 63 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 59 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 60 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 88 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 90 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 54 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 95 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 96 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 86 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 93 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 84 of file mob_prog.c. Referenced by cmd_eval(). |
|
|
Definition at line 936 of file mob_prog.c. Referenced by program_flow(). |
|
|
Definition at line 110 of file mob_prog.c. Referenced by num_eval(). |
|
|
Definition at line 111 of file mob_prog.c. Referenced by num_eval(). |
|
|
Definition at line 113 of file mob_prog.c. Referenced by num_eval(). |
|
|
Definition at line 112 of file mob_prog.c. Referenced by num_eval(). |
|
|
Definition at line 114 of file mob_prog.c. Referenced by num_eval(). |
|
|
Definition at line 115 of file mob_prog.c. Referenced by num_eval(). |
|
|
Definition at line 935 of file mob_prog.c. Referenced by program_flow(). |
|
|
Definition at line 937 of file mob_prog.c. Referenced by program_flow(). |
|
|
Definition at line 933 of file mob_prog.c. Referenced by program_flow(). |
|
||||||||||||||||||||||||||||||||||||
|
Definition at line 356 of file mob_prog.c. References char_data::act, act_flags, AFF_CHARM, affect_flags, char_data::affected_by, char_data::alignment, bug(), can_see(), can_see_obj(), CHK_ACT, CHK_AFFECTED, CHK_ALIGN, CHK_CARRIES, CHK_CLAN, CHK_CLASS, CHK_CLONES, CHK_GRPSIZE, CHK_HAS, CHK_HASTARGET, CHK_HOUR, CHK_HPCNT, CHK_IMM, CHK_ISACTIVE, CHK_ISCHARM, CHK_ISDELAY, CHK_ISEVIL, CHK_ISFOLLOW, CHK_ISGOOD, CHK_ISIMMORT, CHK_ISNEUTRAL, CHK_ISNPC, CHK_ISPC, CHK_ISTARGET, CHK_ISVISIBLE, CHK_LEVEL, CHK_MOBEXISTS, CHK_MOBHERE, CHK_MOBS, CHK_MONEY, CHK_NAME, CHK_OBJEXISTS, CHK_OBJHERE, CHK_OBJTYPE, CHK_OBJVAL0, CHK_OBJVAL1, CHK_OBJVAL2, CHK_OBJVAL3, CHK_OBJVAL4, CHK_OFF, CHK_ORDER, CHK_PEOPLE, CHK_PLAYERS, CHK_POS, CHK_RACE, CHK_RAND, CHK_ROOM, CHK_SEX, CHK_USES, CHK_VNUM, CHK_WEARS, clan_lookup(), class_lookup(), count_people_room(), FALSE, flag_lookup(), fn_evals, get_char_room(), get_char_world(), get_mob_vnum_room(), get_obj_carry(), get_obj_here(), get_obj_vnum_room(), get_obj_wear(), get_obj_world(), get_order(), get_random_char(), char_data::gold, has_item(), char_data::hit, time_info_data::hour, imm_flags, char_data::imm_flags, char_data::in_room, IS_AFFECTED, IS_EVIL, IS_GOOD, IS_IMMORTAL, is_name(), IS_NEUTRAL, IS_NPC, is_number(), IS_SET, item_lookup(), obj_data::item_type, keyword_lookup(), char_data::level, char_data::max_hit, MAX_INPUT_LENGTH, char_data::mprog_target, obj_data::name, num_eval(), number_percent(), off_flags, char_data::off_flags, one_argument(), original, obj_data::pIndexData, char_data::pIndexData, POS_SLEEPING, position_lookup(), race_lookup(), char_data::sex, char_data::silver, time_info, TRUE, UMAX, obj_data::value, room_index_data::vnum, obj_index_data::vnum, and mob_index_data::vnum. Referenced by program_flow(). 00359 {
00360 CHAR_DATA *lval_char = mob;
00361 CHAR_DATA *vch = (CHAR_DATA *) arg2;
00362 OBJ_DATA *obj1 = (OBJ_DATA *) arg1;
00363 OBJ_DATA *obj2 = (OBJ_DATA *) arg2;
00364 OBJ_DATA *lval_obj = NULL;
00365
00366 char *original, buf[MAX_INPUT_LENGTH], code;
00367 int lval = 0, oper = 0, rval = -1;
00368
00369 original = line;
00370 line = one_argument (line, buf);
00371 if (buf[0] == '\0' || mob == NULL)
00372 return FALSE;
00373
00374 /*
00375 * If this mobile has no target, let's assume our victim is the one
00376 */
00377 if (mob->mprog_target == NULL)
00378 mob->mprog_target = ch;
00379
00380 switch (check)
00381 {
00382 /*
00383 * Case 1: keyword and value
00384 */
00385 case CHK_RAND:
00386 return (atoi (buf) < number_percent ());
00387 case CHK_MOBHERE:
00388 if (is_number (buf))
00389 return (get_mob_vnum_room (mob, atoi (buf)));
00390 else
00391 return ((bool) (get_char_room (mob, buf) != NULL));
00392 case CHK_OBJHERE:
00393 if (is_number (buf))
00394 return (get_obj_vnum_room (mob, atoi (buf)));
00395 else
00396 return ((bool) (get_obj_here (mob, buf) != NULL));
00397 case CHK_MOBEXISTS:
00398 return ((bool) (get_char_world (mob, buf) != NULL));
00399 case CHK_OBJEXISTS:
00400 return ((bool) (get_obj_world (mob, buf) != NULL));
00401 /*
00402 * Case 2 begins here: We sneakily use rval to indicate need
00403 * for numeric eval...
00404 */
00405 case CHK_PEOPLE:
00406 rval = count_people_room (mob, 0);
00407 break;
00408 case CHK_PLAYERS:
00409 rval = count_people_room (mob, 1);
00410 break;
00411 case CHK_MOBS:
00412 rval = count_people_room (mob, 2);
00413 break;
00414 case CHK_CLONES:
00415 rval = count_people_room (mob, 3);
00416 break;
00417 case CHK_ORDER:
00418 rval = get_order (mob);
00419 break;
00420 case CHK_HOUR:
00421 rval = time_info.hour;
00422 break;
00423 default:;
00424 }
00425
00426 /*
00427 * Case 2 continued: evaluate expression
00428 */
00429 if (rval >= 0)
00430 {
00431 if ((oper = keyword_lookup (fn_evals, buf)) < 0)
00432 {
00433 sprintf (buf, "Cmd_eval: prog %d syntax error(2) '%s'",
00434 vnum, original);
00435 bug (buf, 0);
00436 return FALSE;
00437 }
00438 one_argument (line, buf);
00439 lval = rval;
00440 rval = atoi (buf);
00441 return (num_eval (lval, oper, rval));
00442 }
00443
00444 /*
00445 * Case 3,4,5: Grab actors from $* codes
00446 */
00447 if (buf[0] != '$' || buf[1] == '\0')
00448 {
00449 sprintf (buf, "Cmd_eval: prog %d syntax error(3) '%s'",
00450 vnum, original);
00451 bug (buf, 0);
00452 return FALSE;
00453 }
00454 else
00455 code = buf[1];
00456 switch (code)
00457 {
00458 case 'i':
00459 lval_char = mob;
00460 break;
00461 case 'n':
00462 lval_char = ch;
00463 break;
00464 case 't':
00465 lval_char = vch;
00466 break;
00467 case 'r':
00468 lval_char = rch == NULL ? get_random_char (mob) : rch;
00469 break;
00470 case 'o':
00471 lval_obj = obj1;
00472 break;
00473 case 'p':
00474 lval_obj = obj2;
00475 break;
00476 case 'q':
00477 lval_char = mob->mprog_target;
00478 break;
00479 default:
00480 sprintf (buf, "Cmd_eval: prog %d syntax error(4) '%s'",
00481 vnum, original);
00482 bug (buf, 0);
00483 return FALSE;
00484 }
00485 /*
00486 * From now on, we need an actor, so if none was found, bail out
00487 */
00488 if (lval_char == NULL && lval_obj == NULL)
00489 return FALSE;
00490
00491 /*
00492 * Case 3: Keyword, comparison and value
00493 */
00494 switch (check)
00495 {
00496 case CHK_ISPC:
00497 return (lval_char != NULL && !IS_NPC (lval_char));
00498 case CHK_ISNPC:
00499 return (lval_char != NULL && IS_NPC (lval_char));
00500 case CHK_ISGOOD:
00501 return (lval_char != NULL && IS_GOOD (lval_char));
00502 case CHK_ISEVIL:
00503 return (lval_char != NULL && IS_EVIL (lval_char));
00504 case CHK_ISNEUTRAL:
00505 return (lval_char != NULL && IS_NEUTRAL (lval_char));
00506 case CHK_ISIMMORT:
00507 return (lval_char != NULL && IS_IMMORTAL (lval_char));
00508 case CHK_ISCHARM: /* A relic from MERC 2.2 MOBprograms */
00509 return (lval_char != NULL && IS_AFFECTED (lval_char, AFF_CHARM));
00510 case CHK_ISFOLLOW:
00511 return (lval_char != NULL && lval_char->master != NULL
00512 && lval_char->master->in_room == lval_char->in_room);
00513 case CHK_ISACTIVE:
00514 return (lval_char != NULL && lval_char->position > POS_SLEEPING);
00515 case CHK_ISDELAY:
00516 return (lval_char != NULL && lval_char->mprog_delay > 0);
00517 case CHK_ISVISIBLE:
00518 switch (code)
00519 {
00520 default:
00521 case 'i':
00522 case 'n':
00523 case 't':
00524 case 'r':
00525 case 'q':
00526 return (lval_char != NULL && can_see (mob, lval_char));
00527 case 'o':
00528 case 'p':
00529 return (lval_obj != NULL && can_see_obj (mob, lval_obj));
00530 }
00531 case CHK_HASTARGET:
00532 return (lval_char != NULL && lval_char->mprog_target != NULL
00533 && lval_char->in_room ==
00534 lval_char->mprog_target->in_room);
00535 case CHK_ISTARGET:
00536 return (lval_char != NULL && mob->mprog_target == lval_char);
00537 default:;
00538 }
00539
00540 /*
00541 * Case 4: Keyword, actor and value
00542 */
00543 line = one_argument (line, buf);
00544 switch (check)
00545 {
00546 case CHK_AFFECTED:
00547 return (lval_char != NULL
00548 && IS_SET (lval_char->affected_by,
00549 flag_lookup (buf, affect_flags)));
00550 case CHK_ACT:
00551 return (lval_char != NULL
00552 && IS_SET (lval_char->act, flag_lookup (buf, act_flags)));
00553 case CHK_IMM:
00554 return (lval_char != NULL
00555 && IS_SET (lval_char->imm_flags,
00556 flag_lookup (buf, imm_flags)));
00557 case CHK_OFF:
00558 return (lval_char != NULL
00559 && IS_SET (lval_char->off_flags,
00560 flag_lookup (buf, off_flags)));
00561 case CHK_CARRIES:
00562 if (is_number (buf))
00563 return (lval_char != NULL
00564 && has_item (lval_char, atoi (buf), -1, FALSE));
00565 else
00566 return (lval_char != NULL
00567 && (get_obj_carry (lval_char, buf, lval_char) !=
00568 NULL));
00569 case CHK_WEARS:
00570 if (is_number (buf))
00571 return (lval_char != NULL
00572 && has_item (lval_char, atoi (buf), -1, TRUE));
00573 else
00574 return (lval_char != NULL
00575 && (get_obj_wear (lval_char, buf) != NULL));
00576 case CHK_HAS:
00577 return (lval_char != NULL
00578 && has_item (lval_char, -1, item_lookup (buf), FALSE));
00579 case CHK_USES:
00580 return (lval_char != NULL
00581 && has_item (lval_char, -1, item_lookup (buf), TRUE));
00582 case CHK_NAME:
00583 switch (code)
00584 {
00585 default:
00586 case 'i':
00587 case 'n':
00588 case 't':
00589 case 'r':
00590 case 'q':
00591 return (lval_char != NULL
00592 && is_name (buf, lval_char->name));
00593 case 'o':
00594 case 'p':
00595 return (lval_obj != NULL
00596 && is_name (buf, lval_obj->name));
00597 }
00598 case CHK_POS:
00599 return (lval_char != NULL
00600 && lval_char->position == position_lookup (buf));
00601 case CHK_CLAN:
00602 return (lval_char != NULL
00603 && lval_char->clan == clan_lookup (buf));
00604 case CHK_RACE:
00605 return (lval_char != NULL
00606 && lval_char->race == race_lookup (buf));
00607 case CHK_CLASS:
00608 return (lval_char != NULL
00609 && lval_char->class == class_lookup (buf));
00610 case CHK_OBJTYPE:
00611 return (lval_obj != NULL
00612 && lval_obj->item_type == item_lookup (buf));
00613 default:;
00614 }
00615
00616 /*
00617 * Case 5: Keyword, actor, comparison and value
00618 */
00619 if ((oper = keyword_lookup (fn_evals, buf)) < 0)
00620 {
00621 sprintf (buf, "Cmd_eval: prog %d syntax error(5): '%s'",
00622 vnum, original);
00623 bug (buf, 0);
00624 return FALSE;
00625 }
00626 one_argument (line, buf);
00627 rval = atoi (buf);
00628
00629 switch (check)
00630 {
00631 case CHK_VNUM:
00632 switch (code)
00633 {
00634 default:
00635 case 'i':
00636 case 'n':
00637 case 't':
00638 case 'r':
00639 case 'q':
00640 if (lval_char != NULL && IS_NPC (lval_char))
00641 lval = lval_char->pIndexData->vnum;
00642 break;
00643 case 'o':
00644 case 'p':
00645 if (lval_obj != NULL)
00646 lval = lval_obj->pIndexData->vnum;
00647 }
00648 break;
00649 case CHK_HPCNT:
00650 if (lval_char != NULL)
00651 lval =
00652 (lval_char->hit * 100) / (UMAX (1, lval_char->max_hit));
00653 break;
00654 case CHK_ROOM:
00655 if (lval_char != NULL && lval_char->in_room != NULL)
00656 lval = lval_char->in_room->vnum;
00657 break;
00658 case CHK_SEX:
00659 if (lval_char != NULL)
00660 lval = lval_char->sex;
00661 break;
00662 case CHK_LEVEL:
00663 if (lval_char != NULL)
00664 lval = lval_char->level;
00665 break;
00666 case CHK_ALIGN:
00667 if (lval_char != NULL)
00668 lval = lval_char->alignment;
00669 break;
00670 case CHK_MONEY: /* Money is converted to silver... */
00671 if (lval_char != NULL)
00672 lval = lval_char->gold + (lval_char->silver * 100);
00673 break;
00674 case CHK_OBJVAL0:
00675 if (lval_obj != NULL)
00676 lval = lval_obj->value[0];
00677 break;
00678 case CHK_OBJVAL1:
00679 if (lval_obj != NULL)
00680 lval = lval_obj->value[1];
00681 break;
00682 case CHK_OBJVAL2:
00683 if (lval_obj != NULL)
00684 lval = lval_obj->value[2];
00685 break;
00686 case CHK_OBJVAL3:
00687 if (lval_obj != NULL)
00688 lval = lval_obj->value[3];
00689 break;
00690 case CHK_OBJVAL4:
00691 if (lval_obj != NULL)
00692 lval = lval_obj->value[4];
00693 break;
00694 case CHK_GRPSIZE:
00695 if (lval_char != NULL)
00696 lval = count_people_room (lval_char, 4);
00697 break;
00698 default:
00699 return FALSE;
00700 }
00701 return (num_eval (lval, oper, rval));
00702 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 263 of file mob_prog.c. References can_see(), char_data::in_room, IS_NPC, is_same_group(), char_data::next_in_room, and room_index_data::people. Referenced by cmd_eval(). 00264 {
00265 CHAR_DATA *vch;
00266 int count;
00267 for (count = 0, vch = mob->in_room->people; vch; vch = vch->next_in_room)
00268 if (mob != vch && (iFlag == 0 || (iFlag == 1 && !IS_NPC (vch))
00269 || (iFlag == 2 && IS_NPC (vch))
00270 || (iFlag == 3 && IS_NPC (mob) && IS_NPC (vch)
00271 && mob->pIndexData->vnum ==
00272 vch->pIndexData->vnum) || (iFlag == 4
00273 &&
00274 is_same_group (mob,
00275 vch)))
00276 && can_see (mob, vch))
00277 count++;
00278 return (count);
00279 }
|
Here is the call graph for this function:

|
||||||||||||||||||||||||||||||||
|
Definition at line 711 of file mob_prog.c. References bug(), can_see(), can_see_obj(), capitalize(), get_random_char(), IS_NPC, MAX_INPUT_LENGTH, obj_data::name, char_data::name, one_argument(), char_data::sex, char_data::short_descr, obj_data::short_descr, and URANGE. Referenced by program_flow(). 00715 {
00716 static char *const he_she[] = { "it", "he", "she" };
00717 static char *const him_her[] = { "it", "him", "her" };
00718 static char *const his_her[] = { "its", "his", "her" };
00719 const char *someone = "someone";
00720 const char *something = "something";
00721 const char *someones = "someone's";
00722
00723 char fname[MAX_INPUT_LENGTH];
00724 CHAR_DATA *vch = (CHAR_DATA *) arg2;
00725 OBJ_DATA *obj1 = (OBJ_DATA *) arg1;
00726 OBJ_DATA *obj2 = (OBJ_DATA *) arg2;
00727 const char *str;
00728 const char *i;
00729 char *point;
00730
00731 /*
00732 * Discard null and zero-length messages.
00733 */
00734 if (format == NULL || format[0] == '\0')
00735 return;
00736
00737 point = buf;
00738 str = format;
00739 while (*str != '\0')
00740 {
00741 if (*str != '$')
00742 {
00743 *point++ = *str++;
00744 continue;
00745 }
00746 ++str;
00747
00748 switch (*str)
00749 {
00750 default:
00751 bug ("Expand_arg: bad code %d.", *str);
00752 i = " <@@@> ";
00753 break;
00754 case 'i':
00755 one_argument (mob->name, fname);
00756 i = fname;
00757 break;
00758 case 'I':
00759 i = mob->short_descr;
00760 break;
00761 case 'n':
00762 i = someone;
00763 if (ch != NULL && can_see (mob, ch))
00764 {
00765 one_argument (ch->name, fname);
00766 i = capitalize (fname);
00767 }
00768 break;
00769 case 'N':
00770 i = (ch != NULL && can_see (mob, ch))
00771 ? (IS_NPC (ch) ? ch->short_descr : ch->name) : someone;
00772 break;
00773 case 't':
00774 i = someone;
00775 if (vch != NULL && can_see (mob, vch))
00776 {
00777 one_argument (vch->name, fname);
00778 i = capitalize (fname);
00779 }
00780 break;
00781 case 'T':
00782 i = (vch != NULL && can_see (mob, vch))
00783 ? (IS_NPC (vch) ? vch->short_descr : vch->name) : someone;
00784 break;
00785 case 'r':
00786 if (rch == NULL)
00787 rch = get_random_char (mob);
00788 i = someone;
00789 if (rch != NULL && can_see (mob, rch))
00790 {
00791 one_argument (rch->name, fname);
00792 i = capitalize (fname);
00793 }
00794 break;
00795 case 'R':
00796 if (rch == NULL)
00797 rch = get_random_char (mob);
00798 i = (rch != NULL && can_see (mob, rch))
00799 ? (IS_NPC (ch) ? ch->short_descr : ch->name) : someone;
00800 break;
00801 case 'q':
00802 i = someone;
00803 if (mob->mprog_target != NULL
00804 && can_see (mob, mob->mprog_target))
00805 {
00806 one_argument (mob->mprog_target->name, fname);
00807 i = capitalize (fname);
00808 }
00809 break;
00810 case 'Q':
00811 i = (mob->mprog_target != NULL
00812 && can_see (mob,
00813 mob->
00814 mprog_target)) ? (IS_NPC (mob->mprog_target)
00815 ? mob->
00816 mprog_target->short_descr :
00817 mob->mprog_target->name) :
00818 someone;
00819 break;
00820 case 'j':
00821 i = he_she[URANGE (0, mob->sex, 2)];
00822 break;
00823 case 'e':
00824 i = (ch != NULL && can_see (mob, ch))
00825 ? he_she[URANGE (0, ch->sex, 2)] : someone;
00826 break;
00827 case 'E':
00828 i = (vch != NULL && can_see (mob, vch))
00829 ? he_she[URANGE (0, vch->sex, 2)] : someone;
00830 break;
00831 case 'J':
00832 i = (rch != NULL && can_see (mob, rch))
00833 ? he_she[URANGE (0, rch->sex, 2)] : someone;
00834 break;
00835 case 'X':
00836 i = (mob->mprog_target != NULL
00837 && can_see (mob, mob->mprog_target)) ? he_she[URANGE (0,
00838 mob->mprog_target->sex,
00839 2)]
00840 : someone; break;
00841 case 'k':
00842 i = him_her[URANGE (0, mob->sex, 2)];
00843 break;
00844 case 'm':
00845 i = (ch != NULL && can_see (mob, ch))
00846 ? him_her[URANGE (0, ch->sex, 2)] : someone;
00847 break;
00848 case 'M':
00849 i = (vch != NULL && can_see (mob, vch))
00850 ? him_her[URANGE (0, vch->sex, 2)] : someone;
00851 break;
00852 case 'K':
00853 if (rch == NULL)
00854 rch = get_random_char (mob);
00855 i = (rch != NULL && can_see (mob, rch))
00856 ? him_her[URANGE (0, rch->sex, 2)] : someone;
00857 break;
00858 case 'Y':
00859 i = (mob->mprog_target != NULL
00860 && can_see (mob, mob->mprog_target)) ? him_her[URANGE (0,
00861 mob->mprog_target->sex,
00862 2)]
00863 : someone; break;
00864 case 'l':
00865 i = his_her[URANGE (0, mob->sex, 2)];
00866 break;
00867 case 's':
00868 i = (ch != NULL && can_see (mob, ch))
00869 ? his_her[URANGE (0, ch->sex, 2)] : someones;
00870 break;
00871 case 'S':
00872 i = (vch != NULL && can_see (mob, vch))
00873 ? his_her[URANGE (0, vch->sex, 2)] : someones;
00874 break;
00875 case 'L':
00876 if (rch == NULL)
00877 rch = get_random_char (mob);
00878 i = (rch != NULL && can_see (mob, rch))
00879 ? his_her[URANGE (0, rch->sex, 2)] : someones;
00880 break;
00881 case 'Z':
00882 i = (mob->mprog_target != NULL
00883 && can_see (mob, mob->mprog_target)) ? his_her[URANGE (0,
00884 |