diff options
Diffstat (limited to 'ai')
-rw-r--r-- | ai/ai.c | 18 | ||||
-rw-r--r-- | ai/ai.h | 1 |
2 files changed, 16 insertions, 3 deletions
@@ -8,6 +8,7 @@ #include "../debug.h" #include "ai.h" #include "default/default.h" +#include "../string.h" /* Here we define the events */ #define DEF_EVENTS @@ -200,8 +201,6 @@ void AI_RunGameLoop(void) #ifdef GPMI -void (*ottd_GetNextAIData)(char **library, char **param); - void AI_ShutdownAIControl(bool with_error) { if (_ai.gpmi_mod != NULL) @@ -215,6 +214,9 @@ void AI_ShutdownAIControl(bool with_error) } } +void (*ottd_GetNextAIData)(char **library, char **param); +void (*ottd_SetAIParam)(char *param); + void AI_LoadAIControl(void) { /* Load module */ @@ -233,10 +235,13 @@ void AI_LoadAIControl(void) /* Now link all the functions */ { ottd_GetNextAIData = gpmi_pkg_resolve(_ai.gpmi_pkg, "ottd_GetNextAIData"); + ottd_SetAIParam = gpmi_pkg_resolve(_ai.gpmi_pkg, "ottd_SetAIParam"); - if (ottd_GetNextAIData == NULL) + if (ottd_GetNextAIData == NULL || ottd_SetAIParam == NULL) AI_ShutdownAIControl(true); } + + ottd_SetAIParam(_ai.gpmi_param); } #endif /* GPMI */ @@ -298,6 +303,9 @@ void AI_Initialize(void) { bool tmp_ai_network_client = _ai.network_client; bool tmp_ai_gpmi = _ai.gpmi; +#ifdef GPMI + char *tmp_ai_gpmi_param = strdup(_ai.gpmi_param); +#endif /* GPMI */ memset(&_ai, 0, sizeof(_ai)); memset(&_ai_player, 0, sizeof(_ai_player)); @@ -306,6 +314,10 @@ void AI_Initialize(void) _ai.network_playas = OWNER_SPECTATOR; _ai.enabled = true; _ai.gpmi = tmp_ai_gpmi; +#ifdef GPMI + ttd_strlcpy(_ai.gpmi_param, tmp_ai_gpmi_param, sizeof(_ai.gpmi_param)); + free(tmp_ai_gpmi_param); +#endif /* GPMI */ } /** @@ -43,6 +43,7 @@ typedef struct AIStruct { #ifdef GPMI gpmi_module *gpmi_mod; //! The module controller for GPMI based AIs (Event-handling) gpmi_package *gpmi_pkg; //! The package controller for GPMI based AIs (Functions) + char gpmi_param[128]; //! The params given to the gpmi_mod #endif /* GPMI */ } AIStruct; |