[Fix] toolkit module for lua and accpet mission bug.

This commit is contained in:
Allanis 2013-04-03 19:38:00 +01:00
parent 4f93fba024
commit 3da2a4086b
7 changed files with 124 additions and 14 deletions

View File

@ -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.

View File

@ -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) {

View File

@ -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;

View File

@ -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.

View File

@ -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);

View File

@ -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;

View File

@ -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, ...);