int greet_mtrigger(char_data *actor, int dir) { trig_data *t; char_data *ch; char buf[MAX_INPUT_LENGTH]; int rev_dir[] = { SOUTH, WEST, NORTH, EAST, DOWN, UP }; int intermediate, final=TRUE; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_CHECK(ch, MTRIG_GREET | MTRIG_GREET_ALL) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (((IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET) && CAN_SEE(ch, actor)) || IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET_ALL)) && !GET_TRIG_DEPTH(t) && (number(1, 100) <= GET_TRIG_NARG(t))) { if (dir>=0) add_var(&GET_TRIG_VARS(t), "direction", dirs[rev_dir[dir]], 0); ADD_UID_VAR(buf, t, actor, "actor", 0); intermediate = script_driver(ch, t, MOB_TRIGGER, TRIG_NEW); if (!intermediate) final = FALSE; continue; } } } return final; }
int greet_mtrigger(char_data *actor, int dir) { trig_data *t = NULL; char_data *ch = NULL; char buf[MAX_INPUT_LENGTH] = {'\0'}; int intermediate = 0, final = TRUE; if (!valid_dg_target(actor, DG_ALLOW_GODS)) return TRUE; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_CHECK(ch, MTRIG_GREET | MTRIG_GREET_ALL) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (((IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET) && CAN_SEE(ch, actor)) || IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET_ALL)) && !GET_TRIG_DEPTH(t) && (rand_number(1, 100) <= GET_TRIG_NARG(t))) { if (dir >= 0 && dir < DIR_COUNT) add_var(&GET_TRIG_VARS(t), "direction", dirs[rev_dir[dir]], 0); else add_var(&GET_TRIG_VARS(t), "direction", "none", 0); ADD_UID_VAR(buf, t, actor, "actor", 0); intermediate = script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); if (!intermediate) final = FALSE; continue; } } } return final; }
void trigedit_disp_menu(struct descriptor_data *d) { struct trig_data *trig = OLC_TRIG(d); char *attach_type; char trgtypes[256]; get_char_colors(d->character); clear_screen(d); if (trig->attach_type==OBJ_TRIGGER) { attach_type = "Objects"; sprintbit(GET_TRIG_TYPE(trig), otrig_types, trgtypes, sizeof(trgtypes)); } else if (trig->attach_type==WLD_TRIGGER) { attach_type = "Rooms"; sprintbit(GET_TRIG_TYPE(trig), wtrig_types, trgtypes, sizeof(trgtypes)); } else { attach_type = "Mobiles"; sprintbit(GET_TRIG_TYPE(trig), trig_types, trgtypes, sizeof(trgtypes)); } write_to_output(d, TRUE, #if defined(CLEAR_SCREEN) "^[[H^[[J" #endif "Trigger Editor [%s%d%s]\r\n\r\n" "%s1)%s Name : %s%s\r\n" "%s2)%s Intended for : %s%s\r\n" "%s3)%s Trigger types: %s%s\r\n" "%s4)%s Numberic Arg : %s%d\r\n" "%s5)%s Arguments : %s%s\r\n" "%s6)%s Commands:\r\n%s", grn, OLC_NUM(d), nrm, /* vnum on the title line */ grn, nrm, yel, GET_TRIG_NAME(trig), /* name */ grn, nrm, yel, attach_type, /* attach type */ grn, nrm, yel, trgtypes, /* greet/drop/etc */ grn, nrm, yel, trig->narg, /* numeric arg */ grn, nrm, yel, trig->arglist?trig->arglist:"", /* strict arg */ grn, nrm, cyn ); write_to_output(d, FALSE, "%s\r\n", OLC_STORAGE(d) /* the command list */ ); write_to_output(d, TRUE, "%sQ)%s Quit\r\n" "Enter Choice :", grn, nrm /* quit colors */ ); OLC_MODE(d) = TRIGEDIT_MAIN_MENU; }
/* List code by Ronald Evers. */ static void list_triggers(struct char_data *ch, zone_rnum rnum, trig_vnum vmin, trig_vnum vmax) { int i, bottom, top, counter = 0; char trgtypes[256]; /* Expect a minimum / maximum number if the rnum for the zone is NOWHERE. */ if (rnum != NOWHERE) { bottom = zone_table[rnum].bot; top = zone_table[rnum].top; } else { bottom = vmin; top = vmax; } /* Store the header for the room listing. */ send_to_char (ch, "Index VNum Trigger Name Type\r\n" "----- ------- --------------------------------------------- ---------\r\n"); /* Loop through the world and find each room. */ for (i = 0; i < top_of_trigt; i++) { /** Check to see if this room is one of the ones needed to be listed. **/ if ((trig_index[i]->vnum >= bottom) && (trig_index[i]->vnum <= top)) { counter++; send_to_char(ch, "%4d) [%s%5d%s] %s%-45.45s%s ", counter, QGRN, trig_index[i]->vnum, QNRM, QCYN, trig_index[i]->proto->name, QNRM); if (trig_index[i]->proto->attach_type == OBJ_TRIGGER) { sprintbit(GET_TRIG_TYPE(trig_index[i]->proto), otrig_types, trgtypes, sizeof(trgtypes)); send_to_char(ch, "obj %s%s%s\r\n", QYEL, trgtypes, QNRM); } else if (trig_index[i]->proto->attach_type==WLD_TRIGGER) { sprintbit(GET_TRIG_TYPE(trig_index[i]->proto), wtrig_types, trgtypes, sizeof(trgtypes)); send_to_char(ch, "wld %s%s%s\r\n", QYEL, trgtypes, QNRM); } else { sprintbit(GET_TRIG_TYPE(trig_index[i]->proto), trig_types, trgtypes, sizeof(trgtypes)); send_to_char(ch, "mob %s%s%s\r\n", QYEL, trgtypes, QNRM); } } } if (counter == 0) { if (rnum == NOWHERE) send_to_char(ch, "No triggers found from %d to %d\r\n", vmin, vmax); else send_to_char(ch, "No triggers found for zone #%d\r\n", zone_table[rnum].number); } }
void trigedit_disp_types(struct descriptor_data *d) { int i, columns = 0; const char **types; char bitbuf[MAX_STRING_LENGTH]; switch(OLC_TRIG(d)->attach_type) { case WLD_TRIGGER: types = wtrig_types; break; case OBJ_TRIGGER: types = otrig_types; break; case MOB_TRIGGER: default: types = trig_types; break; } get_char_colors(d->character); clear_screen(d); for (i = 0; i < NUM_TRIG_TYPE_FLAGS; i++) { write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, types[i], !(++columns % 2) ? "\r\n" : ""); } sprintbit(GET_TRIG_TYPE(OLC_TRIG(d)), types, bitbuf, sizeof(bitbuf)); write_to_output(d, "\r\nCurrent types : %s%s%s\r\nEnter type (0 to quit) : ", cyn, bitbuf, nrm); }
void trigedit_disp_types(struct descriptor_data *d) { int i, columns = 0; const char **types; switch(OLC_TRIG(d)->attach_type) { case WLD_TRIGGER: types = wtrig_types; break; case OBJ_TRIGGER: types = otrig_types; break; case MOB_TRIGGER: default: types = trig_types; break; } get_char_cols(d->character); #if defined(CLEAR_SCREEN) send_to_char("[H[J", d->character); #endif for (i = 0; i < NUM_TRIG_TYPE_FLAGS; i++) { sprintf(buf, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, types[i], !(++columns % 2) ? "\r\n" : ""); send_to_char(buf, d->character); } sprintbit(GET_TRIG_TYPE(OLC_TRIG(d)), types, buf1); sprintf(buf, "\r\nCurrent types : %s%s%s\r\nEnter type (0 to quit) : ", cyn, buf1, nrm); send_to_char(buf, d->character); }
int door_mtrigger(char_data *actor, int subcmd, int dir) { trig_data *t; char_data *ch; char buf[MAX_INPUT_LENGTH]; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_CHECK(ch, MTRIG_DOOR) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (IS_SET(GET_TRIG_TYPE(t), MTRIG_DOOR) && CAN_SEE(ch, actor) && !GET_TRIG_DEPTH(t) && (rand_number(1, 100) <= GET_TRIG_NARG(t))) { add_var(&GET_TRIG_VARS(t), "cmd", cmd_door[subcmd], 0); if (dir >= 0 && dir < DIR_COUNT) add_var(&GET_TRIG_VARS(t), "direction", dirs[dir], 0); else add_var(&GET_TRIG_VARS(t), "direction", "none", 0); ADD_UID_VAR(buf, t, actor, "actor", 0); return script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); } } } return 1; }
void greet_memory_mtrigger(char_data *actor) { trig_data *t; char_data *ch; struct script_memory *mem; char buf[MAX_INPUT_LENGTH]; int command_performed = 0; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_MEM(ch) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; /* find memory line with command only */ for (mem = SCRIPT_MEM(ch); mem && SCRIPT_MEM(ch); mem=mem->next) { if (GET_ID(actor)!=mem->id) continue; if (mem->cmd) { command_interpreter(ch, mem->cmd); /* no script */ command_performed = 1; break; } } /* if a command was not performed execute the memory script */ if (mem && !command_performed) { for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (IS_SET(GET_TRIG_TYPE(t), MTRIG_MEMORY) && CAN_SEE(ch, actor) && !GET_TRIG_DEPTH(t) && number(1, 100) <= GET_TRIG_NARG(t)) { ADD_UID_VAR(buf, t, actor, "actor", 0); script_driver(ch, t, MOB_TRIGGER, TRIG_NEW); break; } } } /* delete the memory */ if (mem) { if (SCRIPT_MEM(ch)==mem) { SCRIPT_MEM(ch) = mem->next; } else { struct script_memory *prev; prev = SCRIPT_MEM(ch); while (prev->next != mem) prev = prev->next; prev->next = mem->next; } if (mem->cmd) free(mem->cmd); free(mem); } } }
void trigedit_parse(struct descriptor_data *d, char *arg) { int i = 0; switch (OLC_MODE(d)) { case TRIGEDIT_MAIN_MENU: switch (tolower(*arg)) { case 'q': if (OLC_VAL(d)) { /* Anything been changed? */ if (!GET_TRIG_TYPE(OLC_TRIG(d))) { write_to_output(d, "Invalid Trigger Type! Answer a to abort quit!\r\n"); } write_to_output(d, "Do you wish to save your changes? : "); OLC_MODE(d) = TRIGEDIT_CONFIRM_SAVESTRING; } else cleanup_olc(d, CLEANUP_ALL); return; case '1': OLC_MODE(d) = TRIGEDIT_NAME; write_to_output(d, "Name: "); break; case '2': OLC_MODE(d) = TRIGEDIT_INTENDED; write_to_output(d, "0: Mobiles, 1: Objects, 2: Rooms: "); break; case '3': OLC_MODE(d) = TRIGEDIT_TYPES; trigedit_disp_types(d); break; case '4': OLC_MODE(d) = TRIGEDIT_NARG; write_to_output(d, "Numeric argument: "); break; case '5': OLC_MODE(d) = TRIGEDIT_ARGUMENT; write_to_output(d, "Argument: "); break; case '6': OLC_MODE(d) = TRIGEDIT_COMMANDS; write_to_output(d, "Enter trigger commands: (/s saves /h for help)\r\n\r\n"); d->backstr = NULL; if (OLC_STORAGE(d)) { write_to_output(d, "%s", OLC_STORAGE(d)); d->backstr = strdup(OLC_STORAGE(d)); } d->str = &OLC_STORAGE(d); d->max_str = MAX_CMD_LENGTH; d->mail_to = 0; OLC_VAL(d) = 1; break; default: trigedit_disp_menu(d); return; } return; case TRIGEDIT_CONFIRM_SAVESTRING: switch(tolower(*arg)) { case 'y': trigedit_save(d); mudlog(CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE, "OLC: %s edits trigger %d", GET_NAME(d->character), OLC_NUM(d)); /* fall through */ case 'n': cleanup_olc(d, CLEANUP_ALL); return; case 'a': /* abort quitting */ break; default: write_to_output(d, "Invalid choice!\r\n"); write_to_output(d, "Do you wish to save the trigger? : "); return; } break; case TRIGEDIT_NAME: smash_tilde(arg); if (OLC_TRIG(d)->name) free(OLC_TRIG(d)->name); OLC_TRIG(d)->name = strdup((arg && *arg) ? arg : "undefined"); OLC_VAL(d)++; break; case TRIGEDIT_INTENDED: if ((atoi(arg)>=MOB_TRIGGER) || (atoi(arg)<=WLD_TRIGGER)) OLC_TRIG(d)->attach_type = atoi(arg); OLC_VAL(d)++; break; case TRIGEDIT_NARG: OLC_TRIG(d)->narg = LIMIT(atoi(arg), 0, 100); OLC_VAL(d)++; break; case TRIGEDIT_ARGUMENT: smash_tilde(arg); OLC_TRIG(d)->arglist = (*arg?strdup(arg):NULL); OLC_VAL(d)++; break; case TRIGEDIT_TYPES: if ((i = atoi(arg)) == 0) break; else if (!((i < 0) || (i > NUM_TRIG_TYPE_FLAGS))) TOGGLE_BIT((GET_TRIG_TYPE(OLC_TRIG(d))), 1 << (i - 1)); OLC_VAL(d)++; trigedit_disp_types(d); return; case TRIGEDIT_COMMANDS: break; } OLC_MODE(d) = TRIGEDIT_MAIN_MENU; trigedit_disp_menu(d); }
void trigedit_parse(struct descriptor_data *d, char *arg) { int i = 0; char *backstr = NULL; switch (OLC_MODE(d)) { case TRIGEDIT_MAIN_MENU: switch (tolower(*arg)) { case 'q': if (OLC_VAL(d)) { /* Anything been changed? */ if (!GET_TRIG_TYPE(OLC_TRIG(d))) { send_to_char("Invalid Trigger Type! Answer a to abort quit!\r\n", d->character); } send_to_char("Do you wish to save the changes to the trigger? (y/n): ", d->character); OLC_MODE(d) = TRIGEDIT_CONFIRM_SAVESTRING; } else cleanup_olc(d, CLEANUP_ALL); return; case '1': OLC_MODE(d) = TRIGEDIT_NAME; send_to_char("Name: ", d->character); break; case '2': OLC_MODE(d) = TRIGEDIT_INTENDED; send_to_char("0: Mobiles, 1: Objects, 2: Rooms: ", d->character); break; case '3': OLC_MODE(d) = TRIGEDIT_TYPES; trigedit_disp_types(d); break; case '4': OLC_MODE(d) = TRIGEDIT_NARG; send_to_char("Numeric argument: ", d->character); break; case '5': OLC_MODE(d) = TRIGEDIT_ARGUMENT; send_to_char("Argument: ", d->character); break; case '6': OLC_MODE(d) = TRIGEDIT_COMMANDS; clear_screen(d); if (OLC_STORAGE(d)) { write_to_output(d, FALSE, "%s", OLC_STORAGE(d)); backstr = str_dup(OLC_STORAGE(d)); } string_write(d, &OLC_STORAGE(d), MAX_CMD_LENGTH, 0, STATE(d)); OLC_VAL(d) = 1; break; default: trigedit_disp_menu(d); return; } return; case TRIGEDIT_CONFIRM_SAVESTRING: switch(tolower(*arg)) { case 'y': trigedit_save(d); sprintf(buf, "OLC: %s edits trigger %d", GET_NAME(d->character), OLC_NUM(d)); mudlog(buf, CMP, MAX(RIGHTS_TRIGGERS, GET_INVIS_LEV(d->character)), TRUE); /* fall through */ case 'n': cleanup_olc(d, CLEANUP_ALL); return; case 'a': /* abort quitting */ break; default: send_to_char("Invalid choice!\r\n", d->character); send_to_char("Do you wish to save the trigger? : ", d->character); return; } break; case TRIGEDIT_NAME: if (OLC_TRIG(d)->name) free(OLC_TRIG(d)->name); OLC_TRIG(d)->name = str_dup((arg && *arg) ? arg : "undefined"); OLC_VAL(d)++; break; case TRIGEDIT_INTENDED: if ((atoi(arg)>=MOB_TRIGGER) || (atoi(arg)<=WLD_TRIGGER)) OLC_TRIG(d)->attach_type = atoi(arg); OLC_VAL(d)++; break; case TRIGEDIT_NARG: OLC_TRIG(d)->narg = atoi(arg); OLC_VAL(d)++; break; case TRIGEDIT_ARGUMENT: OLC_TRIG(d)->arglist = (*arg?str_dup(arg):NULL); OLC_VAL(d)++; break; case TRIGEDIT_TYPES: if ((i = atoi(arg)) == 0) break; else if (!((i < 0) || (i > NUM_TRIG_TYPE_FLAGS))) TOGGLE_BIT((GET_TRIG_TYPE(OLC_TRIG(d))), 1ULL << (i - 1)); OLC_VAL(d)++; trigedit_disp_types(d); return; case TRIGEDIT_COMMANDS: break; } OLC_MODE(d) = TRIGEDIT_MAIN_MENU; trigedit_disp_menu(d); }