mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-17 21:25:40 +00:00
(svn r15481) -Fix [NoAI]: Make sure AIs can't call functions they shouldn't call.
This commit is contained in:
parent
0dcf301d6d
commit
8e75f5244c
@ -136,6 +136,7 @@ public:
|
||||
*/
|
||||
static char *GetLastErrorString();
|
||||
|
||||
#ifndef EXPORT_SKIP
|
||||
/**
|
||||
* Get the error based on the OpenTTD StringID.
|
||||
* @note DO NOT INVOKE THIS METHOD YOURSELF!
|
||||
@ -159,6 +160,7 @@ public:
|
||||
* @param message The string representation of this error message, used for debug purposes.
|
||||
*/
|
||||
static void RegisterErrorMapString(AIErrorType ai_error_msg, const char *message);
|
||||
#endif /* EXPORT_SKIP */
|
||||
|
||||
private:
|
||||
typedef std::map<StringID, AIErrorType> AIErrorMap;
|
||||
|
@ -109,12 +109,9 @@ void SQAIError_Register(Squirrel *engine) {
|
||||
AIError::RegisterErrorMapString(AIError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE");
|
||||
AIError::RegisterErrorMapString(AIError::ERR_STATION_TOO_SPREAD_OUT, "ERR_STATION_TOO_SPREAD_OUT");
|
||||
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::GetErrorCategory, "GetErrorCategory", 1, "?");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::GetLastError, "GetLastError", 1, "?");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::GetLastErrorString, "GetLastErrorString", 1, "?");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::StringToError, "StringToError", 2, "?i");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::RegisterErrorMap, "RegisterErrorMap", 3, "?ii");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::RegisterErrorMapString, "RegisterErrorMapString", 3, "?is");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::GetErrorCategory, "GetErrorCategory", 1, "?");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::GetLastError, "GetLastError", 1, "?");
|
||||
SQAIError.DefSQStaticMethod(engine, &AIError::GetLastErrorString, "GetLastErrorString", 1, "?");
|
||||
|
||||
SQAIError.PostRegister(engine);
|
||||
}
|
||||
|
@ -87,6 +87,7 @@ public:
|
||||
*/
|
||||
static AIEvent *GetNextEvent();
|
||||
|
||||
#ifndef EXPORT_SKIP
|
||||
/**
|
||||
* Insert an event to the queue for the company.
|
||||
* @param event The event to insert.
|
||||
@ -98,6 +99,7 @@ public:
|
||||
* @note DO NOT CALL YOURSELF; leave it to the internal AI programming.
|
||||
*/
|
||||
static void FreeEventPointer();
|
||||
#endif /* EXPORT_SKIP */
|
||||
|
||||
private:
|
||||
/**
|
||||
|
@ -62,10 +62,8 @@ void SQAIEventController_Register(Squirrel *engine) {
|
||||
SQAIEventController.PreRegister(engine);
|
||||
SQAIEventController.AddConstructor<void (AIEventController::*)(), 1>(engine, "x");
|
||||
|
||||
SQAIEventController.DefSQStaticMethod(engine, &AIEventController::IsEventWaiting, "IsEventWaiting", 1, "?");
|
||||
SQAIEventController.DefSQStaticMethod(engine, &AIEventController::GetNextEvent, "GetNextEvent", 1, "?");
|
||||
SQAIEventController.DefSQStaticMethod(engine, &AIEventController::InsertEvent, "InsertEvent", 2, "?x");
|
||||
SQAIEventController.DefSQStaticMethod(engine, &AIEventController::FreeEventPointer, "FreeEventPointer", 1, "?");
|
||||
SQAIEventController.DefSQStaticMethod(engine, &AIEventController::IsEventWaiting, "IsEventWaiting", 1, "?");
|
||||
SQAIEventController.DefSQStaticMethod(engine, &AIEventController::GetNextEvent, "GetNextEvent", 1, "?");
|
||||
|
||||
SQAIEventController.PostRegister(engine);
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ class AILog : public AIObject {
|
||||
public:
|
||||
static const char *GetClassName() { return "AILog"; }
|
||||
|
||||
#ifndef EXPORT_SKIP
|
||||
/**
|
||||
* Log levels; The value is also feed to DEBUG() lvl.
|
||||
* This has no use for you, as AI writer.
|
||||
@ -41,6 +42,7 @@ public:
|
||||
int pos; //!< Current position in lines.
|
||||
int used; //!< Total amount of used log-lines.
|
||||
};
|
||||
#endif /* EXPORT_SKIP */
|
||||
|
||||
/**
|
||||
* Print an Info message to the logs.
|
||||
@ -60,11 +62,13 @@ public:
|
||||
*/
|
||||
static void Error(const char *message);
|
||||
|
||||
#ifndef EXPORT_SKIP
|
||||
/**
|
||||
* Free the log pointer.
|
||||
* @note DO NOT CALL YOURSELF; leave it to the internal AI programming.
|
||||
*/
|
||||
static void FreeLogPointer();
|
||||
#endif /* EXPORT_SKIP */
|
||||
|
||||
private:
|
||||
/**
|
||||
|
@ -4,10 +4,6 @@
|
||||
#include "ai_log.hpp"
|
||||
|
||||
namespace SQConvert {
|
||||
/* Allow enums to be used as Squirrel parameters */
|
||||
template <> AILog::AILogType GetParam(ForceType<AILog::AILogType>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AILog::AILogType)tmp; }
|
||||
template <> int Return<AILog::AILogType>(HSQUIRRELVM vm, AILog::AILogType res) { sq_pushinteger(vm, (int32)res); return 1; }
|
||||
|
||||
/* Allow AILog to be used as Squirrel parameter */
|
||||
template <> AILog *GetParam(ForceType<AILog *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AILog *)instance; }
|
||||
template <> AILog &GetParam(ForceType<AILog &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AILog *)instance; }
|
||||
@ -21,16 +17,9 @@ void SQAILog_Register(Squirrel *engine) {
|
||||
SQAILog.PreRegister(engine);
|
||||
SQAILog.AddConstructor<void (AILog::*)(), 1>(engine, "x");
|
||||
|
||||
SQAILog.DefSQConst(engine, AILog::LOG_SQ_ERROR, "LOG_SQ_ERROR");
|
||||
SQAILog.DefSQConst(engine, AILog::LOG_ERROR, "LOG_ERROR");
|
||||
SQAILog.DefSQConst(engine, AILog::LOG_SQ_INFO, "LOG_SQ_INFO");
|
||||
SQAILog.DefSQConst(engine, AILog::LOG_WARNING, "LOG_WARNING");
|
||||
SQAILog.DefSQConst(engine, AILog::LOG_INFO, "LOG_INFO");
|
||||
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::Info, "Info", 2, "?s");
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::Warning, "Warning", 2, "?s");
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::Error, "Error", 2, "?s");
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::FreeLogPointer, "FreeLogPointer", 1, "?");
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::Info, "Info", 2, "?s");
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::Warning, "Warning", 2, "?s");
|
||||
SQAILog.DefSQStaticMethod(engine, &AILog::Error, "Error", 2, "?s");
|
||||
|
||||
SQAILog.PostRegister(engine);
|
||||
}
|
||||
|
@ -185,7 +185,7 @@ public:
|
||||
* Internal function to help ChangeOrder.
|
||||
*/
|
||||
static bool _ChangeOrder();
|
||||
#endif
|
||||
#endif /* DOXYGEN_SKIP */
|
||||
|
||||
/**
|
||||
* Changes the order flags of the given order.
|
||||
|
@ -64,7 +64,7 @@ public:
|
||||
* Internal function to help BuildTunnel in case of road.
|
||||
*/
|
||||
static bool _BuildTunnelRoad2();
|
||||
#endif
|
||||
#endif /* DOXYGEN_SKIP */
|
||||
|
||||
/**
|
||||
* Builds a tunnel starting at start. The direction of the tunnel depends
|
||||
|
@ -86,10 +86,10 @@ BEGIN {
|
||||
/^( *)private/ { if (cls_level == 1) public = "false"; next; }
|
||||
|
||||
# Ignore special doxygen blocks
|
||||
/^#ifndef DOXYGEN_SKIP/ { doxygen_skip = "next"; next; }
|
||||
/^#ifdef DOXYGEN_SKIP/ { doxygen_skip = "true"; next; }
|
||||
/^#endif/ { doxygen_skip = "false"; next; }
|
||||
/^#else/ {
|
||||
/^#ifndef DOXYGEN_SKIP/ { doxygen_skip = "next"; next; }
|
||||
/^#ifdef DOXYGEN_SKIP/ { doxygen_skip = "true"; next; }
|
||||
/^#endif \/\* DOXYGEN_SKIP \*\// { doxygen_skip = "false"; next; }
|
||||
/^#else/ {
|
||||
if (doxygen_skip == "next") {
|
||||
doxygen_skip = "true";
|
||||
} else {
|
||||
@ -99,6 +99,11 @@ BEGIN {
|
||||
}
|
||||
{ if (doxygen_skip == "true") next }
|
||||
|
||||
# Ignore functions that shouldn't be exported to squirrel
|
||||
/^#ifndef EXPORT_SKIP/ { export_skip = "true"; next; }
|
||||
/^#endif \/\* EXPORT_SKIP \*\// { export_skip = "false"; next; }
|
||||
{ if (export_skip == "true") next }
|
||||
|
||||
# Ignore the comments
|
||||
/^#/ { next; }
|
||||
/\/\*.*\*\// { comment = "false"; next; }
|
||||
|
Loading…
Reference in New Issue
Block a user