-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAwardLoader.m
154 lines (136 loc) · 6.01 KB
/
AwardLoader.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//
// AwardLoader.m
// FM10SX
//
// Created by Amy Kettlewell on 09/10/24.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "AwardLoader.h"
#import "ColourLoader.h"
#import "FMDateLoader.h"
#import "DatabaseTypes.h"
#import "SupportFunctions.h"
@implementation Loader (AwardLoader)
+ (id)readAwardFromData:(NSData *)data atOffset:(unsigned int *)byteOffset
{
char cbuffer;
short sbuffer;
int ibuffer;
BOOL debug = NO;
unsigned int offset = *byteOffset;
Award *object = [[Award alloc] init];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setDatabaseClass:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setNameGender:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setShortNameGender:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setVoting:cbuffer];
if ([object voting]>AV_MAX) {
return [NSString stringWithFormat:@"Invalid voting value - %d",[object voting]];
}
id colour = [ColourLoader readColourFromData:data atOffset:&offset extended:NO];
if ([[colour className] isEqualToString:@"Colour"]) {
[object setColour:colour];
}
else { return [NSString stringWithFormat:@"Colour - %@",colour]; }
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar1:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar2:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar3:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar4:cbuffer];
[data getBytes:&sbuffer range:NSMakeRange(offset, 2)]; offset += 2;
[object setAwardReputation:sbuffer];
[data getBytes:&sbuffer range:NSMakeRange(offset, 2)]; offset += 2;
[object setNationalReputation:sbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setType:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setPeriod:cbuffer];
if ([object period]>AP_MAX) { // FM 2012 has a 9th Period??
return [NSString stringWithFormat:@"Invalid period value - %d",[object period]];
}
[object setAwardDate:[FMDateLoader readFromData:data atOffset:&offset]];
[data getBytes:&ibuffer range:NSMakeRange(offset, 4)]; offset += 4;
[object setContinentID:ibuffer];
[data getBytes:&ibuffer range:NSMakeRange(offset, 4)]; offset += 4;
[object setNationID:ibuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setRunBy:cbuffer];
if ([object runBy]>ARB_MAX) {
// return [NSString stringWithFormat:@"Invalid run by value - %d",[object runBy]];
}
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setFormation:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setMaximumAge:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setWinnerHomeReputation:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setWinnerWorldReputation:cbuffer];
[data getBytes:&ibuffer range:NSMakeRange(offset, 4)]; offset += 4;
[object setCompetitionID:ibuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setBased:cbuffer];
if ([object based]>AB_MAX && [object based]!=100) {
return [NSString stringWithFormat:@"Invalid based value - %d",[object based]];
}
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setSide:cbuffer];
if ([object side]>AS_MAX) {
return [NSString stringWithFormat:@"Invalid side value - %d",[object side]];
}
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUseStatsFrom:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar5:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUseSubsForTeamAward:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setAllowPreviousWinner:cbuffer];
if ([object allowPreviousWinner]>APW_MAX) {
return [NSString stringWithFormat:@"Invalid allows previous winner value - %d",[object allowPreviousWinner]];
}
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setRecipientType:cbuffer];
if ([object recipientType]>ART_MAX) {
return [NSString stringWithFormat:@"Invalid recipient type - %d",[object recipientType]];
}
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setVotingFormat:cbuffer];
if ([object votingFormat]>AVF_MAX) {
return [NSString stringWithFormat:@"Invalid voting format - %d",[object votingFormat]];
}
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setMinPercentGamesPlayed:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setMinimumAge:cbuffer];
[data getBytes:&sbuffer range:NSMakeRange(offset, 2)]; offset += 2;
[object setPosition:sbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setPlacings:cbuffer];
if ([object placings]>ANP_MAX) {
// return [NSString stringWithFormat:@"Invalid placings value - %d",[object placings]];
}
// ???
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar6:cbuffer];
[data getBytes:&cbuffer range:NSMakeRange(offset, 1)]; offset += 1;
[object setUnknownChar7:cbuffer];
[object setAnnouncementDate:[FMDateLoader readFromData:data atOffset:&offset]];
[data getBytes:&ibuffer range:NSMakeRange(offset, 4)]; offset += 4;
[object setRowID:ibuffer];
[data getBytes:&ibuffer range:NSMakeRange(offset, 4)]; offset += 4;
[object setUID:ibuffer];
// FM 2012 UNKNOWN -- Needs to be made conditional
[data getBytes:&ibuffer range:NSMakeRange(offset, 4)]; offset += 4;
//[object setUnknownChar8:ibuffer];
*byteOffset = offset;
if (debug) { NSLog(@"Award %d at %d",[object rowID],offset); }
return object;
}
@end