00001
00002
00003
00004
00005
00006
00007
00008
00009 #import "PlayerStats.h"
00010
00011
00012 @implementation PlayerStats
00013
00014 - (id) init {
00015 self = [super init];
00016 if (self != nil) {
00017
00018 ranks = [NSArray arrayWithObjects:
00019 [[Rank alloc] initWithHours: 0 ratings:0 defense:0.0 name:@"Ensign" abbrev:@"Ens"],
00020 [[Rank alloc] initWithHours: 2 ratings:1 defense:0.0 name:@"Lieutenant" abbrev:@"Lt "],
00021 [[Rank alloc] initWithHours: 4 ratings:2 defense:0.8 name:@"Lt. Cmdr." abbrev:@"Lt Com"],
00022 [[Rank alloc] initWithHours: 8 ratings:3 defense:0.8 name:@"Commander" abbrev:@"Com"],
00023 [[Rank alloc] initWithHours:15 ratings:4 defense:0.8 name:@"Captain" abbrev:@"Cap"],
00024 [[Rank alloc] initWithHours:20 ratings:5 defense:0.8 name:@"Flt. Capt." abbrev:@"Flt Cap"],
00025 [[Rank alloc] initWithHours:25 ratings:6 defense:0.8 name:@"Commodore" abbrev:@"Com"],
00026 [[Rank alloc] initWithHours:30 ratings:7 defense:0.8 name:@"Rear Adm." abbrev:@"Rear Adm"],
00027 [[Rank alloc] initWithHours:40 ratings:8 defense:0.8 name:@"Admiral" abbrev:@"Adm"],
00028 nil];
00029 [ranks retain];
00030
00031
00032 maxkills = 0;
00033 kills = 0;
00034 losses = 0;
00035 armsbomb = 0;
00036 planets = 0;
00037 tkills = 0;
00038 tlosses = 0;
00039 tarmsbomb = 0;
00040 tplanets = 0;
00041 tticks = 0;
00042 sbkills = 0;
00043 sblosses = 0;
00044 sbticks = 0;
00045 sbmaxkills = 0;
00046 st_lastlogin = 0;
00047 flags = 0;
00048 rank = [self setRankWithId:0];
00049 }
00050 return self;
00051 }
00052
00053 -(Rank *) rankWithId:(int)rankId {
00054 return [ranks objectAtIndex:rankId];
00055 }
00056
00057 -(Rank *) setRankWithId:(int)rankId {
00058 rank = [ranks objectAtIndex:rankId];
00059 return rank;
00060 }
00061
00062 -(Rank*)rank {
00063 return rank;
00064 }
00065
00066 -(void) setFlags:(int)newFlags {
00067 flags = newFlags;
00068 }
00069
00070 -(void) setStarbaseTicks:(int) starbaseTicks {
00071 sbticks = starbaseTicks;
00072 }
00073
00074 -(void) setMaxKills:(double)newMaxKills {
00075 maxkills = newMaxKills;
00076 }
00077
00078 -(void) updateTournamentKills: (int) newTKills
00079 tournamentLosses: (int) newTLosses
00080 kills: (int) newKills
00081 losses: (int) newLosses
00082 tournamentTicks: (int) newTTicks
00083 tournamentPlanets: (int) newTPlanets
00084 tournamentArmiesBombed: (int) newTArmiesBombed
00085 starbaseKills: (int) newSBKills
00086 starbaseLosses: (int) newSBLosses
00087 armiesBombed: (int) newArmiesBombed
00088 planets: (int) newPlanets
00089 starbaseMaxKills: (double)newSBMaxKills {
00090
00091 tkills = newTKills;
00092 tlosses = newTLosses;
00093 kills = newKills;
00094 losses = newLosses;
00095 tticks = newTTicks;
00096 tplanets = newTPlanets;
00097 tarmsbomb = newTArmiesBombed;
00098 sbkills = newSBKills;
00099 sblosses = newSBLosses;
00100 armsbomb = newArmiesBombed;
00101 planets = newPlanets;
00102 sbmaxkills = newSBMaxKills;
00103 }
00104
00105 - (int)kills {
00106 return kills;
00107 }
00108
00109 - (int)losses {
00110 return losses;
00111 }
00112 - (int)maxKills {
00113 return maxkills;
00114 }
00115 - (int)tournamentKills {
00116 return tkills;
00117 }
00118
00119 - (int)tournamentLosses {
00120 return tlosses;
00121 }
00122
00123 - (int)starbaseKills {
00124 return sbkills;
00125 }
00126
00127 - (int)starbaseLosses {
00128 return sblosses;
00129 }
00130
00131 - (int)starbaseMaxKills {
00132 return sbmaxkills;
00133 }
00134
00135 -(float) bombingRating:(Status *) sts {
00136 if(tticks <= 0 || [sts armiesBombed] <= 0) {
00137 return 0.0;
00138 }
00139 return (float)(((double)tarmsbomb * (double)[sts timeProductive]) / ((double)tticks * (double)[sts armiesBombed]));
00140 }
00141
00142 -(float) planetRating:(Status *) sts {
00143 if(tticks <= 0 || [sts planets] <= 0) {
00144 return 0.0;
00145 }
00146 return (float)(((double)tplanets * (double)[sts timeProductive]) / ((double)tticks * (double)[sts planets]));
00147 }
00148
00149 -(float) offenceRating:(Status *) sts{
00150 if(tticks <= 0 || [sts kills] <= 0) {
00151 return 0.0;
00152 }
00153 return (float)(((double)tkills * (double)[sts timeProductive]) / ((double)tticks * (double)[sts kills]));
00154 }
00155
00156 -(float) defenceRating:(Status *) sts{
00157 if([sts timeProductive] <= 0) {
00158 return 0.0;
00159 }
00160 double top = (double)tticks * (double)[sts losses];
00161 if(top <= 0) {
00162 return (float)(top / (double)[sts timeProductive]);
00163 }
00164 if(tlosses <= 0) {
00165 return 1;
00166 }
00167 return (float)(top / ((double)tlosses * (double)[sts timeProductive]));
00168 }
00169
00170 -(float) starbaseKillsPerHour{
00171 return (sbticks == 0) ? 0.0 : (float)sbkills * 36000.0 / (float)sbticks;
00172 }
00173
00174 -(float) starbaseDefensePerHour{
00175 return (sbticks == 0) ? 0.0 : (float)sblosses * 36000.0 / (float)sbticks;
00176 }
00177
00178
00179
00180 @end