[Change] Sanitized dealing with mission cargo somewhat.

This commit is contained in:
Allanis 2014-03-07 21:45:54 +00:00
parent 88f339845c
commit ccb2be36c1
6 changed files with 32 additions and 22 deletions

View File

@ -733,6 +733,7 @@ static int player_addCargo(lua_State* L) {
if(lua_isnumber(L, 2)) quantity = (int)lua_tonumber(L, 2);
else LLUA_INVALID_PARAMETER();
/* First try to add the cargo. */
ret = pilot_addMissionCargo(player, cargo, quantity);
mission_linkCargo(cur_mission, ret);
@ -749,8 +750,14 @@ static int player_rmCargo(lua_State* L) {
if(lua_isnumber(L, 1)) id = (unsigned int) lua_tonumber(L, 1);
else LLUA_INVALID_PARAMETER();
ret = pilot_rmMissionCargo(player, id);
mission_unlinkCargo(cur_mission, id);
/* First try to remove the cargo from player. */
if(pilot_rmMissionCargo(player, id) != 0) {
lua_pushboolean(L, 0);
return 1;
}
/* Now unlink the mission cargo if it was successful. */
ret = mission_unlinkCargo(cur_mission, id);
lua_pushboolean(L, !ret);
return 1;

View File

@ -302,14 +302,16 @@ void mission_sysMark(void) {
}
/* Links cargo to the mission for posterior cleanup. */
void mission_linkCargo(Mission* misn, unsigned int cargo_id) {
int mission_linkCargo(Mission* misn, unsigned int cargo_id) {
misn->ncargo++;
misn->cargo = realloc(misn->cargo, sizeof(unsigned int) * misn->ncargo);
misn->cargo[misn->ncargo-1] = cargo_id;
return 0;
}
/* Unlink cargo from the mission, removes it from the player. */
void mission_unlinkCargo(Mission* misn, unsigned int cargo_id) {
int mission_unlinkCargo(Mission* misn, unsigned int cargo_id) {
int i;
for(i = 0; i < misn->ncargo; i++)
@ -319,7 +321,7 @@ void mission_unlinkCargo(Mission* misn, unsigned int cargo_id) {
if(i >= misn->ncargo) { /* Not found. */
DEBUG("Mission '%s' attempting to unlink in existant cargo %d.",
misn->title, cargo_id);
return;
return 1;
}
/* Shrink cargo size - No need to realloc. */
@ -327,7 +329,8 @@ void mission_unlinkCargo(Mission* misn, unsigned int cargo_id) {
sizeof(unsigned int) * (misn->ncargo-i-1));
misn->ncargo--;
player_rmMissionCargo(cargo_id);
return 0;
}
/**

View File

@ -85,8 +85,8 @@ MissionData* mission_get(int id);
void mission_sysMark(void);
/* Cargo stuff. */
void mission_linkCargo(Mission* misn, unsigned int cargo_id);
void mission_unlinkCargo(Mission* misn, unsigned int cargo_id);
int mission_linkCargo(Mission* misn, unsigned int cargo_id);
int mission_unlinkCargo(Mission* misn, unsigned int cargo_id);
/* Load/Quit. */
int missions_load(void);

View File

@ -1180,6 +1180,13 @@ static void pilot_calcCargo(Pilot* pilot) {
pilot->solid->mass = pilot->ship->mass + q; /* Cargo affects weight. */
}
/**
* @brief Add special mission cargo, can't sell it and such.
* @param pilot Pilot to add it to.
* @param cargo Comodity to add.
* @param quantity Quantity to add.
* @return The mission cargo ID of created cargo.
*/
unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity) {
int q;
q = quantity;
@ -1198,7 +1205,12 @@ unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity)
return pilot->commodities[pilot->ncommodities-1].id;
}
/* Remove special misssion cargo based on id. */
/**
* @brief Remove special mission cargo based on id.
* @param pilot Pilot to remove cargo from.
* @param cargo_id ID of the cargo to remove.
* @return 0 on success (cargo removed).
*/
int pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id) {
int i;
@ -1213,7 +1225,7 @@ int pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id) {
/* Remove cargo. */
pilot->cargo_free += pilot->commodities[i].quantity;
pilot->solid->mass -= pilot->commodities[i].quantity;
memmove(pilot->commodities+i, pilot->commodities+i+1,
memmove(&pilot->commodities[i], &pilot->commodities[i+1],
sizeof(PilotCommodity) * (pilot->ncommodities-i-1));
pilot->ncommodities--;

View File

@ -775,17 +775,6 @@ int player_cargoOwned(const char* commodityname) {
return 0;
}
void player_rmMissionCargo(unsigned int cargo_id) {
int i;
/* Check if already done. */
if((player != NULL) && !pilot_rmMissionCargo(player, cargo_id)) return;
for(i = 0; i < player_nstack; i++)
if(!pilot_rmMissionCargo(player_stack[i], cargo_id))
return; /* Success. */
}
/**
* @fn void player_renderBG(void)
*

View File

@ -55,7 +55,6 @@ void player_playSound(int sound, int once);
/* Cargo. */
int player_outfitOwned(const char* outfitname);
int player_cargoOwned(const char* commodityname);
void player_rmMissionCargo(unsigned int cargo_id);
/* Pilot ships. */
void player_ships(char** sships, glTexture** tships);