[Change] Sanitized dealing with mission cargo somewhat.
This commit is contained in:
parent
88f339845c
commit
ccb2be36c1
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
16
src/pilot.c
16
src/pilot.c
@ -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--;
|
||||
|
11
src/player.c
11
src/player.c
@ -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)
|
||||
*
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user