#include <stdio.h>
#include "protos.h"
#define OBJ_MAIN_MENU 0
#define CHANGE_OBJ_NAME 1
#define CHANGE_OBJ_SHORT 2
#define CHANGE_OBJ_DESC 3
#define CHANGE_OBJ_TYPE 4
#define CHANGE_OBJ_WEAR 5
#define CHANGE_OBJ_FLAGS 6
#define CHANGE_OBJ_WEIGHT 7
#define CHANGE_OBJ_VALUE 8
#define CHANGE_OBJ_COST 9
#define CHANGE_OBJ_AFFECTS 10
#define CHANGE_OBJ_AFFECT1 11
#define CHANGE_OBJ_AFFECT2 12
#define CHANGE_OBJ_AFFECT3 13
#define CHANGE_OBJ_AFFECT4 14
#define CHANGE_AFFECT1_MOD 15
#define CHANGE_AFFECT2_MOD 16
#define CHANGE_AFFECT3_MOD 17
#define CHANGE_AFFECT4_MOD 18
#define CHANGE_OBJ_VALUES 19
#define CHANGE_OBJ_VALUE1 20
#define CHANGE_OBJ_VALUE2 21
#define CHANGE_OBJ_VALUE3 22
#define CHANGE_OBJ_VALUE4 23
#define OBJ_HIT_RETURN 24
#define CHANGE_OBJ_AFFECT5 25
#define CHANGE_AFFECT5_MOD 26
#define ENTER_CHECK 1
extern struct index_data *obj_index; /* index table for object file */
extern const char *item_types[];
extern const char *extra_bits[];
extern const char *wear_bits[];
extern const char *apply_types[];
extern const char *immunity_names[];
char *obj_edit_menu = " 1) Name 2) Short description\n\r"
" 3) Description 4) Type\n\r"
" 5) Wear positions 6) Extra flags\n\r"
" 7) Weight 8) Value\n\r"
" 9) Rent cost 10) Extra affects\n\r"
" 11) Object values\n\r\n\r";
void ChangeObjWear(struct char_data *ch, char *arg, int type);
void UpdateObjMenu(struct char_data *ch);
void ChangeObjName(struct char_data *ch, char *arg, int type);
void ChangeObjShort(struct char_data *ch, char *arg, int type);
void ChangeObjDesc(struct char_data *ch, char *arg, int type);
void ChangeObjType(struct char_data *ch, char *arg, int type);
void ChangeObjFlags(struct char_data *ch, char *arg, int type);
void ChangeObjWeight(struct char_data *ch, char *arg, int type);
void ChangeObjPrice(struct char_data *ch, char *arg, int type);
void ChangeObjCost(struct char_data *ch, char *arg, int type);
void ChangeObjAffects(struct char_data *ch, char *arg, int type);
void ChangeObjAffect(struct char_data *ch, char *arg, int type);
void ChangeAffectMod(struct char_data *ch, char *arg, int type);
void ChangeObjValues(struct char_data *ch, char *arg, int type);
void ChangeObjValue(struct char_data *ch, char *arg, int type);
void ObjHitReturn(struct char_data *ch, char *arg, int type);
void ChangeObjFlags(struct char_data *ch, char *arg, int type)
{
int i, a, check=0, row, update;
char buf[255];
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg);
update--;
if(type != ENTER_CHECK) {
if(update < 0 || update > 29)
return;
i=1;
if(update>0)
for(a=1;a<=update;a++)
i*=2;
if(IS_SET(ch->specials.objedit->obj_flags.extra_flags, i))
REMOVE_BIT(ch->specials.objedit->obj_flags.extra_flags, i);
else
SET_BIT(ch->specials.objedit->obj_flags.extra_flags, i);
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Object Extra Flags:");
send_to_char(buf, ch);
row = 0;
for(i = 0; i < 30; i++) {
sprintf(buf, VT_CURSPOS, row + 4, ((i & 1) ? 45 : 5));
if(i & 1)
row++;
send_to_char(buf, ch);
check=1;
if(i>0)
for(a=1;a<=i;a++)
check*=2;
sprintf(buf, "%-2d [%s] %s", i + 1, ((ch->specials.objedit->obj_flags.extra_flags & (check)) ? "X" : " "), extra_bits[i]);
send_to_char(buf, ch);
}
sprintf(buf, VT_CURSPOS, 20, 1);
send_to_char(buf, ch);
send_to_char("Select the number to toggle, <C/R> to return to main menu.\n\r--> ", ch);
}
void ChangeObjWear(struct char_data *ch, char *arg, int type)
{
int i, a, check=0, row, update;
char buf[255];
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg);
update--;
if(type != ENTER_CHECK) {
if(update < 0 || update > 15)
return;
i=1;
if(update>0)
for(a=1;a<=update;a++)
i*=2;
if(IS_SET(ch->specials.objedit->obj_flags.wear_flags, i))
REMOVE_BIT(ch->specials.objedit->obj_flags.wear_flags, i);
else
SET_BIT(ch->specials.objedit->obj_flags.wear_flags, i);
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Object Wear Flags:");
send_to_char(buf, ch);
row = 0;
for(i = 0; i < 16; i++) {
sprintf(buf, VT_CURSPOS, row + 4, ((i & 1) ? 45 : 5));
if(i & 1)
row++;
send_to_char(buf, ch);
check=1;
if(i>0)
for(a=1;a<=i;a++)
check*=2;
sprintf(buf, "%-2d [%s] %s", i + 1, ((ch->specials.objedit->obj_flags.wear_flags & (check)) ? "X" : " "), wear_bits[i]);
send_to_char(buf, ch);
}
sprintf(buf, VT_CURSPOS, 20, 1);
send_to_char(buf, ch);
send_to_char("Select the number to toggle, <C/R> to return to main menu.\n\r--> ", ch);
}
void do_oedit(struct char_data *ch, char *argument, int cmd)
{
char name[20];
struct obj_data *obj;
int i;
if(IS_NPC(ch))
return;
if ((IS_NPC(ch)) || (GetMaxLevel(ch)<CREATOR))
return;
if (!ch->desc) /* someone is forced to do something. can be bad! */
return; /* the ch->desc->str field will cause problems... */
if (GetMaxLevel(ch) < GREATER_GOD &&
!IS_SET(ch->player.user_flags,CAN_OBJ_EDIT)) {
send_to_char("You do not have access to object editing.\n\r",ch);
return;
}
for (i = 0; *(argument + i) == ' '; i++);
if (!*(argument + i)) {
send_to_char("Oedit what?\n\r", ch);
return;
}
argument = one_argument(argument, name);
if (!(obj = (struct obj_data *)get_obj_vis_accessible(ch, name))) {
send_to_char("I don't see that object here.\n\r",ch);
return;
}
#if 0
if (obj_index[obj->item_number].data == NULL)
read_object_to_memory(obj_index[obj->item_number].virtual);
ch->specials.objedit=obj_index[obj->item_number].data;
#else
ch->specials.objedit=obj;
#endif
ch->specials.oedit = OBJ_MAIN_MENU;
ch->desc->connected = CON_OBJ_EDITING;
act("$n has begun editing an object.", FALSE, ch, 0, 0, TO_ROOM);
GET_POS(ch)=POSITION_SLEEPING;
/* if(GetMaxLevel(ch)<ROLORD)
ch->specials.objedit->mortal_can_use=FALSE;
*/
UpdateObjMenu(ch);
}
void UpdateObjMenu(struct char_data *ch)
{
char buf[255];
struct obj_data *obj;
obj = ch->specials.objedit;
send_to_char(VT_HOMECLR, ch);
sprintf(buf, VT_CURSPOS, 1, 1);
send_to_char(buf, ch);
sprintf(buf, "Object Name: %s", obj->name);
send_to_char(buf, ch);
sprintf(buf, VT_CURSPOS, 3, 1);
send_to_char(buf, ch);
send_to_char("Menu:\n\r", ch);
send_to_char(obj_edit_menu, ch);
send_to_char("--> ", ch);
}
void ObjEdit(struct char_data *ch, char *arg)
{
if(ch->specials.oedit == OBJ_MAIN_MENU) {
if(!*arg || *arg == '\n') {
ch->desc->connected = CON_PLYNG;
act("$n has returned from editing an object.", FALSE, ch, 0, 0, TO_ROOM);
GET_POS(ch)=POSITION_STANDING;
return;
}
switch(atoi(arg)) {
case 0: UpdateObjMenu(ch);
return;
case 1: ch->specials.oedit = CHANGE_OBJ_NAME;
ChangeObjName(ch, "", ENTER_CHECK);
return;
case 2: ch->specials.oedit = CHANGE_OBJ_SHORT;
ChangeObjShort(ch, "", ENTER_CHECK);
return;
case 3: ch->specials.oedit = CHANGE_OBJ_DESC;
ChangeObjDesc(ch, "", ENTER_CHECK);
return;
case 4: ch->specials.oedit = CHANGE_OBJ_TYPE;
ChangeObjType(ch, "", ENTER_CHECK);
return;
case 5: ch->specials.oedit = CHANGE_OBJ_WEAR;
ChangeObjWear(ch, "", ENTER_CHECK);
return;
case 6: ch->specials.oedit = CHANGE_OBJ_FLAGS;
ChangeObjFlags(ch, "", ENTER_CHECK);
return;
case 7: ch->specials.oedit = CHANGE_OBJ_WEIGHT;
ChangeObjWeight(ch, "", ENTER_CHECK);
return;
case 8: ch->specials.oedit = CHANGE_OBJ_VALUE;
ChangeObjPrice(ch, "", ENTER_CHECK);
return;
case 9: ch->specials.oedit = CHANGE_OBJ_COST;
ChangeObjCost(ch, "", ENTER_CHECK);
return;
case 10: ch->specials.oedit = CHANGE_OBJ_AFFECTS;
ChangeObjAffects(ch, "", ENTER_CHECK);
return;
case 11: ch->specials.oedit = CHANGE_OBJ_VALUES;
ChangeObjValues(ch, "", ENTER_CHECK);
return;
default: UpdateObjMenu(ch);
return;
}
}
switch(ch->specials.oedit) {
case CHANGE_OBJ_NAME: ChangeObjName(ch, arg, 0);
return;
case CHANGE_OBJ_SHORT: ChangeObjShort(ch, arg, 0);
return;
case CHANGE_OBJ_DESC: ChangeObjDesc(ch, arg, 0);
return;
case CHANGE_OBJ_WEAR: ChangeObjWear(ch, arg, 0);
return;
case CHANGE_OBJ_TYPE:
ChangeObjType(ch, arg, 0);
return;
case CHANGE_OBJ_FLAGS:
ChangeObjFlags(ch, arg, 0);
return;
case CHANGE_OBJ_WEIGHT:
ChangeObjWeight(ch, arg, 0);
return;
case CHANGE_OBJ_VALUE:
ChangeObjPrice(ch, arg, 0);
return;
case CHANGE_OBJ_COST:
ChangeObjCost(ch, arg, 0);
return;
case CHANGE_OBJ_AFFECTS:
ChangeObjAffects(ch, arg, 0);
return;
case CHANGE_OBJ_AFFECT1:
case CHANGE_OBJ_AFFECT2:
case CHANGE_OBJ_AFFECT3:
case CHANGE_OBJ_AFFECT4:
case CHANGE_OBJ_AFFECT5:
ChangeObjAffect(ch, arg, 0);
return;
case CHANGE_AFFECT1_MOD:
case CHANGE_AFFECT2_MOD:
case CHANGE_AFFECT3_MOD:
case CHANGE_AFFECT4_MOD:
case CHANGE_AFFECT5_MOD:
ChangeAffectMod(ch,arg,0);
return;
case CHANGE_OBJ_VALUES:
ChangeObjValues(ch, arg, 0);
return;
case CHANGE_OBJ_VALUE1:
case CHANGE_OBJ_VALUE2:
case CHANGE_OBJ_VALUE3:
case CHANGE_OBJ_VALUE4:
ChangeObjValue(ch, arg, 0);
return;
case OBJ_HIT_RETURN:
ObjHitReturn(ch, arg, 0);
return;
default: log("Got to bad spot in ObjEdit");
return;
}
}
void ChangeObjName(struct char_data *ch, char *arg, int type)
{
char buf[255];
struct obj_data *obj;
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
obj=ch->specials.objedit;
if(type != ENTER_CHECK) {
if(obj->name)
free(obj->name);
obj->name = (char *)strdup(arg);
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Current Object Name: %s", obj->name);
send_to_char(buf, ch);
send_to_char("\n\r\n\rNew Object Name: ", ch);
return;
}
void ChangeObjShort(struct char_data *ch, char *arg, int type)
{
char buf[255];
struct obj_data *obj;
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
obj=ch->specials.objedit;
if(type != ENTER_CHECK) {
if(obj->short_description)
free(obj->short_description);
obj->short_description = (char *)strdup(arg);
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Current Object Short Description: %s", obj->short_description);
send_to_char(buf, ch);
send_to_char("\n\r\n\rNew Object Short Description: ", ch);
return;
}
void ChangeObjDesc(struct char_data *ch, char *arg, int type)
{
char buf[255];
struct obj_data *obj;
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
obj=ch->specials.objedit;
if(type != ENTER_CHECK) {
if(obj->description)
free(obj->description);
obj->description = (char *)strdup(arg);
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Current Object Description: %s", obj->description);
send_to_char(buf, ch);
send_to_char("\n\r\n\rNew Object Description: ", ch);
return;
}
void ChangeObjType(struct char_data *ch, char *arg, int type)
{
int i, row, update;
char buf[255];
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg);
update--;
if(type != ENTER_CHECK) {
switch(ch->specials.oedit) {
case CHANGE_OBJ_TYPE: if(update < 0 || update > 24)
return;
else {
ch->specials.objedit->obj_flags.type_flag = update;
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
}
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Object Type: %s", item_types[ch->specials.objedit->obj_flags.type_flag]);
send_to_char(buf, ch);
row = 0;
for(i = 0; i < 25; i++) {
sprintf(buf, VT_CURSPOS, row + 4, ((i & 1) ? 45 : 5));
if(i & 1)
row++;
send_to_char(buf, ch);
sprintf(buf, "%-2d %s", i + 1, item_types[i]);
send_to_char(buf, ch);
}
sprintf(buf, VT_CURSPOS, 20, 1);
send_to_char(buf, ch);
send_to_char("Select the number to set to, <C/R> to return to main menu.\n\r--> ", ch);
}
void ChangeObjWeight(struct char_data *ch, char *arg, int type)
{
char buf[255];
struct obj_data *obj;
long change;
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
obj=ch->specials.objedit;
if(type != ENTER_CHECK) {
change=atoi(arg);
if(change<0) change=0;
obj->obj_flags.weight = change;
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Current Object Weight: %d", obj->obj_flags.weight);
send_to_char(buf, ch);
send_to_char("\n\r\n\rNew Object Weight: ", ch);
return;
}
void ChangeObjCost(struct char_data *ch, char *arg, int type)
{
char buf[255];
struct obj_data *obj;
long change;
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
obj=ch->specials.objedit;
if(type != ENTER_CHECK) {
change=atoi(arg);
if(change<0) change=0;
obj->obj_flags.cost_per_day = change;
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Current Object Rental Cost Per Day: %d", obj->obj_flags.cost_per_day);
send_to_char(buf, ch);
send_to_char("\n\r\n\rNew Object Rental Cost Per Day: ", ch);
return;
}
void ObjHitReturn(struct char_data *ch, char *arg, int type)
{
if(type != ENTER_CHECK) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
send_to_char("\n\rHit return: ", ch);
return;
}
void ChangeObjPrice(struct char_data *ch, char *arg, int type)
{
char buf[255];
struct obj_data *obj;
long change;
if(type != ENTER_CHECK)
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
obj=ch->specials.objedit;
if(type != ENTER_CHECK) {
change=atoi(arg);
if(change<0) change=0;
obj->obj_flags.cost = change;
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
sprintf(buf, "Current Object Value: %d", obj->obj_flags.cost);
send_to_char(buf, ch);
send_to_char("\n\r\n\rNew Object Value: ", ch);
return;
}
void ChangeObjAffects(struct char_data *ch, char *arg, int type)
{
int update;
char buf[1024];
if(type != ENTER_CHECK) {
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg);
if(update == 0) {
ChangeObjAffects(ch, "", ENTER_CHECK);
return;
}
switch(update) {
case 1: ch->specials.oedit = CHANGE_OBJ_AFFECT1;
ChangeObjAffect(ch, "", ENTER_CHECK);
return;
break;
case 2: ch->specials.oedit = CHANGE_OBJ_AFFECT2;
ChangeObjAffect(ch, "", ENTER_CHECK);
return;
break;
case 3: ch->specials.oedit = CHANGE_OBJ_AFFECT3;
ChangeObjAffect(ch, "", ENTER_CHECK);
return;
break;
case 4: ch->specials.oedit = CHANGE_OBJ_AFFECT4;
ChangeObjAffect(ch, "", ENTER_CHECK);
return;
break;
case 5: ch->specials.oedit = CHANGE_OBJ_AFFECT5;
ChangeObjAffect(ch, "", ENTER_CHECK);
return;
break;
default: ChangeObjAffects(ch, "", ENTER_CHECK);
return;
}
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
send_to_char("\n\r\n\rChange object affect #(1-5) --> ", ch);
return;
}
void ChangeObjAffect(struct char_data *ch, char *arg, int type)
{
int update,affect,row=0,i,a=0,column,check;
char buf[1024];
switch(ch->specials.oedit) {
case CHANGE_OBJ_AFFECT1: affect = 1;
break;
case CHANGE_OBJ_AFFECT2: affect = 2;
break;
case CHANGE_OBJ_AFFECT3: affect = 3;
break;
case CHANGE_OBJ_AFFECT4: affect = 4;
break;
case CHANGE_OBJ_AFFECT5: affect = 5;
break;
}
if(type != ENTER_CHECK) {
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg)-1;
if(update < 0 || update > 57) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
ch->specials.objedit->affected[affect-1].location=update;
ch->specials.objedit->affected[affect-1].modifier=0;
switch(affect) {
case 1: ch->specials.oedit = CHANGE_AFFECT1_MOD;
break;
case 2: ch->specials.oedit = CHANGE_AFFECT2_MOD;
break;
case 3: ch->specials.oedit = CHANGE_AFFECT3_MOD;
break;
case 4: ch->specials.oedit = CHANGE_AFFECT4_MOD;
break;
case 5: ch->specials.oedit = CHANGE_AFFECT5_MOD;
break;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
switch(update) {
case 0:
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 7:
send_to_char("\n\rNote: Modifier does not affect anything in this case.\n\r",ch);
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 40:
send_to_char("\n\rNote: Modifier will make field go up modifier number of points.\n\r",ch);
send_to_char(" Positive modifier will make field go up, negative modifier will make\n\r field go down.\n\r",ch);
break;
case 6:
send_to_char("\n\rNote: Modifier will change characters sex by adding.\n\r 0=neutral, 1=male, 2=female\n\r",ch);
break;
case 26:
case 27:
case 28:
send_to_char("\n\rNote: Modifier should be ADDED together from this list of immunity flags.\n\r",ch);
row = 0;
for(i = 0; i < 18; i++) {
sprintf(buf, VT_CURSPOS, row + 4, ((i & 1) ? 45 : 5));
if(i & 1)
row++;
send_to_char(buf, ch);
check=1;
if(i>0)
for(a=1;a<=i;a++)
check*=2;
sprintf(buf, "%-6d : %s", check, immunity_names[i]);
send_to_char(buf, ch);
}
sprintf(buf, VT_CURSPOS, 20, 1);
send_to_char(buf, ch);
break;
case 29:
case 30:
case 31:
send_to_char("\n\rNote: Modifier will be a spell # which you can get from the allspells.\n\r",ch);
break;
case 32:
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
case 39:
case 47:
send_to_char("\n\rNote: Modifier will affect % learned of skill.\n\r",ch);
send_to_char(" Positive values will increase the % learned making the char less likely\n\r to fail while negative numbers will do the opposite.\n\r",ch);
break;
break;
}
send_to_char("\n\r\n\rEnter new Modifier (return for 0): ", ch);
ChangeAffectMod(ch,"",ENTER_CHECK);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
for(i = 0; i < 57; i++) {
a++;
if(a==1) column=5;
else if(a==2) column = 30;
else if(a==3) column = 55;
sprintf(buf, VT_CURSPOS, row + 1, column);
if(a==3) {
row++;
a=0;
}
send_to_char(buf, ch);
sprintf(buf, "%-2d %s", i + 1, apply_types[i]);
send_to_char(buf, ch);
}
sprintf(buf, VT_CURSPOS, 21, 1);
send_to_char(buf, ch);
send_to_char("Select the apply number or hit enter for the main menu.\n\r--> ",ch);
}
void ChangeAffectMod(struct char_data *ch, char *arg, int type)
{
signed long update;
int affect;
bool skill=FALSE;
switch(ch->specials.oedit) {
case CHANGE_AFFECT1_MOD: affect = 1;
break;
case CHANGE_AFFECT2_MOD: affect = 2;
break;
case CHANGE_AFFECT3_MOD: affect = 3;
break;
case CHANGE_AFFECT4_MOD: affect = 4;
break;
case CHANGE_AFFECT5_MOD: affect = 5;
break;
}
if(type == ENTER_CHECK)
return;
update = atoi(arg);
if(update>32000)
update=0;
if(ch->specials.objedit->affected[affect-1].location==29 ||
ch->specials.objedit->affected[affect-1].location==30 ||
ch->specials.objedit->affected[affect-1].location==31) {
if(update>=45 && update<=52)
skill=TRUE;
if(update>=120 && update<=127)
skill=TRUE;
if(update>=129 && update<=163)
skill=TRUE;
if(update>=180 && update<=187)
skill=TRUE;
if(skill==TRUE) {
send_to_char("You must use a spell, not a skill!\n\rSetting modifier to 1 (armor spell).\n\r",ch);
update=1;
}
}
ch->specials.objedit->affected[affect-1].modifier=update;
if(skill==TRUE) {
ch->specials.oedit = OBJ_HIT_RETURN;
ObjHitReturn(ch, "", ENTER_CHECK);
return;
}
ch->specials.oedit = CHANGE_OBJ_AFFECTS;
ChangeObjAffects(ch, "", ENTER_CHECK);
return;
}
void ChangeObjValues(struct char_data *ch, char *arg, int type)
{
int update;
char buf[1024];
if(type != ENTER_CHECK) {
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg);
if(update == 0) {
ChangeObjValues(ch, "", ENTER_CHECK);
return;
}
switch(update) {
case 1: ch->specials.oedit = CHANGE_OBJ_VALUE1;
ChangeObjValue(ch, "", ENTER_CHECK);
return;
break;
case 2: ch->specials.oedit = CHANGE_OBJ_VALUE2;
ChangeObjValue(ch, "", ENTER_CHECK);
return;
break;
case 3: ch->specials.oedit = CHANGE_OBJ_VALUE3;
ChangeObjValue(ch, "", ENTER_CHECK);
return;
break;
case 4: ch->specials.oedit = CHANGE_OBJ_VALUE4;
ChangeObjValue(ch, "", ENTER_CHECK);
return;
break;
default: ChangeObjValues(ch, "", ENTER_CHECK);
return;
}
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
send_to_char("\n\r\n\rChange object value #(1-4) --> ", ch);
return;
}
void ChangeObjValue(struct char_data *ch, char *arg, int type)
{
int value,row=0,i,a=0,column,check;
long update;
char buf[1024];
bool skill=FALSE;
switch(ch->specials.oedit) {
case CHANGE_OBJ_VALUE1: value = 0;
break;
case CHANGE_OBJ_VALUE2: value = 1;
break;
case CHANGE_OBJ_VALUE3: value = 2;
break;
case CHANGE_OBJ_VALUE4: value = 3;
break;
}
if(type != ENTER_CHECK) {
if(!*arg || (*arg == '\n')) {
ch->specials.oedit = OBJ_MAIN_MENU;
UpdateObjMenu(ch);
return;
}
update = atoi(arg);
if(update < 0) {
ch->specials.oedit=CHANGE_OBJ_VALUES;
ChangeObjValues(ch,"",ENTER_CHECK);
return;
}
if((ch->specials.objedit->obj_flags.type_flag==ITEM_SCROLL) ||
((ch->specials.objedit->obj_flags.type_flag==ITEM_WAND) &&
(value==0)) ||
((ch->specials.objedit->obj_flags.type_flag==ITEM_STAFF) &&
(value==0)) ||
(ch->specials.objedit->obj_flags.type_flag==ITEM_POTION)) {
if(update>=45 && update<=52)
skill=TRUE;
if(update>=120 && update<=127)
skill=TRUE;
if(update>=129 && update<=163)
skill=TRUE;
if(update>=180 && update<=187)
skill=TRUE;
if(skill==TRUE) {
send_to_char("You must use a spell number, not a skill!\n\rSetting modifier to 1 (armor spell).\n\r",ch);
update=1;
}
}
ch->specials.objedit->obj_flags.value[value]=update;
if(skill==TRUE) {
ch->specials.oedit = OBJ_HIT_RETURN;
ObjHitReturn(ch, "", ENTER_CHECK);
return;
}
ch->specials.oedit=CHANGE_OBJ_VALUES;
ChangeObjValues(ch,"",ENTER_CHECK);
return;
}
sprintf(buf, VT_HOMECLR);
send_to_char(buf, ch);
switch(ch->specials.objedit->obj_flags.type_flag) {
case ITEM_LIGHT:
if(value==0)
send_to_char("\n\rValue1 is the colour.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the type.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the number of hours the light source will last.",ch);
else
send_to_char("\n\rValue is not used for this item type.",ch);
break;
case ITEM_SCROLL:
if(value==0)
send_to_char("\n\rValue1 is the level of casting this scroll casts.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the second spell this scroll casts.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the third spell this scroll casts.",ch);
else
send_to_char("\n\rValue4 is the fourth spell this scroll casts.",ch);
break;
case ITEM_WAND:
if(value==0)
send_to_char("\n\rValue1 is the level of casting this wand casts.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the mana the wand takes to use each time.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the number of charges the wand has.",ch);
else
send_to_char("\n\rValue is not used for this item type.",ch);
break;
case ITEM_STAFF:
if(value==0)
send_to_char("\n\rValue1 is the level of casting this staff casts.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the mana the staff takes to use each time.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the number of charges the staff has.",ch);
else
send_to_char("\n\rValue is not used for this item type.",ch);
break;
case ITEM_WEAPON:
if(value==0)
send_to_char("\n\rValue1 is the plus to hit.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the number of sides on the damage die.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the number of times the damage die is rolled.",ch);
else {
send_to_char("\n\rValue4 is the type of weapon damage.\n\r\n\r",ch);
send_to_char("1 - stab 2 - whip\n\r",ch);
send_to_char("3 - slash 4 - smash\n\r",ch);
send_to_char("5 - cleave 6 - crush\n\r",ch);
send_to_char("7 - pound 8 - claw\n\r",ch);
send_to_char("9 - bite 10 - sting\n\r",ch);
send_to_char("11 - pierce 12 - impale\n\r",ch);
}
break;
case ITEM_FIREWEAPON:
if(value==0)
send_to_char("\n\rValue1 is the strength required to draw.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the tohit bonus.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the max range [in rooms] and the todam.",ch);
else {
send_to_char("\n\rValue4 is the type of weapon damage.\n\r\n\r",ch);
send_to_char("1 - hit 2 - pound\n\r",ch);
send_to_char("3 - pierce 4 - slash\n\r",ch);
send_to_char("5 - whip 6 - claw\n\r",ch);
send_to_char("7 - bite 8 - sting\n\r",ch);
send_to_char("9 - crush 10 - cleave\n\r",ch);
send_to_char("11 - stab 12 - smash\n\r",ch);
send_to_char("13 - smite 14 - impale\n\r",ch);
}
break;
case ITEM_MISSILE:
if(value==0)
send_to_char("\n\rValue1 is the % chance that the missile will break.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the number of sides on the damage die.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the number of sides the damage die is rolled.",ch);
else {
send_to_char("\n\rValue4 is the type of weapon damage.\n\r\n\r",ch);
send_to_char("1 - hit 2 - pound\n\r",ch);
send_to_char("3 - pierce 4 - slash\n\r",ch);
send_to_char("5 - whip 6 - claw\n\r",ch);
send_to_char("7 - bite 8 - sting\n\r",ch);
send_to_char("9 - crush 10 - cleave\n\r",ch);
send_to_char("11 - stab 12 - smash\n\r",ch);
send_to_char("13 - smite 14 - impale\n\r",ch);
}
break;
case ITEM_ARMOR:
if(value==0)
send_to_char("\n\rValue1 is the Armor Class Apply.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the Full Strengh of the armor.",ch);
else
send_to_char("\n\rValue is not used for this item type.",ch);
break;
case ITEM_POTION:
if(value==0)
send_to_char("\n\rValue1 is the level of the spells this potion casts.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the second spell this potion casts.",ch);
else if(value==2)
send_to_char("\n\rValue3 is the third spell this potion casts.",ch);
else
send_to_char("\n\rValue4 is the fourth spell this potion casts.",ch);
break;
case ITEM_TRAP:
if(value==0)
send_to_char("\n\rValue1 is the trap damage level.",ch);
else if(value==1) {
send_to_char("\n\rValue2 is the attack type of the trap.\n\r\n\r",ch);
send_to_char(" 10 - blasted 26 - seared\n\r",ch);
send_to_char(" 67 - corroded 203 - frozen\n\r",ch);
send_to_char("207 - pounded 208 - pierced\n\r",ch);
send_to_char("209 - sliced\n\r",ch);
} else if(value==2)
send_to_char("\n\rValue3 should be set to 80.",ch);
else
send_to_char("\n\rValue4 are the number of trap charges left.",ch);
break;
case ITEM_CONTAINER:
if(value==0)
send_to_char("\n\rValue1 is the max number of items that can fit.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the locktype.\n\r\n\r",ch);
else if(value==2)
send_to_char("\n\rValue3 is not used for containers.",ch);
else
send_to_char("\n\rValue4 determines whether the container is a corpse (1=yes, 0=no).",ch);
break;
case ITEM_DRINKCON:
if(value==0)
send_to_char("\n\rValue1 is the amount of fluid the container can hold.",ch);
else if(value==1)
send_to_char("\n\rValue2 is the amount of fluid left.\n\r\n\r",ch);
else if(value==2) {
send_to_char("\n\rValue3 is the type of liquid in the container.\n\r\n\r",ch);
send_to_char(" 0 - water 1 - beer\n\r",ch);
send_to_char(" 2 - wine 3 - ale\n\r",ch);
send_to_char(" 4 - dark ale 5 - whisky\n\r",ch);
send_to_char(" 6 - lemonade 7 - firebreather\n\r",ch);
send_to_char(" 8 - speciality 9 - slime mold juice\n\r",ch);
send_to_char("10 - milk 11 - tea\n\r",ch);
send_to_char("12 - coffee 13 - blood\n\r",ch);
send_to_char("14 - salt water 15 - coca cola\n\r",ch);
} else
send_to_char("\n\rValue4 determines whether the liquid is poisoned (1=yes, 0=no).",ch);
break;
case ITEM_NOTE:
send_to_char("\n\rValue not used for this item type.\n\r",ch);
break;
case ITEM_KEY:
if(value==0)
send_to_char("\n\rValue1 is the keytype.",ch);
else
send_to_char("\n\rValue not used for this item type.\n\r",ch);
break;
case ITEM_FOOD:
if(value==0)
send_to_char("\n\rValue1 is how full you get from eating the food.",ch);
else if(value==3)
send_to_char("\n\rValue4 is whether the food is poisoned (1=yes, 0=no).\n\r\n\r",ch);
else
send_to_char("\n\rValue not used for this item type.\n\r",ch);
break;
default:
send_to_char("Value not used for this item type.\n\r",ch);
break;
break;
}
sprintf(buf, VT_CURSPOS, 21, 1);
send_to_char(buf, ch);
send_to_char("Enter the new value (press return for 0).\n\r--> ",ch);
}