summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-03-01 21:56:52 +0100
committerkrzys-h <krzys_h@interia.pl>2013-03-01 21:56:52 +0100
commit37a095b5b65f8098ee7541933d15de9ab12eb6a7 (patch)
tree375d06b516d8e5aed7a560d6b087eeb7eed6deb2 /src
parent0864e44c7b631cc4c8a9937fe8a56f2c28b784cd (diff)
downloadcolobot-37a095b5b65f8098ee7541933d15de9ab12eb6a7.tar.gz
colobot-37a095b5b65f8098ee7541933d15de9ab12eb6a7.tar.bz2
colobot-37a095b5b65f8098ee7541933d15de9ab12eb6a7.zip
MORE improvements to produce()
Diffstat (limited to 'src')
-rw-r--r--src/script/script.cpp22
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 {