00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "mech.h"
00018 #include "mech.events.h"
00019 #include "mech.tech.h"
00020
00021 static FILE *cheat_file;
00022 static int ev_type;
00023
00024 #define CHESA(var) fwrite(&var, sizeof(var), 1, cheat_file)
00025 #define CHELO(var) if (!fread(&var, sizeof(var), 1, f)) return
00026
00027 static void save_event(MUXEVENT * e)
00028 {
00029 MECH *mech = (MECH *) e->data;
00030 int data = (int) e->data2;
00031 int t;
00032
00033 t = e->tick - muxevent_tick;
00034 t = MAX(1, t);
00035 if(e->function == very_fake_func)
00036 t = 0 - t;
00037 CHESA(mech->mynum);
00038 CHESA(ev_type);
00039 CHESA(t);
00040 CHESA(data);
00041 }
00042
00043 void saverepairs(FILE * f)
00044 {
00045 int i;
00046 dbref d = -1;
00047
00048 cheat_file = f;
00049 for(i = FIRST_TECH_EVENT; i <= LAST_TECH_EVENT; i++) {
00050 ev_type = i;
00051 muxevent_gothru_type(i, save_event);
00052 }
00053 CHESA(d);
00054 }
00055
00056 void loadrepairs(FILE * f)
00057 {
00058 dbref d, player;
00059 int type;
00060 int data;
00061 int time;
00062 MECH *mech;
00063 int loaded = 0;
00064 int fake;
00065
00066 if(feof(f))
00067 return;
00068 fread(&d, sizeof(d), 1, f);
00069 while (d > 0 && !feof(f)) {
00070 loaded++;
00071 CHELO(type);
00072 CHELO(time);
00073 CHELO(data);
00074 fake = (time < 0);
00075 time = abs(time);
00076 if(!(mech = FindObjectsData(d)))
00077 continue;
00078 player = data / PLAYERPOS;
00079 data = data % PLAYERPOS;
00080 if(fake)
00081 FIXEVENT(time, mech, data, very_fake_func, type);
00082 else
00083 switch (type) {
00084 case EVENT_REPAIR_MOB:
00085 FIXEVENT(time, mech, data, muxevent_tickmech_mountbomb, type);
00086 break;
00087 case EVENT_REPAIR_UMOB:
00088 FIXEVENT(time, mech, data, muxevent_tickmech_umountbomb,
00089 type);
00090 break;
00091 case EVENT_REPAIR_REPL:
00092 FIXEVENT(time, mech, data, muxevent_tickmech_repairpart,
00093 type);
00094 break;
00095 case EVENT_REPAIR_REPLG:
00096 FIXEVENT(time, mech, data, muxevent_tickmech_replacegun,
00097 type);
00098 break;
00099 case EVENT_REPAIR_REPAP:
00100 FIXEVENT(time, mech, data, muxevent_tickmech_repairpart,
00101 type);
00102 break;
00103 case EVENT_REPAIR_REPENHCRIT:
00104 FIXEVENT(time, mech, data, muxevent_tickmech_repairenhcrit,
00105 type);
00106 break;
00107 case EVENT_REPAIR_REPAG:
00108 FIXEVENT(time, mech, data, muxevent_tickmech_repairgun, type);
00109 break;
00110 case EVENT_REPAIR_REAT:
00111 FIXEVENT(time, mech, data, muxevent_tickmech_reattach, type);
00112 break;
00113 case EVENT_REPAIR_RELO:
00114 FIXEVENT(time, mech, data, muxevent_tickmech_reload, type);
00115 break;
00116 case EVENT_REPAIR_FIX:
00117 FIXEVENT(time, mech, data, muxevent_tickmech_repairarmor,
00118 type);
00119 break;
00120 case EVENT_REPAIR_FIXI:
00121 FIXEVENT(time, mech, data, muxevent_tickmech_repairinternal,
00122 type);
00123 break;
00124 case EVENT_REPAIR_SCRL:
00125 FIXEVENT(time, mech, data, muxevent_tickmech_removesection,
00126 type);
00127 break;
00128 case EVENT_REPAIR_SCRG:
00129 FIXEVENT(time, mech, data, muxevent_tickmech_removegun, type);
00130 break;
00131 case EVENT_REPAIR_SCRP:
00132 FIXEVENT(time, mech, data, muxevent_tickmech_removepart,
00133 type);
00134 break;
00135 case EVENT_REPAIR_REPSUIT:
00136 FIXEVENT(time, mech, data, muxevent_tickmech_replacesuit,
00137 type);
00138 break;
00139 }
00140 CHELO(d);
00141 }
00142 if(loaded)
00143 fprintf(stderr, "LOADED: %d tech events.\n", loaded);
00144 }