From 8deb1305726966b3b583865dec1ba7ba1327d8cb Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Tue, 3 Dec 2013 00:11:26 +0100 Subject: Changed char[] to std::string in restext Experimental changes --- src/script/script.cpp | 29 ++++++++++++++++------------- src/script/script.h | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index ca6ce25..5cd21f9 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -22,6 +22,7 @@ #include "common/global.h" #include "common/iman.h" #include "common/restext.h" +#include "common/stringutils.h" #include "graphics/engine/terrain.h" #include "graphics/engine/water.h" @@ -3898,9 +3899,9 @@ bool CScript::Continue(const Event &event) if ( m_error != 0 && m_errMode == ERM_STOP ) { - char s[100]; + std::string s; GetError(s); - m_main->GetDisplayText()->DisplayText(s, m_object, 10.0f, Ui::TT_ERROR); + m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR); } m_engine->SetPause(true); // gives pause return true; @@ -3931,9 +3932,9 @@ bool CScript::Continue(const Event &event) if ( m_error != 0 && m_errMode == ERM_STOP ) { - char s[100]; + std::string s; GetError(s); - m_main->GetDisplayText()->DisplayText(s, m_object, 10.0f, Ui::TT_ERROR); + m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR); } return true; } @@ -3973,9 +3974,9 @@ bool CScript::Step(const Event &event) if ( m_error != 0 && m_errMode == ERM_STOP ) { - char s[100]; + std::string s; GetError(s); - m_main->GetDisplayText()->DisplayText(s, m_object, 10.0f, Ui::TT_ERROR); + m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR); } return true; } @@ -4347,27 +4348,27 @@ int CScript::GetError() // Returns the text of the error. -void CScript::GetError(char* buffer) +void CScript::GetError(std::string& error) { if ( m_error == 0 ) { - buffer[0] = 0; + error.clear(); } else { if ( m_error == ERR_OBLIGATORYTOKEN ) { - char s[100]; + std::string s; GetResource(RES_ERR, m_error, s); - sprintf(buffer, s, m_token); + error = StrUtils::Format(s.c_str(), m_token); } else if ( m_error < 1000 ) { - GetResource(RES_ERR, m_error, buffer); + GetResource(RES_ERR, m_error, error); } else { - GetResource(RES_CBOT, m_error, buffer); + GetResource(RES_CBOT, m_error, error); } } } @@ -4385,7 +4386,9 @@ void CScript::New(Ui::CEdit* edit, const char* name) char *sf; int cursor1, cursor2, len, i, j; - GetResource(RES_TEXT, RT_SCRIPT_NEW, res); + std::string resStr; + GetResource(RES_TEXT, RT_SCRIPT_NEW, resStr); + strcpy(res, resStr.c_str()); if ( name[0] == 0 ) strcpy(text, res); else strcpy(text, name); diff --git a/src/script/script.h b/src/script/script.h index 7fd5555..3641dd9 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -74,7 +74,7 @@ public: bool IntroduceVirus(); int GetError(); - void GetError(char* buffer); + void GetError(std::string& error); void New(Ui::CEdit* edit, const char* name); bool SendScript(const char* text); -- cgit v1.2.3-1-g7c22 From f1e267b18e89efde079421b8907f8f793998da3e Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 25 Dec 2013 19:13:15 +0100 Subject: Fixed bug #240 - CAuto in produce() --- src/script/script.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index 5cd21f9..1a70699 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1916,7 +1916,14 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user result->SetValInt(1); // error return true; } - object->SetActivity(false); + object->SetActivity(true); + + CAuto* automat = object->GetAuto(); + if (automat != nullptr) + { + automat->Init(); + } + script->m_main->CreateShortcuts(); } else if ( type == OBJECT_FLAGb || -- cgit v1.2.3-1-g7c22 From 0d31f59b124658155bf93ca78eb427a98c664572 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Thu, 26 Dec 2013 18:50:05 +0100 Subject: .takeoff() for SpaceShip (#265) --- src/script/cbottoken.cpp | 9 ++++++--- src/script/script.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ src/script/script.h | 1 + 3 files changed, 56 insertions(+), 3 deletions(-) (limited to 'src/script') diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 505228e..9f99752 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -253,10 +253,11 @@ std::string GetHelpFilename(const char *token) if ( strcmp(token, "getresearchenable" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/getresen.txt"); if ( strcmp(token, "getresearchdone" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/getresdo.txt"); if ( strcmp(token, "retobject" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/retobj.txt"); - if ( strcmp(token, "progfunc" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt"); - if ( strcmp(token, "busy" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/busy.txt"); - if ( strcmp(token, "factory" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt"); + if ( strcmp(token, "progfunc" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt"); + if ( strcmp(token, "busy" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/busy.txt"); + if ( strcmp(token, "takeoff" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/takeoff.txt"); if ( strcmp(token, "research" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/research.txt"); + if ( strcmp(token, "factory" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt"); if ( strcmp(token, "destroy" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/destroy.txt"); if ( strcmp(token, "search" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/search.txt"); if ( strcmp(token, "radar" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/radar.txt"); @@ -384,6 +385,7 @@ bool IsFunction(const char *token) if ( strcmp(token, "busy" ) == 0 ) return true; if ( strcmp(token, "factory" ) == 0 ) return true; if ( strcmp(token, "research" ) == 0 ) return true; + if ( strcmp(token, "takeoff" ) == 0 ) return true; if ( strcmp(token, "destroy" ) == 0 ) return true; if ( strcmp(token, "search" ) == 0 ) return true; if ( strcmp(token, "radar" ) == 0 ) return true; @@ -477,6 +479,7 @@ const char* GetHelpText(const char *token) if ( strcmp(token, "busy" ) == 0 ) return "object.busy ( );"; if ( strcmp(token, "factory" ) == 0 ) return "object.factory ( cat, program );"; if ( strcmp(token, "research" ) == 0 ) return "object.research ( type );"; + if ( strcmp(token, "takeoff" ) == 0 ) return "object.takeoff ( );"; if ( strcmp(token, "destroy" ) == 0 ) return "object.destroy ( );"; if ( strcmp(token, "search" ) == 0 ) return "search ( );"; if ( strcmp(token, "radar" ) == 0 ) return "radar ( cat, angle, focus, min, max, sens );"; diff --git a/src/script/script.cpp b/src/script/script.cpp index 1a70699..05e2626 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -38,6 +38,7 @@ #include "object/auto/auto.h" #include "object/auto/autofactory.h" +#include "object/auto/autobase.h" #include "physics/physics.h" @@ -901,6 +902,54 @@ bool CScript::rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& return true; } +// Instruction "object.takeoff()" + +bool CScript::rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception) +{ + Error err; + + exception = 0; + + CBotVar* classVars = thisclass->GetItemList(); // "category" + ObjectType thisType = static_cast(classVars->GetValInt()); + classVars = classVars->GetNext(); // "position" + classVars = classVars->GetNext(); // "orientation" + classVars = classVars->GetNext(); // "pitch" + classVars = classVars->GetNext(); // "roll" + classVars = classVars->GetNext(); // "energyLevel" + classVars = classVars->GetNext(); // "shieldLevel" + classVars = classVars->GetNext(); // "temperature" + classVars = classVars->GetNext(); // "altitude" + classVars = classVars->GetNext(); // "lifeTime" + classVars = classVars->GetNext(); // "material" + classVars = classVars->GetNext(); // "energyCell" + classVars = classVars->GetNext(); // "load" + classVars = classVars->GetNext(); // "id" + int rank = classVars->GetValInt(); + CObject* center = CObjectManager::GetInstancePointer()->SearchInstance(rank); + CAuto* automat = center->GetAuto(); + + if ( thisType == OBJECT_BASE ) + { + err = (static_cast(automat))->TakeOff(false); + } else + err = ERR_WRONG_OBJ; + + if ( err != ERR_OK ) + { + result->SetValInt(err); // return error +//TODO: if ( script->m_errMode == ERM_STOP ) + if( true ) + { + exception = err; + return false; + } + return true; + } + + return true; +} + // Compilation of the instruction "delete(rank[, exploType[, force]])". CBotTypResult CScript::cDelete(CBotVar* &var, void* user) diff --git a/src/script/script.h b/src/script/script.h index 3641dd9..9d8d372 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -200,6 +200,7 @@ public: static bool rBusy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception); static bool rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception); static bool rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception); + static bool rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception); static bool rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception); private: -- cgit v1.2.3-1-g7c22 From dc81cda4b1f27af6fe8abcd566ffac03255f2642 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 29 Dec 2013 12:08:59 +0100 Subject: Cleaned up creating objects --- src/script/script.cpp | 165 +++----------------------------------------------- 1 file changed, 7 insertions(+), 158 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index 05e2626..fbf7276 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1870,52 +1870,10 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user } } - if ( type == OBJECT_FRET || - type == OBJECT_STONE || - type == OBJECT_URANIUM || - type == OBJECT_METAL || - type == OBJECT_POWER || - type == OBJECT_ATOMIC || - type == OBJECT_BULLET || - type == OBJECT_BBOX || - type == OBJECT_KEYa || - type == OBJECT_KEYb || - type == OBJECT_KEYc || - type == OBJECT_KEYd || - type == OBJECT_TNT || - type == OBJECT_SCRAP1 || - type == OBJECT_SCRAP2 || - type == OBJECT_SCRAP3 || - type == OBJECT_SCRAP4 || - type == OBJECT_SCRAP5 || - type == OBJECT_BOMB || - type == OBJECT_WAYPOINT || - type == OBJECT_SHOW || - type == OBJECT_WINFIRE || - type == OBJECT_BAG || - type == OBJECT_MARKPOWER || - type == OBJECT_MARKSTONE || - type == OBJECT_MARKURANIUM || - type == OBJECT_MARKKEYa || - type == OBJECT_MARKKEYb || - type == OBJECT_MARKKEYc || - type == OBJECT_MARKKEYd || - type == OBJECT_EGG ) - { - object = new CObject(); - if ( !object->CreateResource(pos, angle, type) ) - { - delete object; - result->SetValInt(1); // error - return true; - } - object->SetActivity(false); - } - else if ( type == OBJECT_MOTHER || - type == OBJECT_ANT || - type == OBJECT_SPIDER || - type == OBJECT_BEE || - type == OBJECT_WORM ) + if ( type == OBJECT_ANT || + type == OBJECT_SPIDER || + type == OBJECT_BEE || + type == OBJECT_WORM ) { CObject* egg; @@ -1933,124 +1891,15 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user delete egg; } object->SetActivity(false); - } - else if ( type == OBJECT_PORTICO || - type == OBJECT_BASE || - type == OBJECT_DERRICK || - type == OBJECT_FACTORY || - type == OBJECT_STATION || - type == OBJECT_CONVERT || - type == OBJECT_REPAIR || - type == OBJECT_DESTROYER|| - type == OBJECT_TOWER || - type == OBJECT_NEST || - type == OBJECT_RESEARCH || - type == OBJECT_RADAR || - type == OBJECT_INFO || - type == OBJECT_ENERGY || - type == OBJECT_LABO || - type == OBJECT_NUCLEAR || - type == OBJECT_PARA || - type == OBJECT_SAFE || - type == OBJECT_HUSTON || - type == OBJECT_TARGET1 || - type == OBJECT_TARGET2 || - type == OBJECT_START || - type == OBJECT_END ) - { - object = new CObject(); - if ( !object->CreateBuilding(pos, angle, 0, type) ) + } else { + object = CObjectManager::GetInstancePointer()->CreateObject(pos, angle, type, power); + if ( object == nullptr ) { - delete object; result->SetValInt(1); // error return true; } - object->SetActivity(true); - - CAuto* automat = object->GetAuto(); - if (automat != nullptr) - { - automat->Init(); - } - script->m_main->CreateShortcuts(); } - else if ( type == OBJECT_FLAGb || - type == OBJECT_FLAGr || - type == OBJECT_FLAGg || - type == OBJECT_FLAGy || - type == OBJECT_FLAGv ) - { - object = new CObject(); - if ( !object->CreateFlag(pos, angle, type) ) - { - delete object; - result->SetValInt(1); // error - return true; - } - object->SetActivity(false); - } - else if ( type == OBJECT_HUMAN || - type == OBJECT_TECH || - type == OBJECT_TOTO || - type == OBJECT_MOBILEfa || - type == OBJECT_MOBILEta || - type == OBJECT_MOBILEwa || - type == OBJECT_MOBILEia || - type == OBJECT_MOBILEfc || - type == OBJECT_MOBILEtc || - type == OBJECT_MOBILEwc || - type == OBJECT_MOBILEic || - type == OBJECT_MOBILEfi || - type == OBJECT_MOBILEti || - type == OBJECT_MOBILEwi || - type == OBJECT_MOBILEii || - type == OBJECT_MOBILEfs || - type == OBJECT_MOBILEts || - type == OBJECT_MOBILEws || - type == OBJECT_MOBILEis || - type == OBJECT_MOBILErt || - type == OBJECT_MOBILErc || - type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs || - type == OBJECT_MOBILEsa || - type == OBJECT_MOBILEtg || - type == OBJECT_MOBILEft || - type == OBJECT_MOBILEtt || - type == OBJECT_MOBILEwt || - type == OBJECT_MOBILEit || - type == OBJECT_MOBILEdr || - type == OBJECT_APOLLO2 ) - { - object = new CObject(); - if ( !object->CreateVehicle(pos, angle, type, power, false, false) ) - { - delete object; - result->SetValInt(1); // error - return true; - } - object->UpdateMapping(); - object->SetRange(30.0f); - object->SetZoom(0, 1.0f); - CPhysics* physics = object->GetPhysics(); - if ( physics != 0 ) - { - physics->SetFreeze(false); // can move - } - object->SetLock(false); // vehicle useable - // SetManual will affect bot speed - if (type == OBJECT_MOBILEdr) - { - object->SetManual(true); - } - object->SetActivity(true); - script->m_main->CreateShortcuts(); - } - else - { - result->SetValInt(1); // impossible - return true; - } if (name[0] != 0) { -- cgit v1.2.3-1-g7c22 From a36450a6dae20912ba89a9c49e8b951a20a32bfb Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 29 Dec 2013 15:03:21 +0100 Subject: Added tool= i drive= --- src/script/cmdtoken.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++++++-- src/script/cmdtoken.h | 6 ++++ 2 files changed, 83 insertions(+), 3 deletions(-) (limited to 'src/script') diff --git a/src/script/cmdtoken.cpp b/src/script/cmdtoken.cpp index 69df68b..4508459 100644 --- a/src/script/cmdtoken.cpp +++ b/src/script/cmdtoken.cpp @@ -535,11 +535,11 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_INFO ) return "ExchangePost"; if ( type == OBJECT_ENERGY ) return "PowerPlant"; if ( type == OBJECT_LABO ) return "AutoLab"; -#if _GERMAN | _WG +/* TODO: #if _GERMAN | _WG if ( type == OBJECT_NUCLEAR ) return "FuelCellPlant"; -#else +#else */ if ( type == OBJECT_NUCLEAR ) return "NuclearPlant"; -#endif +/* #endif */ if ( type == OBJECT_PARA ) return "PowerCaptor"; if ( type == OBJECT_SAFE ) return "Vault"; if ( type == OBJECT_HUSTON ) return "Houston"; @@ -800,6 +800,62 @@ const char* GetCamera(Gfx::CameraType type) return "BACK"; } +// Returns the type of drive. + +DriveType GetDrive(char *line, int rank) +{ + char* p; + + p = SearchArg(line, rank); + if ( *p == 0 ) return DRIVE_OTHER; + + if ( Cmd(p, "Wheeled" ) ) return DRIVE_WHEELED; + if ( Cmd(p, "Tracked" ) ) return DRIVE_TRACKED; + if ( Cmd(p, "Winged" ) ) return DRIVE_WINGED; + if ( Cmd(p, "Legged" ) ) return DRIVE_LEGGED; + + return DRIVE_OTHER; +} + +// Returns the name of a drive. + +const char* GetDrive(DriveType type) +{ + if ( type == DRIVE_WHEELED ) return "Wheeled"; + if ( type == DRIVE_TRACKED ) return "Tracked"; + if ( type == DRIVE_WINGED ) return "Winged"; + if ( type == DRIVE_LEGGED ) return "Legged"; + return "Other"; +} + +// Returns the type of tool. + +ToolType GetTool(char *line, int rank) +{ + char* p; + + p = SearchArg(line, rank); + if ( *p == 0 ) return TOOL_OTHER; + + if ( Cmd(p, "Grabber" ) ) return TOOL_GRABBER; + if ( Cmd(p, "Sniffer" ) ) return TOOL_SNIFFER; + if ( Cmd(p, "Shooter" ) ) return TOOL_SHOOTER; + if ( Cmd(p, "OrgaShooter" ) ) return TOOL_ORGASHOOTER; + + return TOOL_OTHER; +} + +// Returns the name of a tool. + +const char* GetTool(ToolType type) +{ + if ( type == TOOL_GRABBER ) return "Grabber"; + if ( type == TOOL_SNIFFER ) return "Sniffer"; + if ( type == TOOL_SHOOTER ) return "Shooter"; + if ( type == TOOL_ORGASHOOTER ) return "OrgaShooter"; + return "Other"; +} + // Returns an integer. int OpInt(char *line, const char *op, int def) @@ -887,6 +943,24 @@ Gfx::CameraType OpCamera(char *line, const char *op) return GetCamera(line, 0); } +// Returns the type of drive. + +DriveType OpDrive(char *line, const char *op) +{ + line = SearchOp(line, op); + if ( *line == 0 ) return DRIVE_OTHER; + return GetDrive(line, 0); +} + +// Returns the type of tool. + +ToolType OpTool(char *line, const char *op) +{ + line = SearchOp(line, op); + if ( *line == 0 ) return TOOL_OTHER; + return GetTool(line, 0); +} + // Returns the type of a building. int OpBuild(char *line, const char *op) diff --git a/src/script/cmdtoken.h b/src/script/cmdtoken.h index fe831f1..24b592f 100644 --- a/src/script/cmdtoken.h +++ b/src/script/cmdtoken.h @@ -45,6 +45,10 @@ extern int GetResearch(char *line, int rank); extern Gfx::PyroType GetPyro(char *line, int rank); extern Gfx::CameraType GetCamera(char *line, int rank); extern const char* GetCamera(Gfx::CameraType type); +extern DriveType GetDrive(char *line, int rank); +extern const char* GetDrive(DriveType type); +extern ToolType GetTool(char *line, int rank); +extern const char* GetTool(ToolType type); extern int OpInt(char *line, const char *op, int def); extern float OpFloat(char *line, const char *op, float def); @@ -55,6 +59,8 @@ extern Gfx::EngineObjectType OpTypeTerrain(char *line, const char *op, Gfx::Engi extern int OpResearch(char *line, const char *op); extern Gfx::PyroType OpPyro(char *line, const char *op); extern Gfx::CameraType OpCamera(char *line, const char *op); +extern DriveType OpDrive(char *line, const char *op); +extern ToolType OpTool(char *line, const char *op); extern int OpBuild(char *line, const char *op); extern Math::Vector OpPos(char *line, const char *op); extern Math::Vector OpDir(char *line, const char *op); -- cgit v1.2.3-1-g7c22 From 12e17224b37d7db52545c00fb75c0322e0e5afad Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 29 Dec 2013 16:31:32 +0100 Subject: Added nullptr shecks to object.factory() Trying to fix #275 --- src/script/script.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index fbf7276..0518479 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -680,10 +680,23 @@ bool CScript::rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& e classVars = classVars->GetNext(); // "id" int rank = classVars->GetValInt(); CObject* factory = CObjectManager::GetInstancePointer()->SearchInstance(rank); - CAutoFactory* automat = static_cast(factory->GetAuto()); + if (factory == nullptr) { + exception = ERR_GENERIC; + result->SetValInt(ERR_GENERIC); + CLogger::GetInstancePointer()->Error("in object.factory() - factory is nullptr"); + return false; + } if ( thisType == OBJECT_FACTORY ) { + CAutoFactory* automat = static_cast(factory->GetAuto()); + if(automat == nullptr) { + exception = ERR_GENERIC; + result->SetValInt(ERR_GENERIC); + CLogger::GetInstancePointer()->Error("in object.factory() - automat is nullptr"); + return false; + } + bool bEnable = false; if ( type == OBJECT_MOBILEwa ) -- cgit v1.2.3-1-g7c22 From 4a237f5925eb0d371e097416b17dd5e919cd2258 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Tue, 31 Dec 2013 12:58:45 +0100 Subject: CPauseManager --- src/script/script.cpp | 11 ++++++----- src/script/script.h | 3 +++ 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index 0518479..0b3eec4 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -3423,6 +3423,7 @@ CScript::CScript(CObject* object, CTaskManager** secondaryTask) m_secondaryTask = secondaryTask; m_interface = m_main->GetInterface(); + m_pause = CPauseManager::GetInstancePointer(); m_ipf = CBOT_IPF; m_errMode = ERM_STOP; @@ -3821,12 +3822,12 @@ bool CScript::Continue(const Event &event) GetError(s); m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR); } - m_engine->SetPause(true); // gives pause + m_pause->SetPause(PAUSE_EDITOR); // gives pause return true; } if ( !m_bContinue ) { - m_engine->SetPause(true); // gives pause + m_pause->SetPause(PAUSE_EDITOR); // gives pause } } @@ -3869,9 +3870,9 @@ bool CScript::Step(const Event &event) if ( !m_bRun ) return true; if ( !m_bStepMode ) return false; - m_engine->SetPause(false); + // ??? m_engine->SetPause(false); // TODO: m_app StepSimulation??? m_engine->StepSimulation(0.01f); // advance of 10ms - m_engine->SetPause(true); + // ??? m_engine->SetPause(true); m_event = event; @@ -3901,7 +3902,7 @@ bool CScript::Step(const Event &event) if ( m_bContinue ) // instuction "move", "goto", etc. ? { - m_engine->SetPause(false); // removes the pause + m_pause->ClearPause(); // removes the pause } return false; } diff --git a/src/script/script.h b/src/script/script.h index 9d8d372..177d40a 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -24,6 +24,8 @@ #include "common/event.h" +#include "app/pausemanager.h" + #include "CBot/CBotDll.h" #include @@ -217,6 +219,7 @@ protected: CTaskManager* m_primaryTask; CTaskManager** m_secondaryTask; CObject* m_object; + CPauseManager* m_pause; int m_ipf; // number of instructions/second int m_errMode; // what to do in case of error -- cgit v1.2.3-1-g7c22 From 3d7017525bfe6563dc7cf93f5b1788e86bd98ce8 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Tue, 31 Dec 2013 19:09:54 +0100 Subject: Added camerafocus() for changing camera --- src/script/cbottoken.cpp | 3 +++ src/script/script.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/script/script.h | 2 ++ 3 files changed, 49 insertions(+), 1 deletion(-) (limited to 'src/script') diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 9f99752..81219df 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -334,6 +334,7 @@ std::string GetHelpFilename(const char *token) if ( strcmp(token, "penup" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/penup.txt"); if ( strcmp(token, "pencolor" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/pencolor.txt"); if ( strcmp(token, "penwidth" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/penwidth.txt"); + if ( strcmp(token, "camerafocus" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/camerafocus.txt"); if ( strcmp(token, "extern" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/extern.txt"); if ( strcmp(token, "class" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/class.txt"); if ( strcmp(token, "static" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/static.txt"); @@ -441,6 +442,7 @@ bool IsFunction(const char *token) if ( strcmp(token, "penup" ) == 0 ) return true; if ( strcmp(token, "pencolor" ) == 0 ) return true; if ( strcmp(token, "penwidth" ) == 0 ) return true; + if ( strcmp(token, "camerafocus" ) == 0 ) return true; if ( strcmp(token, "sizeof" ) == 0 ) return true; return false; } @@ -535,6 +537,7 @@ const char* GetHelpText(const char *token) if ( strcmp(token, "penup" ) == 0 ) return "penup ( );"; if ( strcmp(token, "pencolor" ) == 0 ) return "pencolor ( color );"; if ( strcmp(token, "penwidth" ) == 0 ) return "penwidth ( width );"; + if ( strcmp(token, "camerafocus") == 0 ) return "camerafocus ( object );"; return ""; } diff --git a/src/script/script.cpp b/src/script/script.cpp index 0b3eec4..6fcd883 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1639,7 +1639,7 @@ CBotTypResult CScript::cCanBuild(CBotVar* &var, void* user) return CBotTypResult(CBotTypBoolean); } -// Instruction "canbuid ( category );" +// Instruction "canbuild ( category );" // returns true if this building can be built bool CScript::rCanBuild(CBotVar* var, CBotVar* result, int& exception, void* user) @@ -3407,6 +3407,47 @@ bool CScript::rPenWidth(CBotVar* var, CBotVar* result, int& exception, void* use return true; } +// Compilation of the instruction with one object parameter + +CBotTypResult CScript::cOneObject(CBotVar* &var, void* user) +{ + if ( var == 0 ) return CBotTypResult(CBotErrLowParam); + var = var->GetNext(); + if ( var == 0 ) return CBotTypResult(CBotTypFloat); + + return CBotTypResult(CBotErrOverParam); +} + +// Instruction "camerafocus(object)". + +bool CScript::rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void* user) +{ + CScript* script = (static_cast(user))->GetRunScript(); + + CBotVar* classVars = var->GetItemList(); // "category" + classVars = classVars->GetNext(); // "position" + classVars = classVars->GetNext(); // "orientation" + classVars = classVars->GetNext(); // "pitch" + classVars = classVars->GetNext(); // "roll" + classVars = classVars->GetNext(); // "energyLevel" + classVars = classVars->GetNext(); // "shieldLevel" + classVars = classVars->GetNext(); // "temperature" + classVars = classVars->GetNext(); // "altitude" + classVars = classVars->GetNext(); // "lifeTime" + classVars = classVars->GetNext(); // "material" + classVars = classVars->GetNext(); // "energyCell" + classVars = classVars->GetNext(); // "load" + classVars = classVars->GetNext(); // "id" + int rank = classVars->GetValInt(); + CObject* object = CObjectManager::GetInstancePointer()->SearchInstance(rank); + + script->m_main->SelectObject(object, false); + + result->SetValInt(ERR_OK); + exception = ERR_OK; + return true; +} + // Object's constructor. @@ -3507,6 +3548,8 @@ void CScript::InitFonctions() CBotProgram::AddFunction("penup", rPenUp, CScript::cNull); CBotProgram::AddFunction("pencolor", rPenColor, CScript::cOneFloat); CBotProgram::AddFunction("penwidth", rPenWidth, CScript::cOneFloat); + + CBotProgram::AddFunction("camerafocus", rCameraFocus, CScript::cOneObject); CBotProgram::AddFunction("canbuild", rCanBuild, CScript::cCanBuild); CBotProgram::AddFunction("build", rBuild, CScript::cOneFloat); diff --git a/src/script/script.h b/src/script/script.h index 177d40a..afb89c8 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -128,6 +128,7 @@ private: static CBotTypResult cPenDown(CBotVar* &var, void* user); static CBotTypResult cOnePoint(CBotVar* &var, void* user); static CBotTypResult cPoint(CBotVar* &var, void* user); + static CBotTypResult cOneObject(CBotVar* &var, void* user); static bool rSin(CBotVar* var, CBotVar* result, int& exception, void* user); @@ -192,6 +193,7 @@ private: static bool rPenUp(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rPenColor(CBotVar* var, CBotVar* result, int& exception, void* user); static bool rPenWidth(CBotVar* var, CBotVar* result, int& exception, void* user); + static bool rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void* user); public: static CBotTypResult cBusy(CBotVar* thisclass, CBotVar* &var); -- cgit v1.2.3-1-g7c22 From 90437d1765eaf8b17cb9575632cb95739cfe80c2 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 1 Jan 2014 16:45:08 +0100 Subject: Fixed two bugs in dc81cda4b1f27af6fe8abcd566ffac03255f2642 * win/end scene animations * produce() was producing empty cells --- src/script/script.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index 6fcd883..1a26e62 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1905,6 +1905,7 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user } object->SetActivity(false); } else { + if ((type == OBJECT_POWER || type == OBJECT_ATOMIC) && power == -1.0f) power = 1.0f; object = CObjectManager::GetInstancePointer()->CreateObject(pos, angle, type, power); if ( object == nullptr ) { -- cgit v1.2.3-1-g7c22 From 59935b470674ae26342fd4145f9cba85a1cd9443 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 1 Jan 2014 17:33:19 +0100 Subject: Changed comments in ObjectType to be object categories; removed unused SEAWEED --- src/script/cmdtoken.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/script') diff --git a/src/script/cmdtoken.cpp b/src/script/cmdtoken.cpp index 4508459..bc3ed9f 100644 --- a/src/script/cmdtoken.cpp +++ b/src/script/cmdtoken.cpp @@ -238,16 +238,6 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Mine" ) ) return OBJECT_BOMB; if ( Cmd(p, "Firework" ) ) return OBJECT_WINFIRE; if ( Cmd(p, "Bag" ) ) return OBJECT_BAG; - if ( Cmd(p, "Greenery10" ) ) return OBJECT_PLANT10; - if ( Cmd(p, "Greenery11" ) ) return OBJECT_PLANT11; - if ( Cmd(p, "Greenery12" ) ) return OBJECT_PLANT12; - if ( Cmd(p, "Greenery13" ) ) return OBJECT_PLANT13; - if ( Cmd(p, "Greenery14" ) ) return OBJECT_PLANT14; - if ( Cmd(p, "Greenery15" ) ) return OBJECT_PLANT15; - if ( Cmd(p, "Greenery16" ) ) return OBJECT_PLANT16; - if ( Cmd(p, "Greenery17" ) ) return OBJECT_PLANT17; - if ( Cmd(p, "Greenery18" ) ) return OBJECT_PLANT18; - if ( Cmd(p, "Greenery19" ) ) return OBJECT_PLANT19; if ( Cmd(p, "Greenery0" ) ) return OBJECT_PLANT0; if ( Cmd(p, "Greenery1" ) ) return OBJECT_PLANT1; if ( Cmd(p, "Greenery2" ) ) return OBJECT_PLANT2; @@ -258,6 +248,16 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Greenery7" ) ) return OBJECT_PLANT7; if ( Cmd(p, "Greenery8" ) ) return OBJECT_PLANT8; if ( Cmd(p, "Greenery9" ) ) return OBJECT_PLANT9; + if ( Cmd(p, "Greenery10" ) ) return OBJECT_PLANT10; + if ( Cmd(p, "Greenery11" ) ) return OBJECT_PLANT11; + if ( Cmd(p, "Greenery12" ) ) return OBJECT_PLANT12; + if ( Cmd(p, "Greenery13" ) ) return OBJECT_PLANT13; + if ( Cmd(p, "Greenery14" ) ) return OBJECT_PLANT14; + if ( Cmd(p, "Greenery15" ) ) return OBJECT_PLANT15; + if ( Cmd(p, "Greenery16" ) ) return OBJECT_PLANT16; + if ( Cmd(p, "Greenery17" ) ) return OBJECT_PLANT17; + if ( Cmd(p, "Greenery18" ) ) return OBJECT_PLANT18; + if ( Cmd(p, "Greenery19" ) ) return OBJECT_PLANT19; if ( Cmd(p, "Tree0" ) ) return OBJECT_TREE0; if ( Cmd(p, "Tree1" ) ) return OBJECT_TREE1; if ( Cmd(p, "Tree2" ) ) return OBJECT_TREE2; -- cgit v1.2.3-1-g7c22 From d8555866747d8624debf52620605d90890e98c15 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 11 Jan 2014 17:57:31 +0100 Subject: Fixed a bug from 59935b470674ae26342fd4145f9cba85a1cd9443 Cmd() now checks if length of token we're looking for is equal to token we've found --- src/script/cmdtoken.cpp | 89 ++++++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 41 deletions(-) (limited to 'src/script') diff --git a/src/script/cmdtoken.cpp b/src/script/cmdtoken.cpp index bc3ed9f..076a38f 100644 --- a/src/script/cmdtoken.cpp +++ b/src/script/cmdtoken.cpp @@ -42,8 +42,15 @@ bool Cmd(char *line, const char *token) char* p; line = SkipSpace(line); + p = strstr(line, token); - return ( p == line ); // command at the beginning? + if(p != line) return false; // command at the beginning? + + unsigned int len = 0; + for(char* x = p; *x != 0 && *x != ' ' && *x != '\t' && *x != '\n'; x++, len++); + if(len != strlen(token)) return false; // ends with space? + + return true; } // Seeking an operator. @@ -324,46 +331,6 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Barrier2" ) ) return OBJECT_BARRIER2; if ( Cmd(p, "Barrier3" ) ) return OBJECT_BARRIER3; if ( Cmd(p, "Barrier4" ) ) return OBJECT_BARRIER4; - if ( Cmd(p, "Teen40" ) ) return OBJECT_TEEN40; - if ( Cmd(p, "Teen41" ) ) return OBJECT_TEEN41; - if ( Cmd(p, "Teen42" ) ) return OBJECT_TEEN42; - if ( Cmd(p, "Teen43" ) ) return OBJECT_TEEN43; - if ( Cmd(p, "Teen44" ) ) return OBJECT_TEEN44; - if ( Cmd(p, "Teen45" ) ) return OBJECT_TEEN45; - if ( Cmd(p, "Teen46" ) ) return OBJECT_TEEN46; - if ( Cmd(p, "Teen47" ) ) return OBJECT_TEEN47; - if ( Cmd(p, "Teen48" ) ) return OBJECT_TEEN48; - if ( Cmd(p, "Teen49" ) ) return OBJECT_TEEN49; - if ( Cmd(p, "Teen30" ) ) return OBJECT_TEEN30; - if ( Cmd(p, "Teen31" ) ) return OBJECT_TEEN31; - if ( Cmd(p, "Teen32" ) ) return OBJECT_TEEN32; - if ( Cmd(p, "Teen33" ) ) return OBJECT_TEEN33; - if ( Cmd(p, "Stone" ) ) return OBJECT_TEEN34; - if ( Cmd(p, "Teen35" ) ) return OBJECT_TEEN35; - if ( Cmd(p, "Teen36" ) ) return OBJECT_TEEN36; - if ( Cmd(p, "Teen37" ) ) return OBJECT_TEEN37; - if ( Cmd(p, "Teen38" ) ) return OBJECT_TEEN38; - if ( Cmd(p, "Teen39" ) ) return OBJECT_TEEN39; - if ( Cmd(p, "Teen20" ) ) return OBJECT_TEEN20; - if ( Cmd(p, "Teen21" ) ) return OBJECT_TEEN21; - if ( Cmd(p, "Teen22" ) ) return OBJECT_TEEN22; - if ( Cmd(p, "Teen23" ) ) return OBJECT_TEEN23; - if ( Cmd(p, "Teen24" ) ) return OBJECT_TEEN24; - if ( Cmd(p, "Teen25" ) ) return OBJECT_TEEN25; - if ( Cmd(p, "Teen26" ) ) return OBJECT_TEEN26; - if ( Cmd(p, "Teen27" ) ) return OBJECT_TEEN27; - if ( Cmd(p, "Teen28" ) ) return OBJECT_TEEN28; - if ( Cmd(p, "Teen29" ) ) return OBJECT_TEEN29; - if ( Cmd(p, "Teen10" ) ) return OBJECT_TEEN10; - if ( Cmd(p, "Teen11" ) ) return OBJECT_TEEN11; - if ( Cmd(p, "Teen12" ) ) return OBJECT_TEEN12; - if ( Cmd(p, "Teen13" ) ) return OBJECT_TEEN13; - if ( Cmd(p, "Teen14" ) ) return OBJECT_TEEN14; - if ( Cmd(p, "Teen15" ) ) return OBJECT_TEEN15; - if ( Cmd(p, "Teen16" ) ) return OBJECT_TEEN16; - if ( Cmd(p, "Teen17" ) ) return OBJECT_TEEN17; - if ( Cmd(p, "Teen18" ) ) return OBJECT_TEEN18; - if ( Cmd(p, "Teen19" ) ) return OBJECT_TEEN19; if ( Cmd(p, "Teen0" ) ) return OBJECT_TEEN0; if ( Cmd(p, "Teen1" ) ) return OBJECT_TEEN1; if ( Cmd(p, "Teen2" ) ) return OBJECT_TEEN2; @@ -374,6 +341,46 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Teen7" ) ) return OBJECT_TEEN7; if ( Cmd(p, "Teen8" ) ) return OBJECT_TEEN8; if ( Cmd(p, "Teen9" ) ) return OBJECT_TEEN9; + if ( Cmd(p, "Teen10" ) ) return OBJECT_TEEN10; + if ( Cmd(p, "Teen11" ) ) return OBJECT_TEEN11; + if ( Cmd(p, "Teen12" ) ) return OBJECT_TEEN12; + if ( Cmd(p, "Teen13" ) ) return OBJECT_TEEN13; + if ( Cmd(p, "Teen14" ) ) return OBJECT_TEEN14; + if ( Cmd(p, "Teen15" ) ) return OBJECT_TEEN15; + if ( Cmd(p, "Teen16" ) ) return OBJECT_TEEN16; + if ( Cmd(p, "Teen17" ) ) return OBJECT_TEEN17; + if ( Cmd(p, "Teen18" ) ) return OBJECT_TEEN18; + if ( Cmd(p, "Teen19" ) ) return OBJECT_TEEN19; + if ( Cmd(p, "Teen20" ) ) return OBJECT_TEEN20; + if ( Cmd(p, "Teen21" ) ) return OBJECT_TEEN21; + if ( Cmd(p, "Teen22" ) ) return OBJECT_TEEN22; + if ( Cmd(p, "Teen23" ) ) return OBJECT_TEEN23; + if ( Cmd(p, "Teen24" ) ) return OBJECT_TEEN24; + if ( Cmd(p, "Teen25" ) ) return OBJECT_TEEN25; + if ( Cmd(p, "Teen26" ) ) return OBJECT_TEEN26; + if ( Cmd(p, "Teen27" ) ) return OBJECT_TEEN27; + if ( Cmd(p, "Teen28" ) ) return OBJECT_TEEN28; + if ( Cmd(p, "Teen29" ) ) return OBJECT_TEEN29; + if ( Cmd(p, "Teen30" ) ) return OBJECT_TEEN30; + if ( Cmd(p, "Teen31" ) ) return OBJECT_TEEN31; + if ( Cmd(p, "Teen32" ) ) return OBJECT_TEEN32; + if ( Cmd(p, "Teen33" ) ) return OBJECT_TEEN33; + if ( Cmd(p, "Stone" ) ) return OBJECT_TEEN34; + if ( Cmd(p, "Teen35" ) ) return OBJECT_TEEN35; + if ( Cmd(p, "Teen36" ) ) return OBJECT_TEEN36; + if ( Cmd(p, "Teen37" ) ) return OBJECT_TEEN37; + if ( Cmd(p, "Teen38" ) ) return OBJECT_TEEN38; + if ( Cmd(p, "Teen39" ) ) return OBJECT_TEEN39; + if ( Cmd(p, "Teen40" ) ) return OBJECT_TEEN40; + if ( Cmd(p, "Teen41" ) ) return OBJECT_TEEN41; + if ( Cmd(p, "Teen42" ) ) return OBJECT_TEEN42; + if ( Cmd(p, "Teen43" ) ) return OBJECT_TEEN43; + if ( Cmd(p, "Teen44" ) ) return OBJECT_TEEN44; + if ( Cmd(p, "Teen45" ) ) return OBJECT_TEEN45; + if ( Cmd(p, "Teen46" ) ) return OBJECT_TEEN46; + if ( Cmd(p, "Teen47" ) ) return OBJECT_TEEN47; + if ( Cmd(p, "Teen48" ) ) return OBJECT_TEEN48; + if ( Cmd(p, "Teen49" ) ) return OBJECT_TEEN49; if ( Cmd(p, "Quartz0" ) ) return OBJECT_QUARTZ0; if ( Cmd(p, "Quartz1" ) ) return OBJECT_QUARTZ1; if ( Cmd(p, "Quartz2" ) ) return OBJECT_QUARTZ2; -- cgit v1.2.3-1-g7c22 From 652dc6081df8dc73bc9f57c031420e498be71451 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 11 Jan 2014 23:42:45 +0100 Subject: Removed some unused objects --- src/script/cmdtoken.cpp | 72 ------------------------------------------------- 1 file changed, 72 deletions(-) (limited to 'src/script') diff --git a/src/script/cmdtoken.cpp b/src/script/cmdtoken.cpp index 076a38f..da4a886 100644 --- a/src/script/cmdtoken.cpp +++ b/src/script/cmdtoken.cpp @@ -271,20 +271,8 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Tree3" ) ) return OBJECT_TREE3; if ( Cmd(p, "Tree4" ) ) return OBJECT_TREE4; if ( Cmd(p, "Tree5" ) ) return OBJECT_TREE5; - if ( Cmd(p, "Tree6" ) ) return OBJECT_TREE6; - if ( Cmd(p, "Tree7" ) ) return OBJECT_TREE7; - if ( Cmd(p, "Tree8" ) ) return OBJECT_TREE8; - if ( Cmd(p, "Tree9" ) ) return OBJECT_TREE9; - if ( Cmd(p, "Mushroom0" ) ) return OBJECT_MUSHROOM0; if ( Cmd(p, "Mushroom1" ) ) return OBJECT_MUSHROOM1; if ( Cmd(p, "Mushroom2" ) ) return OBJECT_MUSHROOM2; - if ( Cmd(p, "Mushroom3" ) ) return OBJECT_MUSHROOM3; - if ( Cmd(p, "Mushroom4" ) ) return OBJECT_MUSHROOM4; - if ( Cmd(p, "Mushroom5" ) ) return OBJECT_MUSHROOM5; - if ( Cmd(p, "Mushroom6" ) ) return OBJECT_MUSHROOM6; - if ( Cmd(p, "Mushroom7" ) ) return OBJECT_MUSHROOM7; - if ( Cmd(p, "Mushroom8" ) ) return OBJECT_MUSHROOM8; - if ( Cmd(p, "Mushroom9" ) ) return OBJECT_MUSHROOM9; if ( Cmd(p, "Home" ) ) return OBJECT_HOME1; if ( Cmd(p, "Derrick" ) ) return OBJECT_DERRICK; if ( Cmd(p, "BotFactory" ) ) return OBJECT_FACTORY; @@ -330,7 +318,6 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Barrier1" ) ) return OBJECT_BARRIER1; if ( Cmd(p, "Barrier2" ) ) return OBJECT_BARRIER2; if ( Cmd(p, "Barrier3" ) ) return OBJECT_BARRIER3; - if ( Cmd(p, "Barrier4" ) ) return OBJECT_BARRIER4; if ( Cmd(p, "Teen0" ) ) return OBJECT_TEEN0; if ( Cmd(p, "Teen1" ) ) return OBJECT_TEEN1; if ( Cmd(p, "Teen2" ) ) return OBJECT_TEEN2; @@ -376,31 +363,16 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def) if ( Cmd(p, "Teen42" ) ) return OBJECT_TEEN42; if ( Cmd(p, "Teen43" ) ) return OBJECT_TEEN43; if ( Cmd(p, "Teen44" ) ) return OBJECT_TEEN44; - if ( Cmd(p, "Teen45" ) ) return OBJECT_TEEN45; - if ( Cmd(p, "Teen46" ) ) return OBJECT_TEEN46; - if ( Cmd(p, "Teen47" ) ) return OBJECT_TEEN47; - if ( Cmd(p, "Teen48" ) ) return OBJECT_TEEN48; - if ( Cmd(p, "Teen49" ) ) return OBJECT_TEEN49; if ( Cmd(p, "Quartz0" ) ) return OBJECT_QUARTZ0; if ( Cmd(p, "Quartz1" ) ) return OBJECT_QUARTZ1; if ( Cmd(p, "Quartz2" ) ) return OBJECT_QUARTZ2; if ( Cmd(p, "Quartz3" ) ) return OBJECT_QUARTZ3; - if ( Cmd(p, "Quartz4" ) ) return OBJECT_QUARTZ4; - if ( Cmd(p, "Quartz5" ) ) return OBJECT_QUARTZ5; - if ( Cmd(p, "Quartz6" ) ) return OBJECT_QUARTZ6; - if ( Cmd(p, "Quartz7" ) ) return OBJECT_QUARTZ7; - if ( Cmd(p, "Quartz8" ) ) return OBJECT_QUARTZ8; - if ( Cmd(p, "Quartz9" ) ) return OBJECT_QUARTZ9; if ( Cmd(p, "MegaStalk0" ) ) return OBJECT_ROOT0; if ( Cmd(p, "MegaStalk1" ) ) return OBJECT_ROOT1; if ( Cmd(p, "MegaStalk2" ) ) return OBJECT_ROOT2; if ( Cmd(p, "MegaStalk3" ) ) return OBJECT_ROOT3; if ( Cmd(p, "MegaStalk4" ) ) return OBJECT_ROOT4; if ( Cmd(p, "MegaStalk5" ) ) return OBJECT_ROOT5; - if ( Cmd(p, "MegaStalk6" ) ) return OBJECT_ROOT6; - if ( Cmd(p, "MegaStalk7" ) ) return OBJECT_ROOT7; - if ( Cmd(p, "MegaStalk8" ) ) return OBJECT_ROOT8; - if ( Cmd(p, "MegaStalk9" ) ) return OBJECT_ROOT9; if ( Cmd(p, "ApolloLEM" ) ) return OBJECT_APOLLO1; if ( Cmd(p, "ApolloJeep" ) ) return OBJECT_APOLLO2; if ( Cmd(p, "ApolloFlag" ) ) return OBJECT_APOLLO3; @@ -445,11 +417,7 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_MOBILEdr ) return "Scribbler"; if ( type == OBJECT_MARKPOWER ) return "PowerSpot"; if ( type == OBJECT_MARKSTONE ) return "TitaniumSpot"; -#if _GERMAN | _WG - if ( type == OBJECT_MARKURANIUM ) return "PlatinumSpot"; -#else if ( type == OBJECT_MARKURANIUM ) return "UraniumSpot"; -#endif if ( type == OBJECT_MARKKEYa ) return "KeyASpot"; if ( type == OBJECT_MARKKEYb ) return "KeyBSpot"; if ( type == OBJECT_MARKKEYc ) return "KeyCSpot"; @@ -461,17 +429,9 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_FLAGy ) return "YellowFlag"; if ( type == OBJECT_FLAGv ) return "VioletFlag"; if ( type == OBJECT_POWER ) return "PowerCell"; -#if _GERMAN | _WG - if ( type == OBJECT_ATOMIC ) return "FuelCell"; -#else if ( type == OBJECT_ATOMIC ) return "NuclearCell"; -#endif if ( type == OBJECT_STONE ) return "TitaniumOre"; -#if _GERMAN | _WG - if ( type == OBJECT_URANIUM ) return "PlatinumOre"; -#else if ( type == OBJECT_URANIUM ) return "UraniumOre"; -#endif if ( type == OBJECT_METAL ) return "Titanium"; if ( type == OBJECT_BULLET ) return "OrgaMatter"; if ( type == OBJECT_BBOX ) return "BlackBox"; @@ -514,20 +474,8 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_TREE3 ) return "Tree3"; if ( type == OBJECT_TREE4 ) return "Tree4"; if ( type == OBJECT_TREE5 ) return "Tree5"; - if ( type == OBJECT_TREE6 ) return "Tree6"; - if ( type == OBJECT_TREE7 ) return "Tree7"; - if ( type == OBJECT_TREE8 ) return "Tree8"; - if ( type == OBJECT_TREE9 ) return "Tree9"; - if ( type == OBJECT_MUSHROOM0 ) return "Mushroom0"; if ( type == OBJECT_MUSHROOM1 ) return "Mushroom1"; if ( type == OBJECT_MUSHROOM2 ) return "Mushroom2"; - if ( type == OBJECT_MUSHROOM3 ) return "Mushroom3"; - if ( type == OBJECT_MUSHROOM4 ) return "Mushroom4"; - if ( type == OBJECT_MUSHROOM5 ) return "Mushroom5"; - if ( type == OBJECT_MUSHROOM6 ) return "Mushroom6"; - if ( type == OBJECT_MUSHROOM7 ) return "Mushroom7"; - if ( type == OBJECT_MUSHROOM8 ) return "Mushroom8"; - if ( type == OBJECT_MUSHROOM9 ) return "Mushroom9"; if ( type == OBJECT_HOME1 ) return "Home"; if ( type == OBJECT_DERRICK ) return "Derrick"; if ( type == OBJECT_FACTORY ) return "BotFactory"; @@ -542,11 +490,7 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_INFO ) return "ExchangePost"; if ( type == OBJECT_ENERGY ) return "PowerPlant"; if ( type == OBJECT_LABO ) return "AutoLab"; -/* TODO: #if _GERMAN | _WG - if ( type == OBJECT_NUCLEAR ) return "FuelCellPlant"; -#else */ if ( type == OBJECT_NUCLEAR ) return "NuclearPlant"; -/* #endif */ if ( type == OBJECT_PARA ) return "PowerCaptor"; if ( type == OBJECT_SAFE ) return "Vault"; if ( type == OBJECT_HUSTON ) return "Houston"; @@ -577,7 +521,6 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_BARRIER1 ) return "Barrier1"; if ( type == OBJECT_BARRIER2 ) return "Barrier2"; if ( type == OBJECT_BARRIER3 ) return "Barrier3"; - if ( type == OBJECT_BARRIER4 ) return "Barrier4"; if ( type == OBJECT_TEEN0 ) return "Teen0"; if ( type == OBJECT_TEEN1 ) return "Teen1"; if ( type == OBJECT_TEEN2 ) return "Teen2"; @@ -623,31 +566,16 @@ const char* GetTypeObject(ObjectType type) if ( type == OBJECT_TEEN42 ) return "Teen42"; if ( type == OBJECT_TEEN43 ) return "Teen43"; if ( type == OBJECT_TEEN44 ) return "Teen44"; - if ( type == OBJECT_TEEN45 ) return "Teen45"; - if ( type == OBJECT_TEEN46 ) return "Teen46"; - if ( type == OBJECT_TEEN47 ) return "Teen47"; - if ( type == OBJECT_TEEN48 ) return "Teen48"; - if ( type == OBJECT_TEEN49 ) return "Teen49"; if ( type == OBJECT_QUARTZ0 ) return "Quartz0"; if ( type == OBJECT_QUARTZ1 ) return "Quartz1"; if ( type == OBJECT_QUARTZ2 ) return "Quartz2"; if ( type == OBJECT_QUARTZ3 ) return "Quartz3"; - if ( type == OBJECT_QUARTZ4 ) return "Quartz4"; - if ( type == OBJECT_QUARTZ5 ) return "Quartz5"; - if ( type == OBJECT_QUARTZ6 ) return "Quartz6"; - if ( type == OBJECT_QUARTZ7 ) return "Quartz7"; - if ( type == OBJECT_QUARTZ8 ) return "Quartz8"; - if ( type == OBJECT_QUARTZ9 ) return "Quartz9"; if ( type == OBJECT_ROOT0 ) return "MegaStalk0"; if ( type == OBJECT_ROOT1 ) return "MegaStalk1"; if ( type == OBJECT_ROOT2 ) return "MegaStalk2"; if ( type == OBJECT_ROOT3 ) return "MegaStalk3"; if ( type == OBJECT_ROOT4 ) return "MegaStalk4"; if ( type == OBJECT_ROOT5 ) return "MegaStalk5"; - if ( type == OBJECT_ROOT6 ) return "MegaStalk6"; - if ( type == OBJECT_ROOT7 ) return "MegaStalk7"; - if ( type == OBJECT_ROOT8 ) return "MegaStalk8"; - if ( type == OBJECT_ROOT9 ) return "MegaStalk9"; if ( type == OBJECT_APOLLO1 ) return "ApolloLEM"; if ( type == OBJECT_APOLLO2 ) return "ApolloJeep"; if ( type == OBJECT_APOLLO3 ) return "ApolloFlag"; -- cgit v1.2.3-1-g7c22 From 181a4049309600ef31c2d22b3823429c6ee331df Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Sat, 18 Jan 2014 19:20:40 +0100 Subject: Fixed warnings about unknown commands in scene files --- src/script/cmdtoken.cpp | 10 ++++++++++ src/script/cmdtoken.h | 1 + 2 files changed, 11 insertions(+) (limited to 'src/script') diff --git a/src/script/cmdtoken.cpp b/src/script/cmdtoken.cpp index da4a886..6393505 100644 --- a/src/script/cmdtoken.cpp +++ b/src/script/cmdtoken.cpp @@ -35,6 +35,16 @@ char* SkipSpace(char *line) return line; } +std::string GetCmd(char* line) +{ + line = SkipSpace(line); + + int len = 0; + for(char* x = line; *x != 0 && *x != ' ' && *x != '\t' && *x != '\n'; x++, len++); + + return std::string(line, len); +} + // Checks if a line contains a command. bool Cmd(char *line, const char *token) diff --git a/src/script/cmdtoken.h b/src/script/cmdtoken.h index 24b592f..8a423c5 100644 --- a/src/script/cmdtoken.h +++ b/src/script/cmdtoken.h @@ -30,6 +30,7 @@ // Procedures. +extern std::string GetCmd(char* line); extern bool Cmd(char *line, const char *token); extern char* SearchOp(char *line, const char *op); -- cgit v1.2.3-1-g7c22 From fbe2bf8bc7d61a7a13759f56e65181e16e25806b Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 3 Mar 2014 21:55:28 +0100 Subject: Added special mode in scene for bots to build more buildings than they usualy can Will be used in "Leaving Earth" missions for making decorative bots building base --- src/script/script.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index 1a26e62..3a4d2d1 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1665,7 +1665,7 @@ bool CScript::rCanBuild(CBotVar* var, CBotVar* result, int& exception, void* use (category == OBJECT_DESTROYER && (g_build & BUILD_DESTROYER))) { - //if we want to build not researched one + // if we want to build not researched one if ( (category == OBJECT_TOWER && !(g_researchDone & RESEARCH_TOWER)) || (category == OBJECT_NUCLEAR && !(g_researchDone & RESEARCH_ATOMIC)) ) @@ -1709,7 +1709,7 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user) } else { - category = static_cast(var->GetValInt()); //get category parameter + category = static_cast(var->GetValInt()); // get category parameter if ( (category == OBJECT_DERRICK && (g_build & BUILD_DERRICK)) || (category == OBJECT_FACTORY && (g_build & BUILD_FACTORY)) || (category == OBJECT_STATION && (g_build & BUILD_STATION)) || @@ -1726,7 +1726,7 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user) (category == OBJECT_DESTROYER && (g_build & BUILD_DESTROYER))) { - //if we want to build not researched one + // if we want to build not researched one if ( (category == OBJECT_TOWER && !(g_researchDone & RESEARCH_TOWER)) || (category == OBJECT_NUCLEAR && !(g_researchDone & RESEARCH_ATOMIC)) ) @@ -1739,8 +1739,11 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user) } } + + if (pThis->GetIgnoreBuildCheck()) + err = ERR_OK; - if (err == ERR_OK && script->m_primaryTask == 0) //if we can build and no task is present + if (err == ERR_OK && script->m_primaryTask == 0) // if we can build and no task is present { script->m_primaryTask = new CTaskManager(script->m_object); err = script->m_primaryTask->StartTaskBuild(category); @@ -1751,9 +1754,9 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user) script->m_primaryTask = 0; } } - //When script is waiting for finishing this task, it sets ERR_OK, and continues executing Process - //without creating new task. I think, there was a problem with previous version in release configuration - //It did not init error variable in this situation, and code tried to use variable with trash inside + // When script is waiting for finishing this task, it sets ERR_OK, and continues executing Process + // without creating new task. I think, there was a problem with previous version in release configuration + // It did not init error variable in this situation, and code tried to use variable with trash inside } if ( err != ERR_OK ) -- cgit v1.2.3-1-g7c22 From 7485ed790caeaa76efab0e9df48224cf1943ec27 Mon Sep 17 00:00:00 2001 From: Oleg Kosmakov Date: Fri, 21 Mar 2014 13:08:36 +0200 Subject: Fixes #295 When cannon cannot turn at specified angle, it will still reach the edge angle, but return the error code --- src/script/script.cpp | 23 +++++++++++++++++++++-- src/script/script.h | 3 +++ 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index 3a4d2d1..d55c4d1 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1393,7 +1393,7 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception) if ( err == ERR_STOP ) err = ERR_OK; result->SetValInt(err); // indicates the error or ok - if ( err != ERR_OK && script->m_errMode == ERM_STOP ) + if ( ShouldExecutionStop(err, script->m_errMode) ) { exception = err; return false; @@ -1407,6 +1407,21 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception) } +// Returns true if error code means rela error and exception must be thrown + +bool CScript::ShouldExecutionStop(Error err, int errMode) +{ + // aim impossible - not a real error + if (err == ERR_AIM_IMPOSSIBLE) + return false; + + if (err != ERR_OK && errMode == ERM_STOP) + return true; + + return false; +} + + // Compilation of the instruction "detect(type)". CBotTypResult CScript::cDetect(CBotVar* &var, void* user) @@ -2954,7 +2969,11 @@ bool CScript::rAim(CBotVar* var, CBotVar* result, int& exception, void* user) var = var->GetNext(); var == 0 ? y=0.0f : y=var->GetValFloat(); err = script->m_primaryTask->StartTaskGunGoal(x*Math::PI/180.0f, y*Math::PI/180.0f); - if ( err != ERR_OK ) + if (err == ERR_AIM_IMPOSSIBLE) + { + result->SetValInt(err); // shows the error + } + else if ( err != ERR_OK ) { delete script->m_primaryTask; script->m_primaryTask = 0; diff --git a/src/script/script.h b/src/script/script.h index afb89c8..694228a 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -24,6 +24,8 @@ #include "common/event.h" +#include "common/global.h" + #include "app/pausemanager.h" #include "CBot/CBotDll.h" @@ -209,6 +211,7 @@ public: private: static bool Process(CScript* script, CBotVar* result, int &exception); + static bool ShouldExecutionStop(Error err, int errMode); static CObject* SearchInfo(CScript* script, CObject* object, float power); protected: -- cgit v1.2.3-1-g7c22 From 119fce546a993bdb3640234a04a365bbda1d1053 Mon Sep 17 00:00:00 2001 From: Oleg Kosmakov Date: Fri, 21 Mar 2014 13:18:28 +0200 Subject: Issue #295 - continue Renamed the method, fixed typo in comments --- src/script/script.cpp | 6 +++--- src/script/script.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index d55c4d1..ca3f4e1 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1393,7 +1393,7 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception) if ( err == ERR_STOP ) err = ERR_OK; result->SetValInt(err); // indicates the error or ok - if ( ShouldExecutionStop(err, script->m_errMode) ) + if ( ShouldProcessStop(err, script->m_errMode) ) { exception = err; return false; @@ -1407,9 +1407,9 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception) } -// Returns true if error code means rela error and exception must be thrown +// Returns true if error code means real error and exception must be thrown -bool CScript::ShouldExecutionStop(Error err, int errMode) +bool CScript::ShouldProcessStop(Error err, int errMode) { // aim impossible - not a real error if (err == ERR_AIM_IMPOSSIBLE) diff --git a/src/script/script.h b/src/script/script.h index 694228a..fb44342 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -211,7 +211,7 @@ public: private: static bool Process(CScript* script, CBotVar* result, int &exception); - static bool ShouldExecutionStop(Error err, int errMode); + static bool ShouldProcessStop(Error err, int errMode); static CObject* SearchInfo(CScript* script, CObject* object, float power); protected: -- cgit v1.2.3-1-g7c22 From a2a4eb75cb196b10c4af243f13e49563d59b321c Mon Sep 17 00:00:00 2001 From: Oleg Kosmakov Date: Fri, 21 Mar 2014 13:22:02 +0200 Subject: Whitespace --- src/script/script.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index ca3f4e1..dd6b942 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -1412,10 +1412,10 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception) bool CScript::ShouldProcessStop(Error err, int errMode) { // aim impossible - not a real error - if (err == ERR_AIM_IMPOSSIBLE) + if ( err == ERR_AIM_IMPOSSIBLE ) return false; - if (err != ERR_OK && errMode == ERM_STOP) + if ( err != ERR_OK && errMode == ERM_STOP ) return true; return false; @@ -2969,7 +2969,7 @@ bool CScript::rAim(CBotVar* var, CBotVar* result, int& exception, void* user) var = var->GetNext(); var == 0 ? y=0.0f : y=var->GetValFloat(); err = script->m_primaryTask->StartTaskGunGoal(x*Math::PI/180.0f, y*Math::PI/180.0f); - if (err == ERR_AIM_IMPOSSIBLE) + if ( err == ERR_AIM_IMPOSSIBLE ) { result->SetValInt(err); // shows the error } -- cgit v1.2.3-1-g7c22 From f0d97bfdb91a2c0a17d1697b145d4df930280dbb Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 18 May 2014 12:12:47 +0200 Subject: Better datadir mod support --- src/script/script.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index dd6b942..f97ed08 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -18,6 +18,7 @@ #include "script/script.h" #include "app/app.h" +#include "app/gamedata.h" #include "common/global.h" #include "common/iman.h" @@ -4406,7 +4407,7 @@ void CScript::New(Ui::CEdit* edit, const char* name) sf = m_main->GetScriptFile(); if ( sf[0] != 0 ) // Load an empty program specific? { - std::string filename = CApplication::GetInstancePointer()->GetDataFilePath(DIR_AI, sf); + std::string filename = CGameData::GetInstancePointer()->GetFilePath(DIR_AI, sf); file = fopen(filename.c_str(), "rb"); if ( file != NULL ) { @@ -4500,7 +4501,7 @@ bool CScript::ReadScript(const char* filename) if ( strchr(filename, '/') == 0 ) //we're reading non user script { - name = CApplication::GetInstancePointer()->GetDataFilePath(DIR_AI, filename); + name = CGameData::GetInstancePointer()->GetFilePath(DIR_AI, filename); } else { @@ -4534,7 +4535,7 @@ bool CScript::WriteScript(const char* filename) if ( strchr(filename, '/') == 0 ) //we're writing non user script { - name = CApplication::GetInstancePointer()->GetDataFilePath(DIR_AI, filename); + name = CGameData::GetInstancePointer()->GetFilePath(DIR_AI, filename); } else { -- cgit v1.2.3-1-g7c22 From bc3b7ef283d5a4f84af352f693a50182571909e7 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Thu, 26 Jun 2014 20:41:18 +0200 Subject: Fixed negative parameter in fire() (issue #305) Also fixed checking parameter count and type for ants, spiders and shooters --- src/script/script.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/script') diff --git a/src/script/script.cpp b/src/script/script.cpp index f97ed08..2299fbf 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -2862,7 +2862,6 @@ bool CScript::rShield(CBotVar* var, CBotVar* result, int& exception, void* user) CBotTypResult CScript::cFire(CBotVar* &var, void* user) { -#if 0 CObject* pThis = static_cast(user); ObjectType type; @@ -2870,23 +2869,25 @@ CBotTypResult CScript::cFire(CBotVar* &var, void* user) if ( type == OBJECT_ANT ) { - return cOnePoint(var, user); + if ( var == 0 ) return CBotTypResult(CBotErrLowParam); + CBotTypResult ret = cPoint(var, user); + if ( ret.GetType() != 0 ) return ret; + if ( var != 0 ) return CBotTypResult(CBotErrOverParam); } else if ( type == OBJECT_SPIDER ) { - return cNull(var, user); + if ( var != 0 ) return CBotTypResult(CBotErrOverParam); } else { - if ( var == 0 ) return CBotTypResult(CBotTypFloat); - if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); - var = var->GetNext(); - if ( var != 0 ) return CBotTypResult(CBotErrOverParam); - return CBotTypResult(CBotTypFloat); + if ( var != 0 ) + { + if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GetNext(); + if ( var != 0 ) return CBotTypResult(CBotErrOverParam); + } } -#else return CBotTypResult(CBotTypFloat); -#endif } // Instruction "fire(delay)". @@ -2922,6 +2923,7 @@ bool CScript::rFire(CBotVar* var, CBotVar* result, int& exception, void* user) { if ( var == 0 ) delay = 0.0f; else delay = var->GetValFloat(); + if ( delay < 0.0f ) delay = -delay; err = script->m_primaryTask->StartTaskFire(delay); } -- cgit v1.2.3-1-g7c22