[Fix] Fixed mission cargo not moving correctly when changing ships.
This commit is contained in:
		
							parent
							
								
									4a4737130b
								
							
						
					
					
						commit
						652ebbb3d0
					
				
							
								
								
									
										37
									
								
								src/pilot.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								src/pilot.c
									
									
									
									
									
								
							| @ -994,7 +994,7 @@ int pilot_rmOutfit(Pilot* pilot, Outfit* outfit, int quantity) { | |||||||
|         osec = (pilot->secondary) ? pilot->secondary->outfit->name : NULL; |         osec = (pilot->secondary) ? pilot->secondary->outfit->name : NULL; | ||||||
| 
 | 
 | ||||||
|         /* Remove the outfit. */ |         /* Remove the outfit. */ | ||||||
|         memmove(pilot->outfits+i, pilot->outfits+i+1, |         memmove(&pilot->outfits[i], &pilot->outfits[i+1], | ||||||
|                 sizeof(PilotOutfit)*(pilot->noutfits-i-1)); |                 sizeof(PilotOutfit)*(pilot->noutfits-i-1)); | ||||||
|         pilot->noutfits--; |         pilot->noutfits--; | ||||||
|         pilot->outfits = realloc(pilot->outfits, |         pilot->outfits = realloc(pilot->outfits, | ||||||
| @ -1128,6 +1128,41 @@ int pilot_cargoFree(Pilot* p) { | |||||||
|   return p->cargo_free; |   return p->cargo_free; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | int pilot_moveCargo(Pilot* dest, Pilot* src) { | ||||||
|  |   int i; | ||||||
|  | 
 | ||||||
|  |   /* Nothing to copy, success! */ | ||||||
|  |   if(src->ncommodities == 0) | ||||||
|  |     return 0; | ||||||
|  | 
 | ||||||
|  |   /* Check if it fits. */ | ||||||
|  |   if(pilot_cargoUsed(src) > pilot_cargoFree(dest)) { | ||||||
|  |     WARN("Unable to copy cargo over from pilot '%s' to '%s'", src->name, dest->name); | ||||||
|  |     return -1; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* Alloate new space. */ | ||||||
|  |   i = dest->ncommodities; | ||||||
|  |   dest->ncommodities += src->ncommodities; | ||||||
|  |   dest->commodities = realloc(dest->commodities, | ||||||
|  |       sizeof(PilotCommodity)*dest->ncommodities); | ||||||
|  | 
 | ||||||
|  |   /* Copy over. */ | ||||||
|  |   memmove(&dest->commodities[i], &src->commodities[0], | ||||||
|  |       sizeof(PilotCommodity) * src->ncommodities); | ||||||
|  | 
 | ||||||
|  |   /* Clean src. */ | ||||||
|  |   src->ncommodities = 0; | ||||||
|  |   if(src->commodities != NULL) | ||||||
|  |     free(src->commodities); | ||||||
|  |   src->commodities = NULL; | ||||||
|  | 
 | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Try to add quantity of cargo to pilot, return quantity actually added. */ | /* Try to add quantity of cargo to pilot, return quantity actually added. */ | ||||||
| int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity) { | int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity) { | ||||||
|   int i, q; |   int i, q; | ||||||
|  | |||||||
| @ -260,6 +260,7 @@ int pilot_cargoUsed(Pilot* pilot);   /* Get amount of cargo onboard. */ | |||||||
| int pilot_cargoFree(Pilot* p);      /* Cargo space. */ | int pilot_cargoFree(Pilot* p);      /* Cargo space. */ | ||||||
| int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity); | int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity); | ||||||
| int pilot_rmCargo(Pilot* pilot, Commodity* cargo, int quantity); | int pilot_rmCargo(Pilot* pilot, Commodity* cargo, int quantity); | ||||||
|  | int pilot_moveCargo(Pilot* dest, Pilot* src); | ||||||
| /* Mission cargo - Not to be confused with normal cargo. */ | /* Mission cargo - Not to be confused with normal cargo. */ | ||||||
| unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity); | unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity); | ||||||
| int pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id); | int pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id); | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								src/player.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/player.c
									
									
									
									
									
								
							| @ -462,6 +462,15 @@ static void player_newShipMake(char* name) { | |||||||
| 
 | 
 | ||||||
|   gl_bindCamera(&player->solid->pos); /* Set opengl camera. */ |   gl_bindCamera(&player->solid->pos); /* Set opengl camera. */ | ||||||
| 
 | 
 | ||||||
|  |   /* Copy cargo over. */ | ||||||
|  |   if(player_nstack > 0) { /* Not during creation though. */ | ||||||
|  |     pilot_moveCargo(player, player_stack[player_nstack-1]); | ||||||
|  | 
 | ||||||
|  |     /* Recalculate stats after cargo movement. */ | ||||||
|  |     pilot_calcStats(player); | ||||||
|  |     pilot_calcStats(player_stack[player_nstack-1]); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /* Moniez!! */ |   /* Moniez!! */ | ||||||
|   player->credits = player_credits; |   player->credits = player_credits; | ||||||
|   player_credits = 0; |   player_credits = 0; | ||||||
| @ -486,12 +495,7 @@ void player_swapShip(char* shipname) { | |||||||
|       ship->credits = player->credits; |       ship->credits = player->credits; | ||||||
| 
 | 
 | ||||||
|       /* Move cargo over. */ |       /* Move cargo over. */ | ||||||
|       for(j = 0; j < player->ncommodities; j++) { |       pilot_moveCargo(ship, player); | ||||||
|         pilot_addCargo(ship, player->commodities[j].commodity, |  | ||||||
|             player->commodities[j].quantity); |  | ||||||
|         pilot_rmCargo(player, player->commodities[j].commodity, |  | ||||||
|             player->commodities[j].quantity); |  | ||||||
|       } |  | ||||||
| 
 | 
 | ||||||
|       /* Extra pass to calculate stats. */ |       /* Extra pass to calculate stats. */ | ||||||
|       pilot_calcStats(ship); |       pilot_calcStats(ship); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allanis
						Allanis