[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()
|
||||
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.",
|
||||
carg_mass, carg_type))
|
||||
hook.land("land")
|
||||
@ -29,7 +29,7 @@ function land()
|
||||
if planet.name() == planet then
|
||||
player.rmCargo(carg_type, carg_mass)
|
||||
player.pay(misn_reward)
|
||||
toolkit.msg("Mission Accomplished",
|
||||
tk.msg("Mission Accomplished",
|
||||
string.format("The workers unload the %s at the docks.", carg_type))
|
||||
|
||||
-- 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) {
|
||||
int i;
|
||||
char* misn_name;
|
||||
(void)str;
|
||||
|
||||
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) {
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "lephisto.h"
|
||||
#include "rng.h"
|
||||
#include "space.h"
|
||||
#include "toolkit.h"
|
||||
#include "misn_lua.h"
|
||||
|
||||
// FUCK LUA!!!
|
||||
@ -52,17 +53,28 @@ static const luaL_Reg player_methods[] = {
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
// RNG.
|
||||
// RND.
|
||||
static int rnd_int(lua_State*L);
|
||||
static const luaL_Reg rnd_methods[] = {
|
||||
{ "int", rnd_int },
|
||||
{ 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 const luaL_Reg hook_methods[] = {
|
||||
{ "land", hook_land },
|
||||
{ 0, 0 },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
// Register all the libaries.
|
||||
@ -72,6 +84,7 @@ int misn_loadLibs(lua_State* L) {
|
||||
luaL_register(L, "player", player_methods);
|
||||
luaL_register(L, "rnd", rnd_methods);
|
||||
luaL_register(L, "hook", hook_methods);
|
||||
luaL_register(L, "tk", tk_methods);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -152,9 +165,9 @@ static int player_addCargo(lua_State* L) {
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
ret = pilot_addCargo(player, cargo, quantity);
|
||||
@ -169,9 +182,9 @@ static int player_rmCargo(lua_State* L) {
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
ret = pilot_rmCargo(player, cargo, quantity);
|
||||
@ -193,6 +206,7 @@ static int player_pay(lua_State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// -- RND. --
|
||||
static int rnd_int(lua_State* L) {
|
||||
int o;
|
||||
|
||||
@ -217,6 +231,52 @@ static int rnd_int(lua_State* L) {
|
||||
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 --
|
||||
static int hook_land(lua_State* L) {
|
||||
char* func;
|
||||
|
@ -80,8 +80,8 @@ static int mission_init(Mission* mission, MissionData* misn) {
|
||||
return mission->id;
|
||||
}
|
||||
|
||||
// Add a mission to the player, you can free the current mission safely.
|
||||
int mission_add(Mission* mission) {
|
||||
// Accept mission, used basically for mission computers.
|
||||
void mission_accept(Mission* mission) {
|
||||
int i;
|
||||
|
||||
// Find last mission.
|
||||
@ -89,13 +89,14 @@ int mission_add(Mission* mission) {
|
||||
if(player_missions[i].data == NULL) break;
|
||||
|
||||
// No missions left.
|
||||
if(i >= MISSION_MAX) return -1;
|
||||
if(i >= MISSION_MAX) return;
|
||||
|
||||
// Copy it over.
|
||||
memcpy(&player_missions[i], mission, 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.
|
||||
|
@ -58,7 +58,7 @@ extern Mission player_mission[MISSION_MAX];
|
||||
// For mission computer.
|
||||
Mission* missions_computer(int* n, int faction, char* planet, char* system);
|
||||
// Player accepted mission - mission computer.
|
||||
void mission_accept(Mission* misn);
|
||||
void mission_accept(Mission* mission);
|
||||
|
||||
// Load/Quit.
|
||||
int missions_load(void);
|
||||
|
@ -148,6 +148,7 @@ static void toolkit_drawRect(double x, double y, double w, double h,
|
||||
glColour* c, glColour* lc);
|
||||
// Dialogues..
|
||||
static void dialogue_alertClose(char* str);
|
||||
static void dialogue_msgClose(char* str);
|
||||
static void dialogue_YesNoClose(char* str);
|
||||
static void dialogue_inputClose(char* str);
|
||||
// Secondary loop hack.
|
||||
@ -1404,6 +1405,43 @@ static void dialogue_alertClose(char* str) {
|
||||
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.
|
||||
static int yesno_result;
|
||||
static unsigned int yesno_wid = 0;
|
||||
|
@ -45,6 +45,7 @@ void window_addInput(const unsigned int wid,
|
||||
|
||||
// Popups and alerts.
|
||||
void dialogue_alert(const char* fmt, ...);
|
||||
void dialogue_msg(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, ...);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user