btmux-0.6-rc4/doc/
btmux-0.6-rc4/event/
btmux-0.6-rc4/game/
btmux-0.6-rc4/game/maps/
btmux-0.6-rc4/game/mechs/
btmux-0.6-rc4/game/text/help/
btmux-0.6-rc4/game/text/help/cat_faction/
btmux-0.6-rc4/game/text/help/cat_inform/
btmux-0.6-rc4/game/text/help/cat_misc/
btmux-0.6-rc4/game/text/help/cat_mux/
btmux-0.6-rc4/game/text/help/cat_mux/cat_commands/
btmux-0.6-rc4/game/text/help/cat_mux/cat_functions/
btmux-0.6-rc4/game/text/help/cat_templates/
btmux-0.6-rc4/game/text/wizhelp/
btmux-0.6-rc4/include/
btmux-0.6-rc4/misc/
btmux-0.6-rc4/python/
btmux-0.6-rc4/src/hcode/btech/
btmux-0.6-rc4/tree/
/*
 * $Id: mech.tech.repairs.c,v 1.1.1.1 2005/01/11 21:18:26 kstevens Exp $
 *
 * Author: Markus Stenberg <fingon@iki.fi>
 *
 *  Copyright (c) 1997 Markus Stenberg
 *  Copyright (c) 1998-2002 Thomas Wouters
 *  Copyright (c) 2000-2002 Cord Awtry
 *       All rights reserved
 *
 * Created: Sat Aug 23 19:12:32 1997 fingon
 * Last modified: Sat Jun  6 20:45:48 1998 fingon
 *
 */

#include "mech.h"
#include "mech.events.h"
#include "mech.tech.h"
#include "mech.tech.damages.h"
#include "coolmenu.h"
#include "mycool.h"
#include "failures.h"
#include "p.mech.tech.h"
#include "p.mech.build.h"
#include "p.mech.status.h"

static coolmenu *c;

static void describe_repairs(MUXEVENT * e)
{
	int type = e->type;
	MECH *mech = (MECH *) e->data;
	int earg = ((int) e->data2) % PLAYERPOS;
	dbref player = ((int) e->data2) / PLAYERPOS;
	int loc, pos, extra;
	char buf[MBUF_SIZE];
	char buf2[LBUF_SIZE];
	int fail = (e->function == very_fake_func);

	UNPACK_LOCPOS_E(earg, loc, pos, extra);
	sprintf(buf, "%s%s", ShortArmorSectionString(MechType(mech),
												 MechMove(mech), loc % 8),
			loc >= 8 ? "(R)" : "");
	sprintf(buf2, "%-5d ", player);
	sprintf(buf2 + strlen(buf2), "%-4d ",
			game_lag_time((e->tick - muxevent_tick) / 60));
	switch (type) {
	case EVENT_REPAIR_REPL:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Replacement of %s", buf,
				pos + 1, pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_REPLG:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Replacement of %s", buf,
				pos + 1, pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_REAT:
		sprintf(buf2 + strlen(buf2), "%5s Reattachment", buf);
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_RELO:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d %sload of %s", buf, pos + 1,
				extra ? "Un" : "Re", pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_FIX:
		if(fail)
			sprintf(buf2 + strlen(buf2), "%5s:%-2d Failed armor repair",
					buf, 0);
		else
			sprintf(buf2 + strlen(buf2),
					"%5s:%-2d Repair of armor - possibly next point", buf,
					pos);
		break;
	case EVENT_REPAIR_FIXI:
		if(fail)
			sprintf(buf2 + strlen(buf2), "%5s:%-2d Failed internal repair",
					buf, 0);
		else
			sprintf(buf2 + strlen(buf2),
					"%5s:%-2d Repair of internals - possibly next point", buf,
					pos);
		break;
	case EVENT_REPAIR_SCRL:
		sprintf(buf2 + strlen(buf2), "%5s Removal", buf);
		break;
	case EVENT_REPAIR_SCRP:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Scrapping of %s", buf,
				pos + 1, pos_part_name(mech, loc, pos));
		break;
	case EVENT_REPAIR_SCRG:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Scrapping of %s", buf,
				pos + 1, pos_part_name(mech, loc, pos));
		break;
	case EVENT_REPAIR_REPAG:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Repair of %s", buf, pos + 1,
				pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_REPAP:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Repair of %s", buf, pos + 1,
				pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_REPENHCRIT:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Repair of %s", buf, pos + 1,
				pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_MOB:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Mounting of %s", buf,
				pos + 1, pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_UMOB:
		sprintf(buf2 + strlen(buf2), "%5s:%-2d Removing of %s", buf,
				pos + 1, pos_part_name(mech, loc, pos));
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	case EVENT_REPAIR_REPSUIT:
		sprintf(buf2 + strlen(buf2), "%5s Replacing suit", buf);
		if(fail)
			sprintf(buf2 + strlen(buf2), " (Failure)");
		break;
	}

/*   sprintf(buf2+strlen(buf2), " - %s", */

/*        get_uptime_to_string(e->tick - muxevent_tick)); */
	vsi(buf2);
}

void tech_repairs(dbref player, MECH * mech, char *buffer)
{
	int i, isds = IsDS(mech);

	TECHCOMMANDD;

	DOCHECK(!figure_latest_tech_event(mech),
			"This 'mech has no repairs pending!");
	c = NULL;
	addline();
	cent(tprintf("Repairs/Scrapping in progress (%s)", GetMechID(mech)));
	vsi(tprintf("%-5s %-4s %s", "Plr", "Time", "Location + Description"));
	addline();
	for(i = FIRST_TECH_EVENT; i <= LAST_TECH_EVENT; i++)
		muxevent_gothru_type_data(i, (void *) mech, describe_repairs);
	addline();
	vsi("Note: Time = Time remaining in minutes. Plr = Tech's dbref");
	addline();
	ShowCoolMenu(player, c);
	KillCoolMenu(c);
}