[Fix] toolkit module for lua and accpet mission bug.
This commit is contained in:
parent
4f93fba024
commit
3da2a4086b
@ -19,7 +19,7 @@ end
|
|||||||
|
|
||||||
function accept()
|
function accept()
|
||||||
player.addCargo(carg_type, carg_mass)
|
player.addCargo(carg_type, carg_mass)
|
||||||
toolkit.msg("Mission Accepted",
|
tk.msg("Mission Accepted",
|
||||||
string.format("The workers load the %d tons of %s onto your ship.",
|
string.format("The workers load the %d tons of %s onto your ship.",
|
||||||
carg_mass, carg_type))
|
carg_mass, carg_type))
|
||||||
hook.land("land")
|
hook.land("land")
|
||||||
@ -29,7 +29,7 @@ function land()
|
|||||||
if planet.name() == planet then
|
if planet.name() == planet then
|
||||||
player.rmCargo(carg_type, carg_mass)
|
player.rmCargo(carg_type, carg_mass)
|
||||||
player.pay(misn_reward)
|
player.pay(misn_reward)
|
||||||
toolkit.msg("Mission Accomplished",
|
tk.msg("Mission Accomplished",
|
||||||
string.format("The workers unload the %s at the docks.", carg_type))
|
string.format("The workers unload the %s at the docks.", carg_type))
|
||||||
|
|
||||||
-- Set the hooks.
|
-- Set the hooks.
|
||||||
|
10
src/land.c
10
src/land.c
@ -825,10 +825,20 @@ static void misn_close(char* str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void misn_accept(char* str) {
|
static void misn_accept(char* str) {
|
||||||
|
int i;
|
||||||
char* misn_name;
|
char* misn_name;
|
||||||
(void)str;
|
(void)str;
|
||||||
|
|
||||||
misn_name = toolkit_getList(secondary_wid, "lstMission");
|
misn_name = toolkit_getList(secondary_wid, "lstMission");
|
||||||
|
|
||||||
|
if(strcmp(misn_name, "No Missions")==0) return;
|
||||||
|
|
||||||
|
for(i = 0; i < mission_ncomputer; i++)
|
||||||
|
if(mission_computer[i].title &&
|
||||||
|
(strcmp(misn_name, mission_computer[i].title)==0)) {
|
||||||
|
mission_accept(&mission_computer[i]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void misn_genList(int first) {
|
static void misn_genList(int first) {
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "lephisto.h"
|
#include "lephisto.h"
|
||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
#include "space.h"
|
#include "space.h"
|
||||||
|
#include "toolkit.h"
|
||||||
#include "misn_lua.h"
|
#include "misn_lua.h"
|
||||||
|
|
||||||
// FUCK LUA!!!
|
// FUCK LUA!!!
|
||||||
@ -52,17 +53,28 @@ static const luaL_Reg player_methods[] = {
|
|||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
// RNG.
|
// RND.
|
||||||
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[] = {
|
||||||
{ "int", rnd_int },
|
{ "int", rnd_int },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Toolkit.
|
||||||
|
static int tk_msg(lua_State* L);
|
||||||
|
static int tk_yesno(lua_State* L);
|
||||||
|
static int tk_input(lua_State* L);
|
||||||
|
static const luaL_Reg tk_methods[] = {
|
||||||
|
{ "msg", tk_msg },
|
||||||
|
{ "yesno", tk_yesno },
|
||||||
|
{ "input", tk_input },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
static int hook_land(lua_State* L);
|
static int hook_land(lua_State* L);
|
||||||
static const luaL_Reg hook_methods[] = {
|
static const luaL_Reg hook_methods[] = {
|
||||||
{ "land", hook_land },
|
{ "land", hook_land },
|
||||||
{ 0, 0 },
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Register all the libaries.
|
// Register all the libaries.
|
||||||
@ -72,6 +84,7 @@ int misn_loadLibs(lua_State* L) {
|
|||||||
luaL_register(L, "player", player_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);
|
||||||
|
luaL_register(L, "tk", tk_methods);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,9 +165,9 @@ static int player_addCargo(lua_State* L) {
|
|||||||
|
|
||||||
MIN_ARGS(2);
|
MIN_ARGS(2);
|
||||||
|
|
||||||
if(lua_isstring(L, -1)) cargo = commodity_get((char*) lua_tostring(L, -1));
|
if(lua_isstring(L, -2)) cargo = commodity_get((char*) lua_tostring(L, -2));
|
||||||
else return 0;
|
else return 0;
|
||||||
if(lua_isnumber(L, -2)) quantity = (int)lua_tonumber(L, -2);
|
if(lua_isnumber(L, -1)) quantity = (int)lua_tonumber(L, -1);
|
||||||
else return 0;
|
else return 0;
|
||||||
|
|
||||||
ret = pilot_addCargo(player, cargo, quantity);
|
ret = pilot_addCargo(player, cargo, quantity);
|
||||||
@ -169,9 +182,9 @@ static int player_rmCargo(lua_State* L) {
|
|||||||
|
|
||||||
MIN_ARGS(2);
|
MIN_ARGS(2);
|
||||||
|
|
||||||
if(lua_isstring(L, -1)) cargo = commodity_get((char*) lua_tostring(L, -1));
|
if(lua_isstring(L, -2)) cargo = commodity_get((char*) lua_tostring(L, -2));
|
||||||
else return 0;
|
else return 0;
|
||||||
if(lua_isnumber(L, -2)) quantity = (int) lua_tonumber(L, -2);
|
if(lua_isnumber(L, -1)) quantity = (int) lua_tonumber(L, -1);
|
||||||
else return 0;
|
else return 0;
|
||||||
|
|
||||||
ret = pilot_rmCargo(player, cargo, quantity);
|
ret = pilot_rmCargo(player, cargo, quantity);
|
||||||
@ -193,6 +206,7 @@ static int player_pay(lua_State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- RND. --
|
||||||
static int rnd_int(lua_State* L) {
|
static int rnd_int(lua_State* L) {
|
||||||
int o;
|
int o;
|
||||||
|
|
||||||
@ -217,6 +231,52 @@ static int rnd_int(lua_State* L) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- Toolkit. --
|
||||||
|
|
||||||
|
static int tk_msg(lua_State* L) {
|
||||||
|
char* title, *str;
|
||||||
|
MIN_ARGS(2);
|
||||||
|
|
||||||
|
if(lua_isstring(L, -2)) title = (char*) lua_tostring(L, -2);
|
||||||
|
else return 0;
|
||||||
|
if(lua_isstring(L, -1)) str = (char*) lua_tostring(L, -1);
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
dialogue_msg(title, str);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tk_yesno(lua_State* L) {
|
||||||
|
char* title, *str;
|
||||||
|
MIN_ARGS(2);
|
||||||
|
|
||||||
|
if(lua_isstring(L, -2)) title = (char*) lua_tostring(L, -2);
|
||||||
|
else return 0;
|
||||||
|
if(lua_isstring(L, -1)) str = (char*) lua_tostring(L, -1);
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
dialogue_YesNo(title, str);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tk_input(lua_State* L) {
|
||||||
|
char* title, *str;
|
||||||
|
int min, max;
|
||||||
|
MIN_ARGS(4);
|
||||||
|
|
||||||
|
if(lua_isstring(L, -4)) title = (char*) lua_tostring(L, -4);
|
||||||
|
else return 0;
|
||||||
|
if(lua_isnumber(L, -3)) min = (int) lua_tonumber(L, -3);
|
||||||
|
else return 0;
|
||||||
|
if(lua_isnumber(L, -2)) max = (int) lua_tonumber(L, -2);
|
||||||
|
else return 0;
|
||||||
|
if(lua_isstring(L, -1)) str = (char*) lua_tostring(L, -1);
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
dialogue_input(title, min, max, str);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// -- HOOK --
|
// -- HOOK --
|
||||||
static int hook_land(lua_State* L) {
|
static int hook_land(lua_State* L) {
|
||||||
char* func;
|
char* func;
|
||||||
|
@ -80,8 +80,8 @@ static int mission_init(Mission* mission, MissionData* misn) {
|
|||||||
return mission->id;
|
return mission->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a mission to the player, you can free the current mission safely.
|
// Accept mission, used basically for mission computers.
|
||||||
int mission_add(Mission* mission) {
|
void mission_accept(Mission* mission) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// Find last mission.
|
// Find last mission.
|
||||||
@ -89,13 +89,14 @@ int mission_add(Mission* mission) {
|
|||||||
if(player_missions[i].data == NULL) break;
|
if(player_missions[i].data == NULL) break;
|
||||||
|
|
||||||
// No missions left.
|
// No missions left.
|
||||||
if(i >= MISSION_MAX) return -1;
|
if(i >= MISSION_MAX) return;
|
||||||
|
|
||||||
// Copy it over.
|
// Copy it over.
|
||||||
memcpy(&player_missions[i], mission, sizeof(Mission));
|
memcpy(&player_missions[i], mission, sizeof(Mission));
|
||||||
memset(mission, 0, sizeof(Mission));
|
memset(mission, 0, sizeof(Mission));
|
||||||
|
|
||||||
return player_missions[i].id;
|
// Run the accept commandz.
|
||||||
|
misn_run(&player_missions[i], "accept");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up a mission.
|
// Clean up a mission.
|
||||||
|
@ -58,7 +58,7 @@ extern Mission player_mission[MISSION_MAX];
|
|||||||
// For mission computer.
|
// For mission computer.
|
||||||
Mission* missions_computer(int* n, int faction, char* planet, char* system);
|
Mission* missions_computer(int* n, int faction, char* planet, char* system);
|
||||||
// Player accepted mission - mission computer.
|
// Player accepted mission - mission computer.
|
||||||
void mission_accept(Mission* misn);
|
void mission_accept(Mission* mission);
|
||||||
|
|
||||||
// Load/Quit.
|
// Load/Quit.
|
||||||
int missions_load(void);
|
int missions_load(void);
|
||||||
|
@ -148,6 +148,7 @@ static void toolkit_drawRect(double x, double y, double w, double h,
|
|||||||
glColour* c, glColour* lc);
|
glColour* c, glColour* lc);
|
||||||
// Dialogues..
|
// Dialogues..
|
||||||
static void dialogue_alertClose(char* str);
|
static void dialogue_alertClose(char* str);
|
||||||
|
static void dialogue_msgClose(char* str);
|
||||||
static void dialogue_YesNoClose(char* str);
|
static void dialogue_YesNoClose(char* str);
|
||||||
static void dialogue_inputClose(char* str);
|
static void dialogue_inputClose(char* str);
|
||||||
// Secondary loop hack.
|
// Secondary loop hack.
|
||||||
@ -1404,6 +1405,43 @@ static void dialogue_alertClose(char* str) {
|
|||||||
window_destroy(window_get("Warning"));
|
window_destroy(window_get("Warning"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Display an alert popup with only an OK button and a message.
|
||||||
|
static unsigned int msg_wid = 0;
|
||||||
|
void dialogue_msg(char* caption, const char* fmt, ...) {
|
||||||
|
char msg[256];
|
||||||
|
va_list ap;
|
||||||
|
int h;
|
||||||
|
|
||||||
|
if(msg_wid) return;
|
||||||
|
|
||||||
|
if(fmt == NULL) return;
|
||||||
|
else {
|
||||||
|
// Get the message.
|
||||||
|
va_start(ap, fmt);
|
||||||
|
vsprintf(msg, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
h = gl_printHeight(&gl_smallFont, 260, msg);
|
||||||
|
|
||||||
|
// Create the window.
|
||||||
|
msg_wid = window_create(caption, -1, -1, 300, 90+h);
|
||||||
|
window_addText(msg_wid, 20, -30, 260, h, 0, "txtMsg",
|
||||||
|
&gl_smallFont, &cBlack, msg);
|
||||||
|
|
||||||
|
window_addButton(msg_wid, 135, 20, 50, 30, "btnOK", "OK",
|
||||||
|
dialogue_msgClose);
|
||||||
|
|
||||||
|
toolkit_loop();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dialogue_msgClose(char* str) {
|
||||||
|
(void)str;
|
||||||
|
window_destroy(msg_wid);
|
||||||
|
msg_wid = 0;
|
||||||
|
loop_done = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Runs a dialogue with a Yes No button, return 1 if yes.
|
// Runs a dialogue with a Yes No button, return 1 if yes.
|
||||||
static int yesno_result;
|
static int yesno_result;
|
||||||
static unsigned int yesno_wid = 0;
|
static unsigned int yesno_wid = 0;
|
||||||
|
@ -45,6 +45,7 @@ void window_addInput(const unsigned int wid,
|
|||||||
|
|
||||||
// Popups and alerts.
|
// Popups and alerts.
|
||||||
void dialogue_alert(const char* fmt, ...);
|
void dialogue_alert(const char* fmt, ...);
|
||||||
|
void dialogue_msg(char* caption, const char* fmt, ...);
|
||||||
int dialogue_YesNo(char* caption, const char* fmt, ...);
|
int dialogue_YesNo(char* caption, const char* fmt, ...);
|
||||||
char* dialogue_input(char* title, int min, int max, const char* fmt, ...);
|
char* dialogue_input(char* title, int min, int max, const char* fmt, ...);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user