[Add] Few more mission functions. Also fixed invalid memory free.
This commit is contained in:
parent
6fc39a69e0
commit
faff7b2193
@ -22,10 +22,12 @@ static Mission* cur_mission = NULL;
|
|||||||
static int misn_setTitle(lua_State* L);
|
static int misn_setTitle(lua_State* L);
|
||||||
static int misn_setDesc(lua_State* L);
|
static int misn_setDesc(lua_State* L);
|
||||||
static int misn_setReward(lua_State* L);
|
static int misn_setReward(lua_State* L);
|
||||||
|
static int misn_factions(lua_State* L);
|
||||||
static const luaL_Reg misn_methods[] = {
|
static const luaL_Reg misn_methods[] = {
|
||||||
{ "setTitle", misn_setTitle },
|
{ "setTitle", misn_setTitle },
|
||||||
{ "setDesc", misn_setDesc },
|
{ "setDesc", misn_setDesc },
|
||||||
{ "setReward", misn_setReward },
|
{ "setReward", misn_setReward },
|
||||||
|
{ "factions", misn_factions },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -36,6 +38,19 @@ static const luaL_Reg space_methods[] = {
|
|||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Player.
|
||||||
|
static int player_freeSpace(lua_State* L);
|
||||||
|
static int player_addCargo(lua_State* L);
|
||||||
|
static int player_rmCargo(lua_State* L);
|
||||||
|
static int player_pay(lua_State* L);
|
||||||
|
static const luaL_Reg player_methods[] = {
|
||||||
|
{ "freeCargo", player_freeSpace },
|
||||||
|
{ "addCargo", player_addCargo },
|
||||||
|
{ "rmCargo", player_rmCargo },
|
||||||
|
{ "pay", player_pay },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
// RNG.
|
// RNG.
|
||||||
static int rnd_int(lua_State*L);
|
static int rnd_int(lua_State*L);
|
||||||
static const luaL_Reg rnd_methods[] = {
|
static const luaL_Reg rnd_methods[] = {
|
||||||
@ -53,6 +68,7 @@ static const luaL_Reg hook_methods[] = {
|
|||||||
int misn_loadLibs(lua_State* L) {
|
int misn_loadLibs(lua_State* L) {
|
||||||
luaL_register(L, "misn", misn_methods);
|
luaL_register(L, "misn", misn_methods);
|
||||||
luaL_register(L, "space", space_methods);
|
luaL_register(L, "space", space_methods);
|
||||||
|
luaL_register(L, "player", player_methods);
|
||||||
luaL_register(L, "rnd", rnd_methods);
|
luaL_register(L, "rnd", rnd_methods);
|
||||||
luaL_register(L, "hook", hook_methods);
|
luaL_register(L, "hook", hook_methods);
|
||||||
return 0;
|
return 0;
|
||||||
@ -83,7 +99,7 @@ static int misn_setTitle(lua_State* L) {
|
|||||||
if(cur_mission->title)
|
if(cur_mission->title)
|
||||||
// Cleanup the old title.
|
// Cleanup the old title.
|
||||||
free(cur_mission->title);
|
free(cur_mission->title);
|
||||||
cur_mission->title = strdup(lua_tostring(L, -1));
|
cur_mission->title = strdup((char*)lua_tostring(L, -1));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -94,7 +110,7 @@ static int misn_setDesc(lua_State* L) {
|
|||||||
if(cur_mission->title)
|
if(cur_mission->title)
|
||||||
// Cleanup the old description.
|
// Cleanup the old description.
|
||||||
free(cur_mission->desc);
|
free(cur_mission->desc);
|
||||||
cur_mission->desc = strdup(lua_tostring(L, -1));
|
cur_mission->desc = strdup((char*)lua_tostring(L, -1));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -105,13 +121,74 @@ static int misn_setReward(lua_State* L) {
|
|||||||
if(cur_mission->reward)
|
if(cur_mission->reward)
|
||||||
// Cleanup the old reward.
|
// Cleanup the old reward.
|
||||||
free(cur_mission->reward);
|
free(cur_mission->reward);
|
||||||
cur_mission->reward = strdup(lua_tostring(L, -1));
|
cur_mission->reward = strdup((char*)lua_tostring(L, -1));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int misn_factions(lua_State* L) {
|
||||||
|
(void) L;
|
||||||
|
// TODO: proper misn.factions() implementation.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int space_getPlanet(lua_State* L) {
|
static int space_getPlanet(lua_State* L) {
|
||||||
(void)L;
|
(void)L;
|
||||||
|
// TODO: Proper getPlanet implementation.
|
||||||
|
lua_pushstring(L, "Arrakis");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Player. --
|
||||||
|
static int player_freeSpace(lua_State* L) {
|
||||||
|
lua_pushnumber(L, pilot_freeCargo(player));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int player_addCargo(lua_State* L) {
|
||||||
|
Commodity* cargo;
|
||||||
|
int quantity, ret;
|
||||||
|
|
||||||
|
MIN_ARGS(2);
|
||||||
|
|
||||||
|
if(lua_isstring(L, -1)) cargo = commodity_get((char*) lua_tostring(L, -1));
|
||||||
|
else return 0;
|
||||||
|
if(lua_isnumber(L, -2)) quantity = (int)lua_tonumber(L, -2);
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
ret = pilot_addCargo(player, cargo, quantity);
|
||||||
|
|
||||||
|
lua_pushnumber(L, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int player_rmCargo(lua_State* L) {
|
||||||
|
Commodity* cargo;
|
||||||
|
int quantity, ret;
|
||||||
|
|
||||||
|
MIN_ARGS(2);
|
||||||
|
|
||||||
|
if(lua_isstring(L, -1)) cargo = commodity_get((char*) lua_tostring(L, -1));
|
||||||
|
else return 0;
|
||||||
|
if(lua_isnumber(L, -2)) quantity = (int) lua_tonumber(L, -2);
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
ret = pilot_rmCargo(player, cargo, quantity);
|
||||||
|
|
||||||
|
lua_pushnumber(L, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int player_pay(lua_State* L) {
|
||||||
|
int money;
|
||||||
|
|
||||||
|
MIN_ARGS(1);
|
||||||
|
|
||||||
|
if(lua_isnumber(L, -1)) money = (int) lua_tonumber(L, -1);
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
player->credits += money;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,11 @@ static int mission_init(Mission* mission, MissionData* misn) {
|
|||||||
mission->id = ++mission_id;
|
mission->id = ++mission_id;
|
||||||
mission->data = misn;
|
mission->data = misn;
|
||||||
|
|
||||||
|
// Sane defaults.
|
||||||
|
mission->title = NULL;
|
||||||
|
mission->desc = NULL;
|
||||||
|
mission->reward = NULL;
|
||||||
|
|
||||||
// Init lua.
|
// Init lua.
|
||||||
mission->L = luaL_newstate();
|
mission->L = luaL_newstate();
|
||||||
if(mission->L == NULL) {
|
if(mission->L == NULL) {
|
||||||
@ -169,6 +174,7 @@ Mission* missions_computer(int* n, int faction, char* planet, char* system) {
|
|||||||
Mission* tmp;
|
Mission* tmp;
|
||||||
MissionData* misn;
|
MissionData* misn;
|
||||||
|
|
||||||
|
tmp = NULL;
|
||||||
m = 0;
|
m = 0;
|
||||||
for(i = 0; i < mission_nstack; i++) {
|
for(i = 0; i < mission_nstack; i++) {
|
||||||
misn = &mission_stack[i];
|
misn = &mission_stack[i];
|
||||||
|
@ -603,6 +603,11 @@ static void pilot_calcStats(Pilot* pilot) {
|
|||||||
pilot->energy = ec * pilot->energy_max;
|
pilot->energy = ec * pilot->energy_max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pilot free cargo space.
|
||||||
|
int pilot_freeCargo(Pilot* p) {
|
||||||
|
return p->cargo_free;
|
||||||
|
}
|
||||||
|
|
||||||
// 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;
|
||||||
|
@ -135,10 +135,11 @@ void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
|
|||||||
void pilot_setSecondary(Pilot* p, const char* secondary);
|
void pilot_setSecondary(Pilot* p, const char* secondary);
|
||||||
void pilot_setAmmo(Pilot* p);
|
void pilot_setAmmo(Pilot* p);
|
||||||
double pilot_face(Pilot* p, const float dir);
|
double pilot_face(Pilot* p, const float dir);
|
||||||
int pilot_freeSpace(Pilot* p);
|
int pilot_freeSpace(Pilot* p); // Pilot space.
|
||||||
int pilot_addOutfit(Pilot* pilot, Outfit* outfit, int quantity);
|
int pilot_addOutfit(Pilot* pilot, Outfit* outfit, int quantity);
|
||||||
int pilot_rmOutfit(Pilot* pilot, Outfit* outfit, int quantity);
|
int pilot_rmOutfit(Pilot* pilot, Outfit* outfit, int quantity);
|
||||||
char* pilot_getOutfits(Pilot* pilot);
|
char* pilot_getOutfits(Pilot* pilot);
|
||||||
|
int pilot_freeCargo(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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user