OSDN Git Service

大破チェック
authormasakih <masakih@users.sourceforge.jp>
Sun, 25 May 2014 11:56:40 +0000 (20:56 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sun, 25 May 2014 11:56:40 +0000 (20:56 +0900)
KCD/HMCalculateDamageCommand.m

index 69e9290..fd398d7 100644 (file)
@@ -13,7 +13,7 @@
 
 @implementation HMCalculateDamageCommand
 
-- (void)resetDamage
+- (void)resetBattle
 {
        HMTemporaryDataStore *store = [HMTemporaryDataStore oneTimeEditor];
        NSManagedObjectContext *moc = store.managedObjectContext;
                [moc deleteObject:object];
        }
        
-       array = [store objectsWithEntityName:@"Damage"
+       [store saveAction:nil];
+}
+
+- (void)resetDamage
+{
+       HMTemporaryDataStore *store = [HMTemporaryDataStore oneTimeEditor];
+       NSManagedObjectContext *moc = store.managedObjectContext;
+       
+       NSArray *array = [store objectsWithEntityName:@"Damage"
                                                           predicate:nil
                                                                   error:NULL];
        for(id object in array) {
        }
        
        // koukuu
+       printf("Kouku damages-> ");
        do {
                id koukuDamage = [self.json valueForKeyPath:@"api_data.api_kouku.api_stage3.api_fdam"];
                if(!koukuDamage || [koukuDamage isEqual:[NSNull null]]) break;
                for(NSInteger i = 1; i <= 6; i++) {
                        NSInteger damage = [[koukuDamage objectAtIndex:i] integerValue];
-                       id damageObject = [damages objectAtIndex:i];
+                       
+                       printf("%zd,%zd    ", i - 1, damage);
+                       
+                       id damageObject = [damages objectAtIndex:i - 1];
                        [damageObject setValue:@(damage) forKeyPath:@"damage"];
                }
        } while(NO);
+       printf("\n");
        
        // opening attack
+       printf("Opening attack damages-> ");
        do {
                id openigDamage = [self.json valueForKeyPath:@"api_data.api_opening_atack.api_fdam"];
                if(!openigDamage || [openigDamage isEqual:[NSNull null]]) break;
-               for(NSInteger i = 0; i < 6; i++) {
-                       NSInteger damage = [[openigDamage objectAtIndex:i] integerValue];
-                       id damageObject = [damages objectAtIndex:i];
+               for(NSInteger i = 1; i <= 6; i++) {
+                       NSInteger damage = [[openigDamage objectAtIndex:i - 1] integerValue];
+                       
+                       printf("%zd,%zd    ", i, damage);
+                       
+                       id damageObject = [damages objectAtIndex:i - 1];
                        damage += [[damageObject valueForKey:@"damage"] integerValue];
                        [damageObject setValue:@(damage) forKeyPath:@"damage"];
                }
        } while(NO);
-       
+       printf("\n");
        
        // hougeki1
+       printf("Hougeki1 damages-> ");
        {
                id targetShips = [self.json valueForKeyPath:@"api_data.api_hougeki1.api_df_list"];
                id hougeki1Damages = [self.json valueForKeyPath:@"api_data.api_hougeki1.api_damage"];
                                        continue;
                                }
                                
-                               id damageObject = [damages objectAtIndex:target];
+                               id damageObject = [damages objectAtIndex:target - 1];
                                NSInteger damage = [[[hougeki1Damages objectAtIndex:i] objectAtIndex:j] integerValue];
+                               
+                               printf("%zd,%zd    ", target - 1, damage);
+                               
                                damage += [[damageObject valueForKey:@"damage"] integerValue];
                                [damageObject setValue:@(damage) forKeyPath:@"damage"];
                                
                        i++;
                }
        }
-
+       printf("\n");
+       
        // hougeki2
+       printf("Hougeki2 damages-> ");
        do {
                id hasHougeki2 = [self.json valueForKeyPath:@"api_data.api_hougeki2"];
                if(!hasHougeki2 || [hasHougeki2 isEqual:[NSNull null]]) break;
                                        continue;
                                }
                                
-                               id damageObject = [damages objectAtIndex:target];
+                               id damageObject = [damages objectAtIndex:target - 1];
                                NSInteger damage = [[[hougeki1Damages objectAtIndex:i] objectAtIndex:j] integerValue];
+                               
+                               printf("%zd,%zd    ", target - 1, damage);
+                               
                                damage += [[damageObject valueForKey:@"damage"] integerValue];
                                [damageObject setValue:@(damage) forKeyPath:@"damage"];
                                
                        i++;
                }
        } while(NO);
-       
+       printf("\n");
        
        // raigeki
+       printf("Raigeki damages-> ");
        do {
                id raigekiDamage = [self.json valueForKeyPath:@"api_data.api_raigeki.api_fdam"];
                if(!raigekiDamage || [raigekiDamage isEqual:[NSNull null]]) break;
                for(NSInteger i = 1; i <= 6; i++) {
                        NSInteger damage = [[raigekiDamage objectAtIndex:i] integerValue];
+                       
+                       printf("%zd,%zd    ", i - 1, damage);
+                       
                        id damageObject = [damages objectAtIndex:i - 1];
                        damage += [[damageObject valueForKey:@"damage"] integerValue];
                        [damageObject setValue:@(damage) forKeyPath:@"damage"];
                }
        } while(NO);
+       printf("\n");
        
        [store saveAction:nil];
 }
        }
        
        // hougeki1
+       printf("Yasen damages-> ");
        {
                id targetShips = [self.json valueForKeyPath:@"api_data.api_hougeki1.api_df_list"];
                id hougeki1Damages = [self.json valueForKeyPath:@"api_data.api_hougeki1.api_damage"];
                                        continue;
                                }
                                
-                               id damageObject = [damages objectAtIndex:target];
+                               id damageObject = [damages objectAtIndex:target - 1];
                                NSInteger damage = [[[hougeki1Damages objectAtIndex:i] objectAtIndex:j] integerValue];
+                               
+                               printf("%zd,%zd    ", target - 1, damage);
+                               
                                damage += [[damageObject valueForKey:@"damage"] integerValue];
                                [damageObject setValue:@(damage) forKeyPath:@"damage"];
                                
                        i++;
                }
        }
+       printf("\n");
        
        [store saveAction:nil];
 }
 
+- (NSArray *)deckWithNumber:(NSNumber *)number
+{
+       return [NSArray array];
+}
 - (void)applyDamage
 {
        HMTemporaryDataStore *store = [HMTemporaryDataStore oneTimeEditor];
        NSArray *damages = nil;
        
        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Damage"];
-       NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO];
+       NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:YES];
        [request setSortDescriptors:@[sortDescriptor]];
        damages = [moc executeFetchRequest:request error:NULL];
        if(damages.count != 6) {
                return;
        }
        
+       NSArray *array = [store objectsWithEntityName:@"Battle"
+                                                                               predicate:nil
+                                                                                       error:NULL];
+       if(array.count == 0) {
+               NSLog(@"Battle is invalid. %s", __PRETTY_FUNCTION__);
+               return;
+       }
+       
        HMServerDataStore *serverStore = [HMServerDataStore oneTimeEditor];
        
-       // TODO:
-       NSLog(@"MUST IMPLEMENT!!");
+       NSArray *decks = [serverStore objectsWithEntityName:@"Deck"
+                                                                                                 error:NULL
+                                                                               predicateFormat:@"id = %@", [array[0] valueForKey:@"deckId"]];
+       if(decks.count == 0) {
+               NSLog(@"Deck is invalid. %s", __PRETTY_FUNCTION__);
+               return;
+       }
+       id deck = decks[0];
+       NSMutableArray *shipIds = [NSMutableArray new];
+       [shipIds addObject:[deck valueForKey:@"ship_0"]];
+       [shipIds addObject:[deck valueForKey:@"ship_1"]];
+       [shipIds addObject:[deck valueForKey:@"ship_2"]];
+       [shipIds addObject:[deck valueForKey:@"ship_3"]];
+       [shipIds addObject:[deck valueForKey:@"ship_4"]];
+       [shipIds addObject:[deck valueForKey:@"ship_5"]];
+       
+       NSMutableArray *ships = [NSMutableArray new];
+       for(id shipId in shipIds) {
+               NSArray *ship = [serverStore objectsWithEntityName:@"Ship"
+                                                                                                        error:NULL
+                                                                                  predicateFormat:@"id = %@", @([shipId integerValue])];
+               if(ship.count != 0 && ![ship[0] isEqual:[NSNull null]]) {
+                       [ships addObject:ship[0]];
+               }
+       }
+       
+       NSUInteger shipCount = ships.count;
+       for(NSInteger i = 0; i < shipCount; i++) {
+               id ship = ships[i];
+               NSInteger damage = [[damages[i] valueForKey:@"damage"] integerValue];
+               NSInteger nowhp = [[ship valueForKey:@"nowhp"] integerValue];
+               nowhp -= damage;
+               [ship setValue:@(nowhp) forKeyPath:@"nowhp"];
+       }
        
        [serverStore saveAction:nil];
 }
 - (void)execute
 {
        if([self.api isEqualToString:@"/kcsapi/api_req_map/start"]) {
-               [self resetDamage];
+               [self resetBattle];
                [self startBattle];
                return;
        }