diff options
author | krzys-h <krzys_h@interia.pl> | 2013-03-01 21:56:52 +0100 |
---|---|---|
committer | krzys-h <krzys_h@interia.pl> | 2013-03-01 21:56:52 +0100 |
commit | 37a095b5b65f8098ee7541933d15de9ab12eb6a7 (patch) | |
tree | 375d06b516d8e5aed7a560d6b087eeb7eed6deb2 | |
parent | 0864e44c7b631cc4c8a9937fe8a56f2c28b784cd (diff) | |
download | colobot-37a095b5b65f8098ee7541933d15de9ab12eb6a7.tar.gz colobot-37a095b5b65f8098ee7541933d15de9ab12eb6a7.tar.bz2 colobot-37a095b5b65f8098ee7541933d15de9ab12eb6a7.zip |
MORE improvements to produce()
-rw-r--r-- | src/script/script.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/script/script.cpp b/src/script/script.cpp index 64139f3..e8926d2 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -948,10 +948,8 @@ bool CScript::rDirection(CBotVar* var, CBotVar* result, int& exception, void* us } -// Compilation of the instruction "produce(pos, angle, type, scriptName, power)". -// or "produce(pos, angle, type, scriptName)" -// or "produce(pos, angle, type)" -// or "produce(type)" +// Compilation of the instruction "produce(pos, angle, type[, scriptName[, power]])" +// or "produce(type[, power])". CBotTypResult CScript::cProduce(CBotVar* &var, void* user) { @@ -961,6 +959,10 @@ CBotTypResult CScript::cProduce(CBotVar* &var, void* user) if ( var->GetType() <= CBotTypDouble ) { var = var->GetNext(); + if( var != 0 ) { + if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GetNext(); + } } else { ret = cPoint(var, user); if ( ret.GetType() != 0 ) return ret; @@ -989,10 +991,8 @@ CBotTypResult CScript::cProduce(CBotVar* &var, void* user) return CBotTypResult(CBotTypFloat); } -// Instruction "produce(pos, angle, type, scriptName, power)". -// or "produce(pos, angle, type, scriptName)" -// or "produce(pos, angle, type)" -// or "produce(type)" +// Instruction "produce(pos, angle, type[, scriptName[, power]])" +// or "produce(type[, power])". bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user) { @@ -1008,13 +1008,17 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user if ( var->GetType() <= CBotTypDouble ) { type = static_cast<ObjectType>(var->GetValInt()); + var = var->GetNext(); pos = me->GetPosition(0); Math::Vector rotation = me->GetAngle(0) + me->GetInclinaison(); angle = rotation.y; - power = -1.0f; + if( var != 0 ) + power = var->GetValFloat(); + else + power = -1.0f; name = ""; } else { |