From: Frollo Subject: Quest Shop -- selling items for Quest points If anyone is interested, this is my quest master guy... he doesn't host quests or anything, but he's like a quest- shop guy...etc etc etc, you get the point. if you use this you will want to change the quest_items[] to the virtual #s of the quest items you want to use...also, you'll have to make the mob, define the procs, add this into act_movement.c : ... if (!IS_AFFECTED(ch, AFF_SNEAK)) act("$n has arrived.", TRUE, ch, 0, 0, TO_ROOM); if (ch->desc != NULL) look_at_room(ch, 0); +command_interpreter(ch,"arrive"); if (IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DEATH) && GET_LEVEL(ch) < LVL_IMMORT ) { log_death_trap(ch); ... and down at the bottom of the file, add an empty ACMD(do_arrive) and define do_arrive in interpreter.c ...the reason for this is because i can't find any other way to make mobs do stuff when you arrive :) but hey, it works, right? enjoy! oh yeah, you'll have to add in an int questpoints somewhere in structs and define the GET_QUESTP in utils.h ...shouldn't be too hard int quest_items[] = {3, 50, 51, 52}; // ^ NUMBER OF ITEMS SPECIAL(quest_shop) { struct obj_data *obj; struct char_data *mob = (struct char_data *) me; int qp, r_num, x; ACMD(do_vstat); if (CMD_IS("list")) { sprintf(buf, " ## Item Quest Points\r \n" "---------------------------------------------------------------\r\n") ; for (x = 1; x <= quest_items[0]; x++) { obj = read_object(quest_items[x], VIRTUAL); if (obj == NULL) continue; sprintf(buf2, "%s", (obj)->short_description); CAP(buf2); sprintf(buf, "%s%3d) %-45s%12d\r\n", buf, x, buf2, GET_OBJ_COST(obj)); } send_to_char(buf, ch); return 1; } else if (CMD_IS("buy")) { one_argument(argument, arg); if (!(qp = atoi(arg))) { send_to_char("&n&cThe Quest Master says, 'Please specify which item you would l ike to purchase using \"BUY #\".'&n\r\n", ch); return 1; } if (qp < 0) { send_to_char("&n&cThe Quest Master says, 'A negative number?!?'&n\r\n", ch); return 1; } if (qp > quest_items[0]) { send_to_char("&n&cThe Quest Master says, 'Sorry, my inventory isn't quite that high yet.'&n\r\n", ch); return 1; } obj = read_object(quest_items[qp], VIRTUAL); if (GET_QUESTP(ch) < GET_OBJ_COST(obj)) { sprintf(buf, "&n&cThe Quest Master says, '%s costs %d quest points...which I se e you can't afford!'&n\r\n", (obj)->short_description, GET_OBJ_COST(obj)); CAP(buf); send_to_char(buf, ch); return 1; } GET_QUESTP(ch) -= GET_OBJ_COST(obj); sprintf(buf, "&n&cThe Quest Master says, 'I'll take %d quest points for %s, %s. '&n\r\n", GET_OBJ_COST(obj), (obj)->short_description, GET_NAME(ch)); send_to_room(buf, ch->in_room); obj_to_char(obj, ch); return 1; } else if (CMD_IS("info")) { one_argument(argument, arg); if (!(qp = atoi(arg))) { send_to_char("&n&cThe Quest Master says, 'Please specify which item you would l ike information on using \"INFO #\".'&n\r\n", ch); return 1; } if (qp < 0) { send_to_char("&n&cThe Quest Master says, 'A negative number?!?'&n\r\n", ch); return 1; } if (qp > quest_items[0]) { send_to_char("&n&cThe Quest Master says, 'Sorry, my inventory isn't quite that high yet.'&n\r\n", ch); return 1; } if ((r_num = real_object(quest_items[qp])) < 0) { send_to_char("&n&cThe Quest Master says, 'Uh-oh...I seem to have made an error! Please report me immediatly and you WILL be rewarded.\r\n&n", ch); return 1; } obj = read_object(r_num, REAL); do_stat_object(ch, obj); extract_obj(obj); return 1; } else if (CMD_IS("arrive")) { if (GET_QUESTP(ch) <= 0) do_say(mob,"You are aware that I only deal in quest points..?",0,0); else { command_interpreter(mob, "smile"); do_say(mob,"Welcome, welcome! Please type LIST to view my wares, INFO to get",0 ,0); do_say(mob,"information on an item, and BUY to exchange your quest points for", 0,0); do_say(mob,"unique quest items!&n",0,0); } return 0; } else return 0; }