Changeset 432 for veekun/trunk/lib/Vee
- Timestamp:
- 05/23/08 02:41:12 (22 months ago)
- Location:
- veekun/trunk/lib/Vee
- Files:
-
- 2 modified
-
Controller/Dex/Utils.pm (modified) (3 diffs)
-
Schema/EvoChains.pm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
veekun/trunk/lib/Vee/Controller/Dex/Utils.pm
r431 r432 270 270 } 271 271 272 if ($pokemon->breeding_code == 255) { 273 $s->{error_msg} = $pokemon->name . ' cannot breed.'; 272 my $basic_form = $pokemon->evo_chain->basic_form; 273 my @egg_forms = $pokemon->evo_chain->egg_forms; 274 275 warn join "\n", map { $_->name } @egg_forms; 276 # N.B.: this assumes (correctly, as of DP) that every gendered Pokemon in 277 # a given chain has the same breeding code. 278 my $breedable_form = $pokemon->evo_chain->pokemon({ 279 'breeds.breed' => { '!=' => 15 }, 280 }, { 281 join => 'breeds', 282 })->first; 283 if (not $breedable_form) { 284 $s->{error_msg} = 'Nothing in the ' . $basic_form->name 285 . ' family can breed.'; 274 286 return; 275 287 } 276 288 277 289 my @unlearnable_moves; 278 for my $move (@moves) { 279 my $method = $pokemon->move_method_string($move, $version); 280 if (not $method) { 281 push @unlearnable_moves, $move; 282 } 290 MOVE: for my $move (@moves) { 291 for my $egg (@egg_forms) { 292 next MOVE if $egg->move_method_string($move, $version); 293 } 294 295 push @unlearnable_moves, $move; 283 296 } 284 297 if (@unlearnable_moves) { … … 287 300 $move_names[-1] = 'or ' . $move_names[-1]; 288 301 } 289 $s->{error_msg} = $pokemon->name . " cannot inherit "290 . join(', ', @move_names) . '.';302 $s->{error_msg} = 'No egg in the ' . $basic_form->name . ' family can' 303 . ' inherit ' . join(', ', @move_names) . '.'; 291 304 return; 292 305 } … … 329 342 # tree iteratively from there 330 343 my %egg_groups_tree = ( 331 groups => [ $ pokemon->breeding_groups ],332 pokemon => [ $pokemon],344 groups => [ $breedable_form->breeding_groups ], 345 pokemon => [ @egg_forms ], 333 346 children => [], 334 347 ); -
veekun/trunk/lib/Vee/Schema/EvoChains.pm
r406 r432 23 23 __PACKAGE__->has_many(pokemon => 'Vee::Schema::Pokemon', 'evo_chain_id'); 24 24 25 =head2 baby_form 26 27 Returns the baby Pokemon in this chain, if any. 28 29 =cut 30 31 sub baby_form { 32 my ($self) = @_; 33 34 return $self->pokemon( \ 'FIND_IN_SET(flags, "baby")' )->single; 35 } 36 37 =head2 basic_form 38 39 Returns the basic form of this Pokemon. 40 41 =cut 42 43 sub basic_form { 44 my ($self) = @_; 45 46 return $self->pokemon( 47 \ 'NOT FIND_IN_SET(flags, "baby")', 48 { 49 order_by => 'id ASC', 50 })->first; 51 } 52 53 =head2 egg_forms 54 55 Returns any Pokemon that can result from a breeding in this chain. 56 57 =cut 58 59 sub egg_forms { 60 my ($self) = @_; 61 my @ret; 62 63 my $baby_form = $self->baby_form; 64 if ($baby_form) { 65 push @ret, $baby_form; 66 } 67 68 my $basic_form = $self->basic_form; 69 if (not $baby_form 70 or $self->baby_item) # e.g. Munchlax with incense 71 { 72 push @ret, $basic_form; 73 } 74 75 return @ret; 76 } 77 25 78 =head1 SEE ALSO 26 79
