/* * $Id: mech.tech.saverepair.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: Fri Mar 14 19:17:19 1997 fingon * Last modified: Thu Oct 30 18:42:58 1997 fingon * */ #include "mech.h" #include "mech.events.h" #include "mech.tech.h" static FILE *cheat_file; static int ev_type; #define CHESA(var) fwrite(&var, sizeof(var), 1, cheat_file) #define CHELO(var) if (!fread(&var, sizeof(var), 1, f)) return static void save_event(MUXEVENT * e) { MECH *mech = (MECH *) e->data; int data = (int) e->data2; int t; t = e->tick - muxevent_tick; t = MAX(1, t); if (e->function == very_fake_func) t = 0 - t; CHESA(mech->mynum); CHESA(ev_type); CHESA(t); CHESA(data); } void saverepairs(FILE * f) { int i; dbref d = -1; cheat_file = f; for (i = FIRST_TECH_EVENT; i <= LAST_TECH_EVENT; i++) { ev_type = i; muxevent_gothru_type(i, save_event); } CHESA(d); } void loadrepairs(FILE * f) { dbref d, player; int type; int data; int time; MECH *mech; int loaded = 0; int fake; if (feof(f)) return; fread(&d, sizeof(d), 1, f); while (d > 0 && !feof(f)) { loaded++; CHELO(type); CHELO(time); CHELO(data); fake = (time < 0); time = abs(time); if (!(mech = FindObjectsData(d))) continue; player = data / PLAYERPOS; data = data % PLAYERPOS; if (fake) FIXEVENT(time, mech, data, very_fake_func, type); else switch (type) { case EVENT_REPAIR_MOB: FIXEVENT(time, mech, data, muxevent_tickmech_mountbomb, type); break; case EVENT_REPAIR_UMOB: FIXEVENT(time, mech, data, muxevent_tickmech_umountbomb, type); break; case EVENT_REPAIR_REPL: FIXEVENT(time, mech, data, muxevent_tickmech_repairpart, type); break; case EVENT_REPAIR_REPLG: FIXEVENT(time, mech, data, muxevent_tickmech_replacegun, type); break; case EVENT_REPAIR_REPAP: FIXEVENT(time, mech, data, muxevent_tickmech_repairpart, type); break; case EVENT_REPAIR_REPENHCRIT: FIXEVENT(time, mech, data, muxevent_tickmech_repairenhcrit, type); break; case EVENT_REPAIR_REPAG: FIXEVENT(time, mech, data, muxevent_tickmech_repairgun, type); break; case EVENT_REPAIR_REAT: FIXEVENT(time, mech, data, muxevent_tickmech_reattach, type); break; case EVENT_REPAIR_RELO: FIXEVENT(time, mech, data, muxevent_tickmech_reload, type); break; case EVENT_REPAIR_FIX: FIXEVENT(time, mech, data, muxevent_tickmech_repairarmor, type); break; case EVENT_REPAIR_FIXI: FIXEVENT(time, mech, data, muxevent_tickmech_repairinternal, type); break; case EVENT_REPAIR_SCRL: FIXEVENT(time, mech, data, muxevent_tickmech_removesection, type); break; case EVENT_REPAIR_SCRG: FIXEVENT(time, mech, data, muxevent_tickmech_removegun, type); break; case EVENT_REPAIR_SCRP: FIXEVENT(time, mech, data, muxevent_tickmech_removepart, type); break; case EVENT_REPAIR_REPSUIT: FIXEVENT(time, mech, data, muxevent_tickmech_replacesuit, type); break; } CHELO(d); } if (loaded) fprintf(stderr, "LOADED: %d tech events.\n", loaded); }