/*************************************************************************** * Copyright (C) 1992, 1993 Michael Chastain, Michael Quan, Mitchell Tse * * Performance optimization and bug fixes by MERC Industries. * * You can use our stuff in any way you like whatsoever so long as this * * copyright notice remains intact. If you like it please drop a line * * to mec@garnet.berkeley.edu. * * * * This is free software and you are benefitting. We hope that you * * share your changes too. What goes around, comes around. * ***************************************************************************/ #include <strings.h> #include <stdio.h> #include <ctype.h> #include "structs.h" #include "mob.h" #include "obj.h" #include "utils.h" extern struct room_data *world; int real_object(int i); /************************************************************************* * Figures out if a fountain is present in the room * *************************************************************************/ int FOUNTAINisPresent (struct char_data *ch) { struct obj_data *tmp; bool found = FALSE; for (tmp = world[ch->in_room].contents; tmp != NULL && !found; tmp = tmp->next_content) { if (((tmp->item_number == real_object(5220)) || (tmp->item_number == real_object(3135)) || (tmp->item_number == real_object(1300))) && (CAN_SEE_OBJ(ch, tmp))) { found = TRUE; } } return found; } /************************************************************************ * Fill skins and any other drink containers. * ************************************************************************/ void do_fill(struct char_data *ch, char *argument, int cmd) { char buf[MAX_STRING_LENGTH]; struct obj_data *to_obj; int amount; void name_to_drinkcon(struct obj_data *obj, int type); struct obj_data *get_obj_in_list_vis(struct char_data *ch, char *name, \ struct obj_data *list); one_argument(argument, buf); if(!*buf) /* No arguments */ { act("What do you want to fill?",FALSE,ch,0,0,TO_CHAR); return; } if(!(to_obj = get_obj_in_list_vis(ch,buf,ch->carrying))) { act("You can't find it!",FALSE,ch,0,0,TO_CHAR); return; } if(FOUNTAINisPresent(ch)) { if(to_obj->obj_flags.type_flag!=ITEM_DRINKCON) { act("You can't pour anything into that.",FALSE,ch,0,0,TO_CHAR); return; } if((to_obj->obj_flags.value[1]!=0)&& (to_obj->obj_flags.value[2]!=0)) { act("There is already another liquid in it!",FALSE,ch,0,0,TO_CHAR); return; } if(!(to_obj->obj_flags.value[1]<to_obj->obj_flags.value[0])) { act("There is no room for more.",FALSE,ch,0,0,TO_CHAR); return; } act ("You fill $p!",TRUE,ch,to_obj,0,TO_CHAR); /* First same type liq. */ to_obj->obj_flags.value[2]=0; /* Then how much to pour */ amount= to_obj->obj_flags.value[0]-to_obj->obj_flags.value[1]; to_obj->obj_flags.value[1]=to_obj->obj_flags.value[0]; } else { act("There is no fountain here!",FALSE,ch,0,0,TO_CHAR); } return; }