/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* _/ _/ *
* _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ *
***************************************************************************
* Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius), *
* Additional credits are in the help file CODECREDITS *
* All Rights Reserved. *
***************************************************************************/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include "merc.h"
#include "interp.h"
#include "olc.h"
/*
type 1 shop
type 2 shop
type 3 shop
type 4 shop
type 5 shop
type 6 shop
type 7 shop
type 8 shop
type 9 shop
type 10 shop
type 11 bank
*/
bool can_buy args((CHAR_DATA * ch));
void do_buy(CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *room;
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
int vnum = 0;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int itemcost = 0;
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
room = ch->in_room;
if (room == NULL)
return;
if ( ch->in_room < get_room_index(2007) && ch->in_room > get_room_index(2012) )
{
stc("You aren't at a shop.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
stc("Buy what? Type 'list' to see what items are for sale here.", ch);
return;
}
if (can_buy(ch) == FALSE)
{
stc("You are not permitted to buy that item!\n\r", ch);
return;
}
if (room->items_sold[atoi(arg)] != 0)
{
vnum = room->items_sold[atoi(arg)];
//pObjIndex = get_obj_index(value);
if (vnum != 0 && (pObjIndex = get_obj_index(vnum)) != NULL)
{
obj = create_object(pObjIndex, 50);
itemcost = obj->cost;
if (ch->bones < itemcost)
{
sprintf(buf,
"This item costs %d bones, while you only have %d.\n\r",
itemcost, ch->bones);
stc(buf, ch);
extract_obj(obj);
return;
}
obj_to_char(obj, ch);
if (obj->questowner != NULL)
free_string(obj->questowner);
obj->questowner = str_dup(ch->pcdata->switchname);
sprintf(buf, "#7You buy %s#7 for #y%d#7 bones.\n\r",
obj->short_descr, itemcost);
stc(buf, ch);
act("#C$n #7purchases $p#7 from the storekeep.#n\n\r",
ch, obj, NULL, TO_ROOM);
ch->bones -= itemcost;
return;
}
else
{
stc("Error check vnum shit in shop.c\n\r", ch);
return;
}
}
else
{
stc("That item number is not for sale. Type 'list' to see what *is* for sale.\n\r", ch);
return;
}
return;
}
void do_sell(CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *room;
OBJ_DATA *obj;
OBJ_DATA *obj_next;
bool found;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int value = 0, total = 0, counter = 0;
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
room = ch->in_room;
if (room == NULL)
return;
if (room->shop_type == 0 || room->shop_type >= 10)
{
stc("You aren't at a shop.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
stc("Sell what?", ch);
return;
}
if (str_cmp(arg, "all") && str_prefix("all.", arg))
{
if ((obj = get_obj_carry(ch, arg, ch)) == NULL)
{
stc("You don't seem to have that item!\n\r", ch);
return;
}
if (obj->questowner != NULL && strlen(obj->questowner) > 1
&& str_cmp(ch->pcdata->switchname, obj->questowner))
{
stc("You can't sell that! It belongs to someone else!\n\r", ch);
return;
}
if (IS_SET(obj->extra_flags2, ITEM_NO_SELL))
{
stc("You are not allowed to sell that item!\n\r", ch);
return;
}
if (obj->cost > 0)
{
if (obj->item_type == ITEM_TREASURE)
{
value = obj->cost;
//value += number_range(obj->cost * 0.1, obj->cost * 0.3);
}
else
{
value = obj->cost / 2;
if (number_range(1, 2) == 2)
value += number_range(value * 0.1,
value * 0.3);
else
value -= number_range(value * 0.1,
value * 0.3);
}
sprintf(buf, "You sell $p for %d bones pieces!",
value);
act(buf, ch, obj, NULL, TO_CHAR);
act("$n sells $p to the shopkeeper!", ch, obj, NULL,
TO_ROOM);
extract_obj(obj);
ch->bones += value;
return;
}
else
{
stc("That object is worthless!\n\r", ch);
return;
}
return;
}
else
{
found = FALSE;
for (obj = ch->carrying; obj != NULL; obj = obj_next)
{
obj_next = obj->next_content;
if (arg[3] != '\0' && !is_name(&arg[4], obj->name))
continue;
if (!can_see_obj(ch, obj)
|| obj->wear_loc != WEAR_NONE)
continue;
if (obj->questowner != NULL
&& strlen(obj->questowner) > 1
&& str_cmp(ch->pcdata->switchname,
obj->questowner))
continue;
if (IS_SET(obj->extra_flags2, ITEM_NO_SELL))
continue;
if (obj->cost < 1)
continue;
if (obj->item_type == ITEM_TREASURE)
value = obj->cost;
else
{
value = obj->cost / 2;
if (number_range(1, 2) == 2)
value += number_range(value * 0.1,
value * 0.3);
else
value -= number_range(value * 0.1,
value * 0.3);
}
if (value < 1)
value = 1;
total += value;
extract_obj(obj);
found = TRUE;
counter += 1;
}
if (found)
{
if (counter > 1)
{
act("$n sells several items to the shopkeeper!", ch, NULL, NULL, TO_ROOM);
ch->bones += total;
act("You sell several items to the shopkeeper!", ch, NULL, NULL, TO_CHAR);
sprintf(buf,
"You make %d bones from your sells!\n\r",
total);
stc(buf, ch);
}
else
{
act("$n sells an item to the shopkeeper!", ch,
NULL, NULL, TO_ROOM);
ch->bones += total;
sprintf(buf,
"You sell an item to the shopkeeper for %d bones\n\r!",
total);
act(buf, ch, NULL, NULL, TO_CHAR);
}
}
else
{
stc("Either you don't have them or the shopkeeper doesn't want them.\n\r", ch);
return;
}
}
return;
}
void do_list(CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *room;
OBJ_INDEX_DATA *pObjIndex;
char buf[MAX_STRING_LENGTH];
int i;
int x;
int s = 0;
if (IS_NPC(ch))
return;
room = ch->in_room;
if (room == NULL)
return;
if (room->shop_type == 0 || room->shop_type == 11
|| room->shop_type == 12)
{
stc("You aren't at a shop.\n\r", ch);
return;
}
if (room->shop_type < 13)
{
for (x = 1; x < 25; x++)
{
if (room->items_sold[x] != 0)
s++;
}
if (s > 0)
{
sprintf(buf,
"#0[#CN#cumber#0] [#CC#cost#0] [#CI#ctems #CF#cor #CS#cale#0]#n\n\r");
stc(buf, ch);
sprintf(buf,
"#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#C=#P_#C=#0-#n\n\r");
stc(buf, ch);
stc("#p| #p| #n\n\r", ch);
}
for (i = 1; i < 25; i++)
{
/*
* sprintf(buf, "Number Item Cost #n\n\r");
* stc(buf, ch);
* sprintf(buf, "===============================================#n\n\r");
* stc(buf, ch);
*/
if (room->items_sold[i] == 0)
continue;
if (room->items_sold[i] != 0)
{
pObjIndex =
get_obj_index(room->items_sold[i]);
sprintf(buf,
"#p|#n %-2d #y%10d bones #p|#C/#0> %s#n\n\r",
i, pObjIndex->cost,
pObjIndex->short_descr);
stc(buf, ch);
}
/*
* sprintf(buf, "===============================================\n\r");
* stc(buf, ch);
*/
}
if (s > 0)
{
stc("#p| #p| #n\n\r", ch);
sprintf(buf,
"#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#c-#0=#c-#C_#n\n\r");
stc(buf, ch);
}
}
return;
}
void do_describe(CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *room;
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
AFFECT_DATA *paf;
int vnum = 0;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int itemcost = 0;
int itemtype;
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
room = ch->in_room;
if (room == NULL)
return;
if (room->shop_type == 0 || room->shop_type >= 10)
{
stc("You aren't at a shop.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
stc("Describe what? Type 'list' to see what items are for sale here.\n\r", ch);
return;
}
if (atoi(arg) == 0)
{
stc("Invalid item number.\n\r", ch);
return;
}
if (room->items_sold[atoi(arg)] != 0)
{
vnum = room->items_sold[atoi(arg)];
if (vnum != 0 && (pObjIndex = get_obj_index(vnum)) != NULL)
{
obj = create_object(pObjIndex, 50);
itemcost = obj->cost;
sprintf(buf,
"The shopkeeper gives you a description for %s:\n\r",
obj->short_descr);
stc(buf, ch);
sprintf(buf,
"%s\n\rItem Type: %s.\n\rProperties: %s %s\n\r",
obj->description, item_type_name(obj),
extra_bit_name(obj->extra_flags),
extra2_bit_name(obj->extra_flags2));
stc(buf, ch);
sprintf(buf, "Cost: %d\n\r", obj->cost);
stc(buf, ch);
switch (obj->item_type)
{
case ITEM_FAMILIAR:
sprintf(buf,
"%s is a familiar.\n\r%s\n\rLevel: %d\n\r\
Min Tier Lvl Req: %d\n\rChance to Hit: %d%%\n\r\
Base Damage: %d\n\rExp: %d\n\r\
Learning Ability: %d%%\n\rAlignment: %d\n\rKeywords: '%s'\n\r",
obj->short_descr, obj->description, obj->value[1], obj->value[3], obj->value[4], obj->value[2], obj->value[5], obj->value[6], obj->value[7], obj->name);
stc(buf, ch);
break;
case ITEM_PILL:
case ITEM_SCROLL:
case ITEM_POTION:
xprintf(buf, "Level %d spells of:",
obj->value[0]);
send_to_char(buf, ch);
if (obj->value[1] >= 0
&& obj->value[1] < MAX_SKILL)
{
send_to_char(" '", ch);
send_to_char(skill_table
[obj->value[1]].name,
ch);
send_to_char("'", ch);
}
if (obj->value[2] >= 0
&& obj->value[2] < MAX_SKILL)
{
send_to_char(" '", ch);
send_to_char(skill_table
[obj->value[2]].name,
ch);
send_to_char("'", ch);
}
if (obj->value[3] >= 0
&& obj->value[3] < MAX_SKILL)
{
send_to_char(" '", ch);
send_to_char(skill_table
[obj->value[3]].name,
ch);
send_to_char("'", ch);
}
send_to_char(".\n\r", ch);
break;
case ITEM_QUEST:
xprintf(buf, "Quest point value is %d.\n\r",
obj->value[0]);
send_to_char(buf, ch);
break;
case ITEM_PIECE:
xprintf(buf,
"This is a piece of another object.\n\r");
send_to_char(buf, ch);
break;
case ITEM_FAITHTOKEN:
xprintf(buf, "Faith point value is %d.\n\r",
obj->value[0]);
send_to_char(buf, ch);
break;
case ITEM_GRENADE:
if (obj->value[2] < 2)
xprintf(buf,
"This is a minor explosive device.\n\r");
else if (obj->value[2] < 5)
xprintf(buf,
"This is an explosive device.\n\r");
else
xprintf(buf,
"This is a powerful explosive device.\n\r");
send_to_char(buf, ch);
break;
case ITEM_WAND:
case ITEM_STAFF:
xprintf(buf, "Has %d(%d) charges of level %d",
obj->value[1], obj->value[2],
obj->value[0]);
send_to_char(buf, ch);
if (obj->value[3] >= 0
&& obj->value[3] < MAX_SKILL)
{
send_to_char(" '", ch);
send_to_char(skill_table
[obj->value[3]].name,
ch);
send_to_char("'", ch);
}
send_to_char(".\n\r", ch);
break;
case ITEM_WEAPON:
xprintf(buf, "Weapon is of type %s.\n\r",
flag_string(weapon_flags,
obj->value[3]));
send_to_char(buf, ch);
xprintf(buf,
"Damage is %d to %d (average %d).\n\r",
obj->value[1], obj->value[2],
(obj->value[1] + obj->value[2]) / 2);
send_to_char(buf, ch);
if (obj->value[0] >= 1000)
itemtype =
obj->value[0] -
((obj->value[0] / 1000) *
1000);
else
itemtype = obj->value[0];
if (itemtype > 0)
{
if (obj->level < 10)
xprintf(buf,
"%s is a minor spell weapon.\n\r",
capitalize(obj->
short_descr));
else if (obj->level < 20)
xprintf(buf,
"%s is a lesser spell weapon.\n\r",
capitalize(obj->
short_descr));
else if (obj->level < 30)
xprintf(buf,
"%s is an average spell weapon.\n\r",
capitalize(obj->
short_descr));
else if (obj->level < 40)
xprintf(buf,
"%s is a greater spell weapon.\n\r",
capitalize(obj->
short_descr));
else if (obj->level < 50)
xprintf(buf,
"%s is a major spell weapon.\n\r",
capitalize(obj->
short_descr));
else if (obj->level > 50)
xprintf(buf,
"%s is an ultimate spell weapon.\n\r",
capitalize(obj->
short_descr));
else
xprintf(buf,
"%s is a supreme spell weapon.\n\r",
capitalize(obj->
short_descr));
send_to_char(buf, ch);
}
if (itemtype == 1)
xprintf(buf,
"This weapon is dripping with corrosive acid.\n\r");
else if (itemtype == 4)
xprintf(buf,
"This weapon radiates an aura of darkness.\n\r");
else if (itemtype == 30)
xprintf(buf,
"This ancient relic is the bane of all evil.\n\r");
else if (itemtype == 34)
xprintf(buf,
"This vampiric weapon drinks the souls of its victims.\n\r");
else if (itemtype == 37)
xprintf(buf,
"This weapon has been tempered in hellfire.\n\r");
else if (itemtype == 48)
xprintf(buf,
"This weapon crackles with sparks of lightning.\n\r");
else if (itemtype == 53)
xprintf(buf,
"This weapon is dripping with a dark poison.\n\r");
else if (itemtype > 0)
xprintf(buf,
"This weapon has been imbued with the power of %s.\n\r",
skill_table[itemtype].name);
if (itemtype > 0)
send_to_char(buf, ch);
if (obj->value[0] >= 1000)
itemtype = obj->value[0] / 1000;
else
break;
if (itemtype == 4)
xprintf(buf,
"This weapon radiates an aura of darkness.\n\r");
else if (itemtype == 27 || itemtype == 2)
xprintf(buf,
"This weapon allows the wielder to see invisible things.\n\r");
else if (itemtype == 39 || itemtype == 3)
xprintf(buf,
"This weapon grants the power of flight.\n\r");
else if (itemtype == 45 || itemtype == 1)
xprintf(buf,
"This weapon allows the wielder to see in the dark.\n\r");
else if (itemtype == 46 || itemtype == 5)
xprintf(buf,
"This weapon renders the wielder invisible to the human eye.\n\r");
else if (itemtype == 52 || itemtype == 6)
xprintf(buf,
"This weapon allows the wielder to walk through solid doors.\n\r");
else if (itemtype == 54 || itemtype == 7)
xprintf(buf,
"This holy weapon protects the wielder from evil.\n\r");
else if (itemtype == 139)
xprintf(buf,
"This unholy weapon protects the wielder from good.\n\r");
else if (itemtype == 57 || itemtype == 8)
xprintf(buf,
"This ancient weapon protects the wielder in combat.\n\r");
else if (itemtype == 9)
xprintf(buf,
"This crafty weapon allows the wielder to walk in complete silence.\n\r");
else if (itemtype == 10)
xprintf(buf,
"This powerful weapon surrounds its wielder with a shield of lightning.\n\r");
else if (itemtype == 11)
xprintf(buf,
"This powerful weapon surrounds its wielder with a shield of fire.\n\r");
else if (itemtype == 12)
xprintf(buf,
"This powerful weapon surrounds its wielder with a shield of ice.\n\r");
else if (itemtype == 13)
xprintf(buf,
"This powerful weapon surrounds its wielder with a shield of acid.\n\r");
else if (itemtype == 14)
xprintf(buf,
"This weapon protects its wielder from clan DarkBlade guardians.\n\r");
else if (itemtype == 15)
xprintf(buf,
"This ancient weapon surrounds its wielder with a shield of chaos.\n\r");
else if (itemtype == 16)
xprintf(buf,
"This ancient weapon regenerates the wounds of its wielder.\n\r");
else if (itemtype == 26)
xprintf(buf,
"This ancient weapon gives the power of mantis 3.\n\r");
else if (itemtype == 17)
xprintf(buf,
"This ancient weapon allows its wielder to move at supernatural speed.\n\r");
else if (itemtype == 18)
xprintf(buf,
"This razor sharp weapon can slice through armour without difficulty.\n\r");
else if (itemtype == 19)
xprintf(buf,
"This ancient weapon spews powerful magics.\n\r");
else if (itemtype == 21)
xprintf(buf,
"This ancient weapon grants superior protection to its wielder.\n\r");
else if (itemtype == 22)
xprintf(buf,
"This ancient weapon grants its wielder supernatural vision.\n\r");
else if (itemtype == 23)
xprintf(buf,
"This ancient weapon makes its wielder fleet-footed.\n\r");
else if (itemtype == 24)
xprintf(buf,
"This ancient weapon conceals its wielder from sight.\n\r");
else if (itemtype == 25)
xprintf(buf,
"This ancient weapon invokes the power of the beast.\n\r");
else if (itemtype == 28)
xprintf(buf,
"This ancient weapon increases the level of your spells by 20.\n\r");
else
xprintf(buf,
"This item is bugged...please report it.\n\r");
if (itemtype > 0)
send_to_char(buf, ch);
break;
case ITEM_ARMOR:
xprintf(buf, "Armor class is %d.\n\r",
obj->value[0]);
send_to_char(buf, ch);
if (obj->value[3] < 1)
break;
if (obj->value[3] == 4)
xprintf(buf,
"This object radiates an aura of darkness.\n\r");
else if (obj->value[3] == 27
|| obj->value[3] == 2)
xprintf(buf,
"This item allows the wearer to see invisible things.\n\r");
else if (obj->value[3] == 39
|| obj->value[3] == 3)
xprintf(buf,
"This object grants the power of flight.\n\r");
else if (obj->value[3] == 45
|| obj->value[3] == 1)
xprintf(buf,
"This item allows the wearer to see in the dark.\n\r");
else if (obj->value[3] == 46
|| obj->value[3] == 5)
xprintf(buf,
"This object renders the wearer invisible to the human eye.\n\r");
else if (obj->value[3] == 52
|| obj->value[3] == 6)
xprintf(buf,
"This object allows the wearer to walk through solid doors.\n\r");
else if (obj->value[3] == 54
|| obj->value[3] == 7)
xprintf(buf,
"This holy relic protects the wearer from evil.\n\r");
else if (obj->value[3] == 139)
xprintf(buf,
"This unholy relic protects the wearer from good.\n\r");
else if (obj->value[3] == 57
|| obj->value[3] == 8)
xprintf(buf,
"This ancient relic protects the wearer in combat.\n\r");
else if (obj->value[3] == 9)
xprintf(buf,
"This crafty item allows the wearer to walk in complete silence.\n\r");
else if (obj->value[3] == 10)
xprintf(buf,
"This powerful item surrounds its wearer with a shield of lightning.\n\r");
else if (obj->value[3] == 11)
xprintf(buf,
"This powerful item surrounds its wearer with a shield of fire.\n\r");
else if (obj->value[3] == 12)
xprintf(buf,
"This powerful item surrounds its wearer with a shield of ice.\n\r");
else if (obj->value[3] == 13)
xprintf(buf,
"This powerful item surrounds its wearer with a shield of acid.\n\r");
else if (obj->value[3] == 14)
xprintf(buf,
"This object channels the power of God into its wearer.\n\r");
else if (obj->value[3] == 32)
xprintf(buf,
"This object channels the power of Lloth into its wearer.\n\r");
else if (obj->value[3] == 15)
xprintf(buf,
"This ancient item surrounds its wearer with a shield of chaos.\n\r");
else if (obj->value[3] == 16)
xprintf(buf,
"This ancient item regenerates the wounds of its wearer.\n\r");
else if (obj->value[3] == 17)
xprintf(buf,
"This ancient item allows its wearer to move at supernatural speed.\n\r");
else if (obj->value[3] == 18)
xprintf(buf,
"This powerful item allows its wearer to shear through armour without difficulty.\n\r");
else if (obj->value[3] == 19)
xprintf(buf,
"This powerful item spews horrifying magics.\n\r");
else if (obj->value[3] == 21)
xprintf(buf,
"This ancient item grants superior protection to its wearer.\n\r");
else if (obj->value[3] == 22)
xprintf(buf,
"This ancient item grants its wearer supernatural vision.\n\r");
else if (obj->value[3] == 23)
xprintf(buf,
"This ancient item makes its wearer fleet-footed.\n\r");
else if (obj->value[3] == 24)
xprintf(buf,
"This ancient item conceals its wearer from sight.\n\r");
else if (obj->value[3] == 25)
xprintf(buf,
"This ancient item invokes the power of the beast.\n\r");
else if (obj->value[3] == 28)
xprintf(buf,
"This ancient item invokes the power of ancient magic.\n\r");
else if (obj->value[3] == 29)
xprintf(buf,
"This ancient artifact grants its wearer the power of the third eye.\n\r");
else if (obj->value[3] == 30)
xprintf(buf,
"This great bird grants the power of talons.\n\r");
else if (obj->value[3] == 31)
xprintf(buf,
"This cursed item invokes madness.\n\r");
else
xprintf(buf,
"This item is bugged...please report it.\n\r");
if (obj->value[3] > 0)
send_to_char(buf, ch);
break;
}
for (paf = obj->pIndexData->affected; paf != NULL;
paf = paf->next)
{
if (paf->location != APPLY_NONE
&& paf->modifier != 0)
{
xprintf(buf, "Affects %s by %d.\n\r",
affect_loc_name(paf->
location),
paf->modifier);
send_to_char(buf, ch);
}
}
extract_obj(obj);
}
else
{
stc("Bug, inform an imm.\n\r", ch);
return;
}
}
else
{
stc("That item number is not for sale. Type 'list' to see what *is* for sale.\n\r", ch);
return;
}
return;
}
bool can_buy(CHAR_DATA * ch)
{
/*
* Thieves, Nightblades and Assassins
*/
//if ( (ch->in_room->vnum >= 40021 && ch->in_room->vnum <= 40030) && (!IS_CLASS(ch,CLASS_THIEF) && !IS_CLASS3(ch,CLASS3_ASSASSIN) && !IS_CLASS2(ch,CLASS2_NIGHTBLADE) ) )
//return FALSE;
return TRUE;
}