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(-) 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