alanthia/area/
alanthia/gods/
alanthia/player/
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "merc.h"
#include "utils.h"

void do_preserve(CHAR_DATA * ch, char *argument)
{

    CHAR_DATA *keeper;
    OBJ_DATA *obj;
    char buf[MAX_STRING_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int cost = 0;

    if (argument[0] == '\0') {
	send_to_char("Preserve what?\n\r", ch);
	return;
    }
    if (IS_NPC(ch))
	return;

    argument = one_argument(argument, arg);

    /* check for repairman */
    for (keeper = ch->in_room->people; keeper;
	 keeper = keeper->next_in_room) {
	if (IS_NPC(keeper) && IS_SET(keeper->act, ACT_REPAIR))
	    break;
    }

    if (keeper == NULL) {
	send_to_char("You can't do that here.\n\r", ch);
	return;
    }
    if ((obj = get_obj_here(ch, arg)) == NULL) {
	send_to_char("You do not see that here.\n\r", ch);
	return;
    }
    if (!can_see_obj(ch, obj)) {
	act("$n tells you 'I can't see it!'", keeper, NULL, ch, TO_VICT);
	ch->reply = keeper;
	return;
    }

    switch (obj->item_type) {

    case ITEM_CORPSE_PC:
    case ITEM_CORPSE_NPC:
	cost = (obj->level * 5) + (obj->condition * 5);

	if (cost <= 0) {
	    act("$n tells you 'That isn't worth my time to preserve!'",
		keeper, NULL, ch, TO_VICT);
	    ch->reply = keeper;
	    return;
	}
	if (ch->gold < cost) {
	    act
		("$n tells you 'You don't have enough money to preserve that.'",
		 keeper, NULL, ch, TO_VICT);
	    ch->reply = keeper;
	    return;
	}
	obj->condition = 0;
	obj->weight = obj->level / 2;
	obj->item_type = ITEM_CONTAINER;
	obj->value[0] = obj->level;	// Weight
	obj->value[3] = obj->level;	// Capacity
	obj->value[4] = obj->level / 3;	// Multiplier
	obj->cost = obj->level / 2;
	obj->timer = 0;

	sprintf(buf, "bag corpse");
	free_string(obj->name);
	obj->name = str_dup(buf);

	sprintf(buf, "a bag made from %s", obj->short_descr);
	free_string(obj->short_descr);
	obj->short_descr = str_dup(buf);
	break;

    case ITEM_FOOD:

	cost = obj->value[0] * 4;

	if (obj->timer < 1) {
	    act("$n tells you 'That doesn't need preserving.'",
		keeper, NULL, ch, TO_VICT);
	    ch->reply = keeper;
	    return;
	}
	if (ch->gold < cost) {
	    act
		("$n tells you 'You don't have enough money to preserve that.'",
		 keeper, NULL, ch, TO_VICT);
	    ch->reply = keeper;
	    return;
	}
	obj->timer = 0;

	break;


    default:
	act("$n tells you 'I can't preserve that. Sorry, pal!'",
	    keeper, NULL, ch, TO_VICT);
	ch->reply = keeper;
	return;
	break;
	return;
    }

    act("$n preserves $p.", ch, obj, NULL, TO_ROOM);
    sprintf(buf, "You preserve $p for %d gold.", cost);
    act(buf, ch, obj, NULL, TO_CHAR);

    deduct_cost(ch, cost);
    keeper->gold += cost;

}

void do_repair(CHAR_DATA * ch, char *argument)
{

    CHAR_DATA *keeper;
    OBJ_DATA *obj;
    char buf[MAX_STRING_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int cost;

    if (argument[0] == '\0') {
	send_to_char("Repair what?\n\r", ch);
	return;
    }
    if (IS_NPC(ch))
	return;

    argument = one_argument(argument, arg);


    /* check for repairman */
    for (keeper = ch->in_room->people; keeper;
	 keeper = keeper->next_in_room) {
	if (IS_NPC(keeper) && IS_SET(keeper->act, ACT_REPAIR))
	    break;
    }

    if (keeper == NULL) {
	send_to_char("You can't do that here.\n\r", ch);
	return;
    }
    if ((obj = get_obj_here(ch, arg)) == NULL) {
	send_to_char("You do not see that here.\n\r", ch);
	return;
    }
    if (!can_see_obj(ch, obj)) {
	act("$n tells you 'I can't see it!'", keeper, NULL, ch, TO_VICT);
	ch->reply = keeper;
	return;
    }
    cost = (obj->level * 5) + (obj->condition * 5);

    if (cost <= 0) {
	act("$n tells you 'That isn't worth my time to fix!'",
	    keeper, NULL, ch, TO_VICT);
	ch->reply = keeper;
	return;
    }
    if (obj->condition == 0) {
	act("$n tells you 'You'd only be wasting money repairing that.'",
	    keeper, NULL, ch, TO_VICT);
	ch->reply = keeper;
	return;
    }
    if (ch->gold < cost) {
	act("$n tells you 'You don't have enough money to repair that.'",
	    keeper, NULL, ch, TO_VICT);
	ch->reply = keeper;
	return;
    }
    act("$n repairs $p.", ch, obj, NULL, TO_ROOM);
    sprintf(buf, "You repair $p for %d gold.", cost);
    act(buf, ch, obj, NULL, TO_CHAR);

    obj->condition = 0;

    deduct_cost(ch, cost);
    keeper->gold += cost;

}

void do_bind(CHAR_DATA * ch, char *argument)
{


    CHAR_DATA *keeper;
    OBJ_DATA *obj;
    char buf[MAX_STRING_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int cost = 0;

    return;

    if (argument[0] == '\0') {
	    send_to_char("bind what?\n\r", ch);
	    return;
    }
    if (IS_NPC(ch))
	    return;

    argument = one_argument(argument, arg);

    /* check for repairman */
    for (keeper = ch->in_room->people; keeper;
	    keeper = keeper->next_in_room) {
	    if (IS_NPC(keeper) && IS_SET(keeper->act, ACT_REPAIR))
	    break;
    }

    if (keeper == NULL) {
	    send_to_char("You can't do that here.\n\r", ch);
	  return;
    }
    if ((obj = get_obj_here(ch, arg)) == NULL) {
	    send_to_char("You do not see that here.\n\r", ch);
	  return;
    }
    if (!can_see_obj(ch, obj)) {
	    act("$n tells you 'I can't see it!'", keeper, NULL, ch, TO_VICT);
	    ch->reply = keeper;
	  return;
    }

    cost = obj->level * 100000;
    obj->owner = str_dup(ch->name);
    obj->bound = TRUE;

    act("$n binds $p.", ch, obj, NULL, TO_ROOM);
    sprintf(buf, "You bind $p for %d gold.", cost);
    act(buf, ch, obj, NULL, TO_CHAR);

    deduct_cost(ch, cost);
    ch->exp -= (obj->level * 10);

    if (ch->exp < 1) 
      ch->exp = 0;

    keeper->gold += cost;

}