[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);
|
if(lua_isnumber(L, 2)) quantity = (int)lua_tonumber(L, 2);
|
||||||
else LLUA_INVALID_PARAMETER();
|
else LLUA_INVALID_PARAMETER();
|
||||||
|
|
||||||
|
/* First try to add the cargo. */
|
||||||
ret = pilot_addMissionCargo(player, cargo, quantity);
|
ret = pilot_addMissionCargo(player, cargo, quantity);
|
||||||
mission_linkCargo(cur_mission, ret);
|
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);
|
if(lua_isnumber(L, 1)) id = (unsigned int) lua_tonumber(L, 1);
|
||||||
else LLUA_INVALID_PARAMETER();
|
else LLUA_INVALID_PARAMETER();
|
||||||
|
|
||||||
ret = pilot_rmMissionCargo(player, id);
|
/* First try to remove the cargo from player. */
|
||||||
mission_unlinkCargo(cur_mission, id);
|
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);
|
lua_pushboolean(L, !ret);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -302,14 +302,16 @@ void mission_sysMark(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Links cargo to the mission for posterior cleanup. */
|
/* 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->ncargo++;
|
||||||
misn->cargo = realloc(misn->cargo, sizeof(unsigned int) * misn->ncargo);
|
misn->cargo = realloc(misn->cargo, sizeof(unsigned int) * misn->ncargo);
|
||||||
misn->cargo[misn->ncargo-1] = cargo_id;
|
misn->cargo[misn->ncargo-1] = cargo_id;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlink cargo from the mission, removes it from the player. */
|
/* 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;
|
int i;
|
||||||
|
|
||||||
for(i = 0; i < misn->ncargo; 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. */
|
if(i >= misn->ncargo) { /* Not found. */
|
||||||
DEBUG("Mission '%s' attempting to unlink in existant cargo %d.",
|
DEBUG("Mission '%s' attempting to unlink in existant cargo %d.",
|
||||||
misn->title, cargo_id);
|
misn->title, cargo_id);
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Shrink cargo size - No need to realloc. */
|
/* 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));
|
sizeof(unsigned int) * (misn->ncargo-i-1));
|
||||||
|
|
||||||
misn->ncargo--;
|
misn->ncargo--;
|
||||||
player_rmMissionCargo(cargo_id);
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -85,8 +85,8 @@ MissionData* mission_get(int id);
|
|||||||
void mission_sysMark(void);
|
void mission_sysMark(void);
|
||||||
|
|
||||||
/* Cargo stuff. */
|
/* Cargo stuff. */
|
||||||
void mission_linkCargo(Mission* misn, unsigned int cargo_id);
|
int mission_linkCargo(Mission* misn, unsigned int cargo_id);
|
||||||
void mission_unlinkCargo(Mission* misn, unsigned int cargo_id);
|
int mission_unlinkCargo(Mission* misn, unsigned int cargo_id);
|
||||||
|
|
||||||
/* Load/Quit. */
|
/* Load/Quit. */
|
||||||
int missions_load(void);
|
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. */
|
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) {
|
unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity) {
|
||||||
int q;
|
int q;
|
||||||
q = quantity;
|
q = quantity;
|
||||||
@ -1198,7 +1205,12 @@ unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity)
|
|||||||
return pilot->commodities[pilot->ncommodities-1].id;
|
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 pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1213,7 +1225,7 @@ int pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id) {
|
|||||||
/* Remove cargo. */
|
/* Remove cargo. */
|
||||||
pilot->cargo_free += pilot->commodities[i].quantity;
|
pilot->cargo_free += pilot->commodities[i].quantity;
|
||||||
pilot->solid->mass -= 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));
|
sizeof(PilotCommodity) * (pilot->ncommodities-i-1));
|
||||||
|
|
||||||
pilot->ncommodities--;
|
pilot->ncommodities--;
|
||||||
|
11
src/player.c
11
src/player.c
@ -775,17 +775,6 @@ int player_cargoOwned(const char* commodityname) {
|
|||||||
return 0;
|
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)
|
* @fn void player_renderBG(void)
|
||||||
*
|
*
|
||||||
|
@ -55,7 +55,6 @@ void player_playSound(int sound, int once);
|
|||||||
/* Cargo. */
|
/* Cargo. */
|
||||||
int player_outfitOwned(const char* outfitname);
|
int player_outfitOwned(const char* outfitname);
|
||||||
int player_cargoOwned(const char* commodityname);
|
int player_cargoOwned(const char* commodityname);
|
||||||
void player_rmMissionCargo(unsigned int cargo_id);
|
|
||||||
|
|
||||||
/* Pilot ships. */
|
/* Pilot ships. */
|
||||||
void player_ships(char** sships, glTexture** tships);
|
void player_ships(char** sships, glTexture** tships);
|
||||||
|
Loading…
Reference in New Issue
Block a user