[Add] Introduced getListPos to get the position of the list.
This commit is contained in:
parent
07883a8a3b
commit
91cce3c8c6
@ -11,6 +11,7 @@
|
|||||||
<mission name="Cargo Freight">
|
<mission name="Cargo Freight">
|
||||||
<lua>cargo</lua>
|
<lua>cargo</lua>
|
||||||
<avail>
|
<avail>
|
||||||
|
<chance>750</chance>
|
||||||
<location>Computer</location>
|
<location>Computer</location>
|
||||||
<alliance>Neutral</alliance>
|
<alliance>Neutral</alliance>
|
||||||
<alliance>Empire United</alliance>
|
<alliance>Empire United</alliance>
|
||||||
|
28
src/land.c
28
src/land.c
@ -840,20 +840,24 @@ 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;
|
||||||
|
Mission* misn;
|
||||||
|
int pos;
|
||||||
(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;
|
if(strcmp(misn_name, "No Missions")==0) return;
|
||||||
|
|
||||||
for(i = 0; i < mission_ncomputer; i++)
|
if(dialogue_YesNo("Accept Mission",
|
||||||
if(mission_computer[i].title &&
|
"Are you sure you want to accept this mission?")) {
|
||||||
(strcmp(misn_name, mission_computer[i].title)==0)) {
|
pos = toolkit_getListPos(secondary_wid, "lstMission");
|
||||||
mission_accept(&mission_computer[i]);
|
misn = &mission_computer[pos];
|
||||||
|
mission_accept(misn);
|
||||||
|
memmove(misn, &mission_computer[pos+1],
|
||||||
|
sizeof(Mission) * (mission_ncomputer-pos-1));
|
||||||
|
mission_ncomputer--;
|
||||||
misn_genList(0);
|
misn_genList(0);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -888,8 +892,8 @@ static void misn_genList(int first) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void misn_update(char* str) {
|
static void misn_update(char* str) {
|
||||||
int i;
|
|
||||||
char* active_misn;
|
char* active_misn;
|
||||||
|
Mission* misn;
|
||||||
|
|
||||||
(void)str;
|
(void)str;
|
||||||
|
|
||||||
@ -902,14 +906,10 @@ static void misn_update(char* str) {
|
|||||||
window_disableButton(secondary_wid, "btnAcceptMission");
|
window_disableButton(secondary_wid, "btnAcceptMission");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for(i = 0; i < mission_ncomputer; i++)
|
misn = &mission_computer[toolkit_getListPos(secondary_wid, "lstMission")];
|
||||||
if(mission_computer[i].title &&
|
window_modifyText(secondary_wid, "txtReward", misn->reward);
|
||||||
(strcmp(active_misn, mission_computer[i].title)==0)) {
|
window_modifyText(secondary_wid, "txtDesc", misn->desc);
|
||||||
window_modifyText(secondary_wid, "txtReward", mission_computer[i].reward);
|
|
||||||
window_modifyText(secondary_wid, "txtDesc", mission_computer[i].desc);
|
|
||||||
window_enableButton(secondary_wid, "btnAcceptMission");
|
window_enableButton(secondary_wid, "btnAcceptMission");
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Land the player.
|
// Land the player.
|
||||||
|
29
src/menu.c
29
src/menu.c
@ -294,8 +294,8 @@ static void mission_menu_genList(int first) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void mission_menu_update(char* str) {
|
static void mission_menu_update(char* str) {
|
||||||
int i;
|
|
||||||
char* active_misn;
|
char* active_misn;
|
||||||
|
Mission* misn;
|
||||||
unsigned int wid;
|
unsigned int wid;
|
||||||
|
|
||||||
(void)str;
|
(void)str;
|
||||||
@ -309,34 +309,31 @@ static void mission_menu_update(char* str) {
|
|||||||
window_disableButton(wid, "btnAbortMission");
|
window_disableButton(wid, "btnAbortMission");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for(i = 0; i < MISSION_MAX; i++)
|
misn = &player_missions[toolkit_getListPos(wid, "lstMission")];
|
||||||
if(player_missions[i].title &&
|
window_modifyText(wid, "txtReward", misn->reward);
|
||||||
(strcmp(active_misn, player_missions[i].title)==0)) {
|
window_modifyText(wid, "txtDesc", misn->desc);
|
||||||
window_modifyText(wid, "txtReward", player_missions[i].reward);
|
|
||||||
window_modifyText(wid, "txtDesc", player_missions[i].desc);
|
|
||||||
window_enableButton(wid, "btnAbortMission");
|
window_enableButton(wid, "btnAbortMission");
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mission_menu_abort(char* str) {
|
static void mission_menu_abort(char* str) {
|
||||||
(void)str;
|
(void)str;
|
||||||
char* selected_misn;
|
char* selected_misn;
|
||||||
|
int pos;
|
||||||
unsigned int wid;
|
unsigned int wid;
|
||||||
int i;
|
Mission* misn;
|
||||||
|
|
||||||
wid = window_get("Missions");
|
wid = window_get("Missions");
|
||||||
|
|
||||||
selected_misn = toolkit_getList(wid, "lstMission");
|
selected_misn = toolkit_getList(wid, "lstMission");
|
||||||
|
|
||||||
if(dialogue_YesNo("Abort Mission", "Are you sure you want to abort this mission?"))
|
if(dialogue_YesNo("Abort Mission",
|
||||||
for(i = 0; i < MISSION_MAX; i++)
|
"Are you sure you want to abort this mission?")) {
|
||||||
if(player_missions[i].title &&
|
pos = toolkit_getListPos(wid, "lstMission");
|
||||||
(strcmp(selected_misn, player_missions[i].title)==0)) {
|
misn = &player_missions[pos];
|
||||||
// TODO: handle lost cargo..
|
mission_cleanup(misn);
|
||||||
mission_cleanup(&player_missions[i]);
|
memmove(misn, &player_missions[pos+1],
|
||||||
|
sizeof(Mission) * (MISSION_MAX-pos-1));
|
||||||
mission_menu_genList(0);
|
mission_menu_genList(0);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ int misn_loadLibs(lua_State* L) {
|
|||||||
|
|
||||||
// Run a mission function.
|
// Run a mission function.
|
||||||
int misn_run(Mission* misn, char* func) {
|
int misn_run(Mission* misn, char* func) {
|
||||||
int ret;
|
int i, ret;
|
||||||
char* err;
|
char* err;
|
||||||
|
|
||||||
cur_mission = misn;
|
cur_mission = misn;
|
||||||
@ -114,7 +114,15 @@ int misn_run(Mission* misn, char* func) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mission is finished.
|
// Mission is finished.
|
||||||
if(misn_delete) mission_cleanup(cur_mission);
|
if(misn_delete) {
|
||||||
|
mission_cleanup(cur_mission);
|
||||||
|
for(i = 0; i < MISSION_MAX; i++)
|
||||||
|
if(cur_mission == &player_missions[i]) {
|
||||||
|
memmove(&player_missions[i], &player_missions[i+1],
|
||||||
|
sizeof(Mission) * (MISSION_MAX-i-1));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
cur_mission = NULL;
|
cur_mission = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "lauxlib.h"
|
#include "lauxlib.h"
|
||||||
#include "lualib.h"
|
#include "lualib.h"
|
||||||
|
|
||||||
|
#include "rng.h"
|
||||||
#include "lephisto.h"
|
#include "lephisto.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
@ -121,7 +122,9 @@ static int mission_matchFaction(MissionData* misn, int faction) {
|
|||||||
|
|
||||||
// Generate missions for the computer - special case.
|
// Generate missions for the computer - special case.
|
||||||
Mission* missions_computer(int* n, int faction, char* planet, char* system) {
|
Mission* missions_computer(int* n, int faction, char* planet, char* system) {
|
||||||
int i, m;
|
int i, j, m;
|
||||||
|
double chance;
|
||||||
|
int rep;
|
||||||
Mission* tmp;
|
Mission* tmp;
|
||||||
MissionData* misn;
|
MissionData* misn;
|
||||||
|
|
||||||
@ -133,10 +136,17 @@ Mission* missions_computer(int* n, int faction, char* planet, char* system) {
|
|||||||
(((misn->avail.planet && strcmp(misn->avail.planet, planet)==0)) ||
|
(((misn->avail.planet && strcmp(misn->avail.planet, planet)==0)) ||
|
||||||
(misn->avail.system && (strcmp(misn->avail.system, system)==0)) ||
|
(misn->avail.system && (strcmp(misn->avail.system, system)==0)) ||
|
||||||
mission_matchFaction(misn, faction))) {
|
mission_matchFaction(misn, faction))) {
|
||||||
|
chance = (double)(misn->avail.chance % 100)/100.;
|
||||||
|
rep = misn->avail.chance/100;
|
||||||
|
|
||||||
|
for(j = 0; j < rep; j++)
|
||||||
|
// Random chance of rep appearances.
|
||||||
|
if(RNGF() > chance) {
|
||||||
tmp = realloc(tmp, sizeof(Mission) * ++m);
|
tmp = realloc(tmp, sizeof(Mission) * ++m);
|
||||||
mission_init(&tmp[m-1], misn);
|
mission_init(&tmp[m-1], misn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
(*n) = m;
|
(*n) = m;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
@ -188,6 +198,8 @@ static MissionData* mission_parse(const xmlNodePtr parent) {
|
|||||||
do {
|
do {
|
||||||
if(xml_isNode(cur, "location"))
|
if(xml_isNode(cur, "location"))
|
||||||
tmp->avail.loc = mission_location(xml_get(cur));
|
tmp->avail.loc = mission_location(xml_get(cur));
|
||||||
|
else if(xml_isNode(cur, "chance"))
|
||||||
|
tmp->avail.chance = xml_getInt(cur);
|
||||||
else if(xml_isNode(cur, "planet"))
|
else if(xml_isNode(cur, "planet"))
|
||||||
tmp->avail.planet = strdup(xml_get(cur));
|
tmp->avail.planet = strdup(xml_get(cur));
|
||||||
else if(xml_isNode(cur, "system"))
|
else if(xml_isNode(cur, "system"))
|
||||||
|
@ -23,7 +23,7 @@ typedef struct MissionData_ {
|
|||||||
// Availability.
|
// Availability.
|
||||||
struct {
|
struct {
|
||||||
int loc; // Location.
|
int loc; // Location.
|
||||||
double chance; // Chance of it appearing.
|
int chance; // Chance of it appearing.
|
||||||
|
|
||||||
// For specific cases.
|
// For specific cases.
|
||||||
char* planet;
|
char* planet;
|
||||||
|
@ -1366,6 +1366,16 @@ char* toolkit_getList(const unsigned int wid, char* name) {
|
|||||||
return wgt->dat.lst.options[wgt->dat.lst.selected];
|
return wgt->dat.lst.options[wgt->dat.lst.selected];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the position of current item in the list.
|
||||||
|
int toolkit_getListPos(const unsigned int wid, char* name) {
|
||||||
|
Widget* wgt = window_getwgt(wid, name);
|
||||||
|
|
||||||
|
if((wgt->type != WIDGET_LIST) || (wgt->dat.lst.selected == -1))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return wgt->dat.lst.selected;
|
||||||
|
}
|
||||||
|
|
||||||
// Return the focused widget.
|
// Return the focused widget.
|
||||||
static Widget* toolkit_getFocus(void) {
|
static Widget* toolkit_getFocus(void) {
|
||||||
Window* wdw;
|
Window* wdw;
|
||||||
|
@ -67,6 +67,7 @@ void window_imgColour(const unsigned int wid, char* name, glColour* colour);
|
|||||||
int window_exists(const char* wdwname);
|
int window_exists(const char* wdwname);
|
||||||
unsigned int window_get(const char* wdwname);
|
unsigned int window_get(const char* wdwname);
|
||||||
char* toolkit_getList(const unsigned int wid, char* name);
|
char* toolkit_getList(const unsigned int wid, char* name);
|
||||||
|
int toolkit_getListPos(const unsigned int wid, char* name);
|
||||||
glTexture* window_getImage(const unsigned int wid, char* name);
|
glTexture* window_getImage(const unsigned int wid, char* name);
|
||||||
char* window_getInput(const unsigned int wid, char* name);
|
char* window_getInput(const unsigned int wid, char* name);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user