/* ************************************************************************
* File: shopedit.c Part of Archipelago *
* Usage: online object shop commands. A Neil - August 1995 *
* *
* All rights reserved. See license.doc for complete information. *
* *
* Archipelago is based on *
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. *
* Archipelago changes by Alastair J. Neil Copyright (C) 1993, 94, 95, 96 *
************************************************************************ */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "limits.h"
#include "screen.h"
#include "shopedit.h"
#include "spells.h"
#include "shop.h"
/* extern variables */
extern int top_of_world;
extern struct room_data *world;
extern struct shop_data *shop_index;
extern struct obj_data *obj_proto;
extern struct char_data *mob_proto;
extern struct index_data *obj_index;
extern struct index_data *mob_index;
extern char *item_types[];
int save_shops(int zone);
void copy_shop(struct shop_data *from, struct shop_data *to);
void free_shop(struct shop_data *shop);
SPECIAL(shop_keeper);
/* local prototypes */
void print_shop(struct descriptor_data *d);
void print_keeper(struct descriptor_data *d);
void print_sroom(struct descriptor_data *d);
int print_objt(struct descriptor_data *d);
void print_messages(struct descriptor_data *d);
void print_product(struct descriptor_data *d) ;
void print_products(struct descriptor_data *d) ;
void shopedit(struct descriptor_data *d, char *str)
{
char bufme[MAX_STRING_LENGTH];
int rshop, points, num, ja_flag;
switch(d->shedit_mode) {
case MAIN_MODE:
for (; isspace(*str); str++)
;
if (!*str){
d->oedit_mode = MAIN_MODE;
print_shop(d);
break;}
*str = LOWER(*str);
if (*str == 'q'){
if ((rshop = real_shop(d->shop_edit->virtual)) < 0){
SEND_TO_Q("Yikes shop doesn't exist.\r\nReport this!\r\n",d);
free_shop(d->shop_edit);
d->shop_edit = 0;
d->virtual = 0;
d->prompt_mode = 1;
d->iedsc = 0;
d->ex_i_dir = 0;
d->ia_flag = 0;
d->r_dir = 0;
d->to_room = 0;
REMOVE_BIT(PLR_FLAGS(d->character), PLR_BUILDING);
act("$n returns from creating part of the world.",TRUE, d->character,0,0,TO_ROOM);
return;}
if (d->shop_edit->keeper > 0)
mob_index[d->shop_edit->keeper].func = shop_keeper;
copy_shop(d->shop_edit, shop_index + rshop);
free_shop(d->shop_edit);
d->shop_edit = 0;
d->virtual = 0;
d->iedsc = 0;
d->ex_i_dir = 0;
d->ia_flag = 0;
d->r_dir = 0;
d->to_room = 0;
d->prompt_mode = 1;
REMOVE_BIT(PLR_FLAGS(d->character), PLR_BUILDING);
act("$n returns from creating part of the world.",TRUE, d->character,0,0,TO_ROOM);
save_shops(d->character->specials2.edit_zone);
return;}
else
switch (*str){
case 'k':
d->shedit_mode = SK_EDIT;
print_keeper(d);
return;
case 'r':
d->shedit_mode = SR_EDIT;
print_sroom(d);
return;
case 't':
d->shedit_mode = ST_EDIT;
d->ia_flag = print_objt(d);
return;
case 'b':
d->shedit_mode = SB_EDIT;
sprintf(bufme,"Shop profit on item bought by players in %%\r\n");
send_to_char(bufme,d->character);
sprintf(bufme, "Shop profit_buy: %s%d%s New profit: ",
cy,(int) (100*d->shop_edit->profit_buy),nrm);
send_to_char(bufme,d->character);
return;
case 's':
d->shedit_mode = SS_EDIT;
sprintf(bufme,"Shop profit on item sold by players in %%\r\n");
send_to_char(bufme,d->character);
sprintf(bufme, "Shop profit_sell: %s%d%s New profit: ",
cy,(int) (100*d->shop_edit->profit_sell),nrm);
send_to_char(bufme,d->character);
return;
case 'e':
d->shedit_mode = STE1_EDIT;
sprintf(bufme,
"Keeper temper 1: %s%d%s\r\nEnter new temper: 1 or 0:",
rd,d->shop_edit->temper1,nrm);
send_to_char(bufme,d->character);
return;
case 'o':
d->shedit_mode = SO1_EDIT;
sprintf(bufme,
"Shop opens 1: %s%d%s\r\nEnter open time: [0,6]:",
gn,d->shop_edit->open1,nrm);
send_to_char(bufme,d->character);
return;
case 'm':
d->shedit_mode = SM_EDIT;
print_messages(d);
return;
case 'p':
d->shedit_mode = SP_EDIT;
print_products(d);
return;
default:
print_shop(d);
return;
}
case SP_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
print_products(d);
return;
}
if (*str == 'q' || *str == 'Q') {
print_shop(d);
d->shedit_mode = MAIN_MODE;
return;
}
*str = LOWER(*str);
switch (*str) {
case '0':
d->ia_flag = 0;
break;
case '1':
d->ia_flag = 1;
break;
case '2':
d->ia_flag = 2;
break;
case '3':
d->ia_flag = 3;
break;
case '4':
d->ia_flag = 4;
break;
case 'q':
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
default:
SEND_TO_Q("No such item.\r\n",d);
return;
}
d->shedit_mode = SPC_EDIT;
print_product(d);
return;
case SPC_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
print_product(d);
break;}
if (*str == 'q' || *str == 'Q') {
print_products(d);
d->shedit_mode = SP_EDIT;
return;
}
points = atoi(str);
if (!(num = real_object(points))) {
d->shop_edit->producing[d->ia_flag] = -1;
sprintf(bufme,"%sNo such object%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
print_product(d);
break;}
else {
d->shop_edit->producing[d->ia_flag] = num;
print_products(d);
d->shedit_mode = SP_EDIT;
return;
}
case SM_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
print_messages(d);
return;
}
*str = LOWER(*str);
if (*str != '1' && *str != '2' && *str != '3' && *str != '4' &&
*str != '5' && *str != '6' && *str != '7' && *str != 'q') {
SEND_TO_Q("No such string.\r\n",d);
return;
}
switch (*str) {
case '1':
d->str = &(d->shop_edit->no_such_item1);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new no_such_item1 string. No crlf. End with @@\r\n",d);
return;
case '2':
d->str = &(d->shop_edit->no_such_item2);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new no_such_item2 string. No crlf. End with @@\r\n",d);
return;
case '3':
d->str = &(d->shop_edit->do_not_buy);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new do_not_buy string. No crlf. End with @@\r\n",d);
return;
case '4':
d->str = &(d->shop_edit->missing_cash1);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new missing_cash1 string. No crlf. End with @@\r\n",d);
return;
case '5':
d->str = &(d->shop_edit->missing_cash2);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new missing_cash2 string. No crlf. End with @@\r\n",d);
return;
case '6':
d->str = &(d->shop_edit->message_buy);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new message_buy string. No crlf. End with @@\r\n",d);
return;
case '7':
d->str = &(d->shop_edit->message_sell);
free(*d->str);
*d->str = 0;
d->max_str = 65;
SEND_TO_Q("Enter new message_sell string. No crlf. End with @@\r\n",d);
return;
case 'q':
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
case SS_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Profit sell unchanged\r\n",d);
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
points = atoi(str);
if (points < 1 || points > 1000) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Profit sell: %s%d%s\r\nEnter new profit: [1,1000]:",
gn,(int) (100*d->shop_edit->profit_sell),nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->profit_sell = ((float) points)/100. ;
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
case SB_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Profit buy unchanged\r\n",d);
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
points = atoi(str);
if (points < 1 || points > 1000) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Profit buy: %s%d%s\r\nEnter new profit: [1,1000]:",
gn,(int) (100*d->shop_edit->profit_buy),nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->profit_buy = ((float) points)/100. ;
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
case SO1_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Open 1 unchanged\r\n",d);
sprintf(bufme,"Open 2: %s%d%s\r\nEnter new open time: [14,20]:",
gn,d->shop_edit->open2,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = SO2_EDIT;
return;
}
points = atoi(str);
if (points < 0 || points > 6) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Shop opens 1: %s%d%s\r\nEnter open time: [0,6]:",
gn,d->shop_edit->open1,nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->open1 = points;
sprintf(bufme,"Open 2: %s%d%s\r\nEnter new open time: [14,20]:",
gn,d->shop_edit->open2,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = SO2_EDIT;
return;
}
case SO2_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Open 2 unchanged\r\n",d);
sprintf(bufme,"Closing 1: %s%d%s\r\nEnter new closing time: [7,13]:",
rd,d->shop_edit->close1,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = SC1_EDIT;
return;
}
points = atoi(str);
if (points < 14 || points > 20) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Shop opens 2: %s%d%s\r\nEnter open time: [14,20]:",
gn,d->shop_edit->open2,nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->open2 = points;
sprintf(bufme,"Closing 1: %s%d%s\r\nEnter new closing time: [7,13]:",
rd,d->shop_edit->close1,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = SC1_EDIT;
return;
}
case SC1_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Close 1 unchanged\r\n",d);
sprintf(bufme,"Closing 2: %s%d%s\r\nEnter new open time: [21,28]:",
rd,d->shop_edit->close2,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = SC2_EDIT;
return;
}
points = atoi(str);
if (points < 7 || points > 13) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Closing 1: %s%d%s\r\nEnter close time: [7,13]:",
rd,d->shop_edit->close1,nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->close1 = points;
sprintf(bufme,"Closeing 2: %s%d%s\r\nEnter new close time: [21,28]:",
rd,d->shop_edit->close2,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = SC2_EDIT;
return;
}
case SC2_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Close 2 unchanged\r\n",d);
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
points = atoi(str);
if (points < 21 || points > 28) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Closing 2: %s%d%s\r\nEnter close time: [21,28]:",
rd,d->shop_edit->close2,nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->close2 = points;
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
case STE1_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Temper 1 unchanged\r\n",d);
sprintf(bufme,"Keeper temper 2: %s%d%s\r\nEnter new temper: 1 or 0:",
rd,d->shop_edit->temper2,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = STE2_EDIT;
return;
}
points = atoi(str);
if (points < 0 || points > 1) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Keeper temper 1: %s%d%s\r\nEnter new temper: 1 or 0:",
rd,d->shop_edit->temper1,nrm);
send_to_char(bufme,d->character);
return;}
else {
d->shop_edit->temper1 = points;
sprintf(bufme,"Keeper temper 2: %s%d%s\r\nEnter new temper: 1 or 0:",
rd,d->shop_edit->temper2,nrm);
send_to_char(bufme,d->character);
d->shedit_mode = STE2_EDIT;
return;
}
case STE2_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
SEND_TO_Q("Temper 2 unchanged\r\n",d);
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
points = atoi(str);
if (points < 0 || points > 1) {
sprintf(bufme,"%sIllegal value%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
sprintf(bufme,"Keeper temper 2: %s%d%s\r\nEnter new temper: 1 or 0:",
rd,d->shop_edit->temper2,nrm);
send_to_char(bufme,d->character);
return;
}
else {
d->shop_edit->temper2 = points;
d->shedit_mode = MAIN_MODE;
print_shop(d);
return;
}
case ST_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
print_objt(d);
return;}
if (is_number(str)){
ja_flag = atoi(str);
if (ja_flag > 0 && ja_flag <= d->ia_flag )
{
if (d->shop_edit->tradetype < 0)
d->shop_edit->tradetype = 0;
if (!IS_SET(d->shop_edit->tradetype, 1<<ja_flag))
SET_BIT(d->shop_edit->tradetype, 1<<ja_flag);
else
REMOVE_BIT(d->shop_edit->tradetype, 1<<ja_flag);
d->ia_flag = print_objt(d);
return;
}
else if (ja_flag == 0) {
SEND_TO_Q("Setting to trade in Anything.\r\n",d);
d->shop_edit->tradetype = 0;
d->ia_flag = print_objt(d);
return;
}
else {
SEND_TO_Q("Setting to Sell only.\r\n",d);
d->shop_edit->tradetype = -1;
d->ia_flag = print_objt(d);
return;
}
}
else if (*str == 'Q' || *str == 'q'){
print_shop(d);
d->shedit_mode = MAIN_MODE;
break;
}
else{
SEND_TO_Q("Setting to Sell only.\r\n",d);
d->shop_edit->tradetype = -1;
d->ia_flag = print_objt(d);
break;
}
case SK_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
print_keeper(d);
break;}
if (*str == 'q' || *str == 'Q') {
print_shop(d);
d->shedit_mode = MAIN_MODE;
return;
}
points = atoi(str);
if (!(num = real_mobile(points))) {
d->shop_edit->keeper = 0;
sprintf(bufme,"%sNo such mobile%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
print_keeper(d);
break;}
else {
d->shop_edit->keeper = num;
print_keeper(d);
return;
}
case SR_EDIT:
for ( ; isspace(*str); str++)
;
if (!*str){
print_sroom(d);
break;}
if (*str == 'q' || *str == 'Q') {
print_shop(d);
d->shedit_mode = MAIN_MODE;
return;
}
points = atoi(str);
if (!(num = real_room(points))) {
d->shop_edit->in_room = -1;
sprintf(bufme,"%sNo such room setting to wanderer%s\r\n",rd,nrm);
SEND_TO_Q(bufme,d);
print_sroom(d);
break;}
else {
d->shop_edit->in_room = points;
print_sroom(d);
return;
}
}
}
void print_product(struct descriptor_data *d) {
if (d->shop_edit->producing[d->ia_flag] >= 0)
sprintf(buf,"Object vnum = %s%d%s %s%s%s\r\n",gn,
obj_index[d->shop_edit->producing[d->ia_flag]].virtual,
nrm,cy,
obj_proto[d->shop_edit->producing[d->ia_flag]].short_description,
nrm);
else
sprintf(buf,"Object vnum = %sNone set%s\r\n",gn,nrm);
send_to_char(buf,d->character);
sprintf(buf,"Enter new Vnum, -1 to clear, Q to quit: ");
send_to_char(buf,d->character);
}
void print_products(struct descriptor_data *d)
{
int i;
for (i=0;i< MAX_PROD;i++) {
if (d->shop_edit->producing[i] >=0)
sprintf(buf,"(%s%d%s) [%s%d%s] %s%s%s\r\n",gn,i,nrm,cy,
obj_index[d->shop_edit->producing[i]].virtual,
nrm,yl, obj_proto[d->shop_edit->producing[i]].short_description,
nrm);
else
sprintf(buf,"(%s%d%s) %sNot set%s\r\n",gn,i,nrm,cy,nrm);
send_to_char(buf,d->character);
}
sprintf(buf,"(%sQ%s)uit\r\n",gn,nrm);
send_to_char(buf,d->character);
}
int print_objt(struct descriptor_data *d)
{
int i;
if (d->shop_edit->tradetype < 0)
sprintf(buf1 ,"%sTrade in:%s %sSells only%s\r\n\r\n",cy,nrm,gn,nrm);
else if (d->shop_edit->tradetype == 0)
sprintf(buf1 ,"%sTrade in:%s %sANYTHING%s\r\n\r\n",cy,nrm,gn,nrm);
else {
sprintbit(d->shop_edit->tradetype, item_types, buf);
sprintf(buf1 ,"%sTrade in:%s %s%s%s\r\n\r\n",cy,nrm,gn,buf,nrm);
}
SEND_TO_Q(buf1,d);
i = 0;
sprintf(buf,"%s","ANYTHING");
sprintf(buf1,"[%2d] %s%-15.15s%s ",i,gn,buf,nrm);
SEND_TO_Q(buf1,d);
i = 1;
sprintf(buf1,"[%2d] %s%-15.15s%s [%2d] %s%-15.15s%s \r\n",i,gn,item_types[i],nrm,i+1,gn,item_types[i+1],nrm);
i +=2;
SEND_TO_Q(buf1,d);
while (*item_types[i] != '\n')
{
if (*item_types[i+2] != '\n' && *item_types[i+1] != '\n'){
sprintf(buf1,"[%2d] %s%-15.15s%s [%2d] %s%-15.15s%s [%2d] %s%-15.15s%s \r\n",i,gn,item_types[i],nrm,i+1,gn,item_types[i+1],nrm,i+2,gn,item_types[i+2],nrm);
i +=3;}
else if (*item_types[i+1] != '\n') {
sprintf(buf1,"[%2d] %s%-15.15s%s [%2d] %s%-15.15s%s \r\n",i,gn,item_types[i],nrm,i+1,gn,item_types[i+1],nrm);
i +=2;}
else{
sprintf(buf1,"[%2d] %s%-15.15s%s\r\n",i,gn,item_types[i],nrm);
i +=1;}
SEND_TO_Q(buf1,d);
}
sprintf(buf1 ,"\r\n%sEnter item type # to toggle or -1 for sell only, Q to quit.%s ",cy,nrm);
SEND_TO_Q(buf1,d);
return(i-1);
}
void print_sroom(struct descriptor_data *d)
{
char bufme[200];
if (d->shop_edit->in_room > 0)
sprintf(bufme,"Room: (%s%d%s) %s%s%s\r\n",gn,
d->shop_edit->in_room,nrm,byl,
world[real_room(d->shop_edit->in_room)].name,nrm);
else
sprintf(bufme,"Room vnum : %sWander%s\r\n",gn,nrm);
send_to_char(bufme, d->character);
sprintf(bufme, "Enter vnum of new room, -ve num to clear, Q to quit: ");
send_to_char(bufme, d->character);
}
void print_keeper(struct descriptor_data *d)
{
char bufme[200];
if (d->shop_edit->keeper > 0)
sprintf(bufme,"(%sK%s)eeper: [%s%d%s] %s%s%s\r\n",cy,nrm,gn,
mob_index[d->shop_edit->keeper].virtual,nrm,
cy,mob_proto[d->shop_edit->keeper].player.short_descr,nrm
);
else
sprintf(bufme,"(%sK%s)eeper: %sNone set%s\r\n",cy,nrm,gn,nrm);
send_to_char(bufme, d->character);
sprintf(bufme, "Enter vnum of new keeper, -ve num to clear, Q to quit: ");
send_to_char(bufme, d->character);
}
void print_messages(struct descriptor_data *d)
{
sprintf(buf1,"%sMessages:%s\r\n",cy,nrm);
send_to_char(buf1, d->character);
sprintf(buf1, " (%s1%s) No such item 1: %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->no_such_item1,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%s2%s) No such item 2: %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->no_such_item2,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%s3%s) Do not buy : %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->do_not_buy,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%s4%s) Missing cash 1: %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->missing_cash1,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%s5%s) Missing cash 2: %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->missing_cash2,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%s6%s) Message buy : %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->message_buy,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%s7%s) Message sell : %s%s%s\r\n",gn,nrm,
bwht,d->shop_edit->message_sell,nrm);
send_to_char(buf1,d->character);
sprintf(buf1, " (%sQ%s)uit.\r\n",gn,nrm);
send_to_char(buf1,d->character);
}
void print_shop(struct descriptor_data *d)
{
int i,j;
sprintf(cy,"%s",CCBBLU(d->character,C_NRM));
sprintf(wh,"%s",CCWHT(d->character,C_NRM));
sprintf(ma,"%s",CCMAG(d->character,C_NRM));
sprintf(nrm,"%s",CCNRM(d->character,C_NRM));
sprintf(gn,"%s",CCGRN(d->character,C_NRM));
sprintf(yl,"%s",CCYEL(d->character,C_NRM));
sprintf(rd,"%s",CCRED(d->character,C_NRM));
sprintf(bgn,"%s",CCBGRN(d->character,C_NRM));
sprintf(byl,"%s",CCBYEL(d->character,C_NRM));
sprintf(brd,"%s",CCBRED(d->character,C_NRM));
sprintf(bwht,"%s",CCBWHT(d->character,C_NRM));
sprintf(buf,"%sShop Number: %d%s\r\n",bgn, d->shop_edit->virtual,nrm);
send_to_char(buf,d->character);
if (d->shop_edit->keeper > 0)
sprintf(buf,"(%sK%s)eeper: (%s%d%s) %s%s%s\r\n",cy,nrm,gn,
mob_index[d->shop_edit->keeper].virtual,nrm, byl,
mob_proto[d->shop_edit->keeper].player.short_descr, nrm);
else
sprintf(buf,"(%sK%s)eeper: %sNone set%s ",cy,nrm,gn,nrm);
send_to_char(buf, d->character);
if (d->shop_edit->in_room > 0)
sprintf(buf,"(%sR%s)oom: (%s%d%s) %s%s%s\r\n",cy,nrm,gn,
d->shop_edit->in_room,nrm,byl,
world[real_room(d->shop_edit->in_room)].name,nrm);
else
sprintf(buf,"(%sR%s)oom: %sWander%s\r\n",cy,nrm,gn,nrm);
send_to_char(buf, d->character);
if (d->shop_edit->tradetype > 0) {
sprintbit(d->shop_edit->tradetype,item_types, buf2);
sprintf(buf, "(%sT%s)rades: %s%s%s\r\n",cy,nrm,gn, buf2,nrm);
}
else if (d->shop_edit->tradetype == 0)
sprintf(buf, "(%sT%s)rades: %sANYTHING%s\r\n",cy,nrm,gn,nrm);
else
sprintf(buf, "(%sT%s)rades: %sOnly Sells%s\r\n",cy,nrm,gn,nrm);
send_to_char(buf,d->character);
sprintf(buf,"Profit (%sB%s)uy: %s%f%s, (%sS%s)ell: %s%f%s\r\n",
cy,nrm,gn,d->shop_edit->profit_buy,nrm,
cy,nrm,gn,d->shop_edit->profit_sell,nrm);
send_to_char(buf,d->character);
sprintf(buf, "T(%sE%s)mpers: (1) %s%d%s (2) %s%d%s\r\n",cy,nrm,rd,
d->shop_edit->temper1,nrm,rd,d->shop_edit->temper2,nrm);
send_to_char(buf, d->character);
sprintf(buf, "(%sO%s)pen: (1) %s%d%s (2) %s%d%s",cy,nrm,gn,
d->shop_edit->open1,nrm,gn,d->shop_edit->open2,nrm);
send_to_char(buf, d->character);
sprintf(buf, " Close: (1) %s%d%s (2) %s%d%s\r\n",rd,
d->shop_edit->close1,nrm,rd,d->shop_edit->close2,nrm);
send_to_char(buf, d->character);
sprintf(buf,"(%sM%s)essages:\r\n",cy,nrm);
send_to_char(buf, d->character);
sprintf(buf, " No such item 1: %s%s%s\r\n",
bwht,d->shop_edit->no_such_item1,nrm);
send_to_char(buf,d->character);
sprintf(buf, " No such item 2: %s%s%s\r\n",
bwht,d->shop_edit->no_such_item2,nrm);
send_to_char(buf,d->character);
sprintf(buf, " Do not buy : %s%s%s\r\n",
bwht,d->shop_edit->do_not_buy,nrm);
send_to_char(buf,d->character);
sprintf(buf, " Missing cash 1: %s%s%s\r\n",
bwht,d->shop_edit->missing_cash1,nrm);
send_to_char(buf,d->character);
sprintf(buf, " Missing cash 2: %s%s%s\r\n",
bwht,d->shop_edit->missing_cash2,nrm);
send_to_char(buf,d->character);
sprintf(buf, " Message buy : %s%s%s\r\n",
bwht,d->shop_edit->message_buy,nrm);
send_to_char(buf,d->character);
if (d->shop_edit->tradetype >=0) {
sprintf(buf, " Message sell : %s%s%s\r\n",
bwht,d->shop_edit->message_sell,nrm);
send_to_char(buf,d->character);
}
sprintf(buf,"(%sP%s)roducing:\r\n",cy,nrm);
send_to_char(buf,d->character);
for (i=0,j=0;i< MAX_PROD;i++) {
if (d->shop_edit->producing[i] >=0) {
sprintf(buf,"(%s%d%s) [%s%d%s] %s%s%s\r\n",gn,j,nrm,cy,
obj_index[d->shop_edit->producing[i]].virtual,
nrm,yl, obj_proto[d->shop_edit->producing[i]].short_description,
nrm);
send_to_char(buf,d->character);
j++;
}
}
}