Index: trunk/src/defs/class_id.h
===================================================================
--- trunk/src/defs/class_id.h	(revision 5633)
+++ trunk/src/defs/class_id.h	(revision 5634)
@@ -213,4 +213,5 @@
   CL_TRACK_ELEMENT              =    0x00000b0b,
   CL_NUMBER                     =    0x00000b0c,
+  CL_EXECUTOR                   =    0x00000b0d,
   CL_FAST_FACTORY               =    0x00000c01,
   CL_SHELL                      =    0x00000c10,
Index: trunk/src/defs/functor_list.h
===================================================================
--- trunk/src/defs/functor_list.h	(revision 5633)
+++ trunk/src/defs/functor_list.h	(revision 5634)
@@ -30,24 +30,10 @@
 //! defines the maximum count of arguments function pointers might have
 #define FUNCTOR_MAX_ARGUMENTS                5
-
-typedef enum
-{
-  ParameterNull    = 0,
-  ParameterBool    = 1,
-  ParameterChar    = 2,
-  ParameterString  = 4,
-  ParameterInt     = 8,
-  ParameterUInt    = 16,
-  ParameterFloat   = 32,
-  ParameterLong    = 64,
-  ParameterXML     = 128,
-  /* ... */
-} ParameterType;
-
+#include "multi_type.h"
 
 #define l_BOOL_TYPE        bool                 //!< The type of an BOOL
 #define l_BOOL_FUNC        isBool               //!< The function to call to parse BOOL
 #define l_BOOL_NAME        "bool"               //!< The name of an BOOL
-#define l_BOOL_PARAM       ParameterBool        //!< the type of the parameter BOOL
+#define l_BOOL_PARAM       MT_BOOL              //!< the type of the parameter BOOL
 #define l_BOOL_DEFAULT     false                //!< a default Value for an BOOL
 
@@ -56,5 +42,5 @@
 #define l_INT_FUNC         isInt                //!< The function to call to parse INT
 #define l_INT_NAME         "int"                //!< The name of an INT
-#define l_INT_PARAM        ParameterInt         //!< the type of the parameter INT
+#define l_INT_PARAM        MT_INT               //!< the type of the parameter INT
 #define l_INT_DEFAULT      0                    //!< a default Value for an INT
 
@@ -62,5 +48,5 @@
 #define l_UINT_FUNC        isInt                //!< The function to call to parse UINT
 #define l_UINT_NAME        "unsigned int"       //!< The name of an UINT
-#define l_UINT_PARAM        ParameterUInt       //!< the type of the parameter UINT
+#define l_UINT_PARAM       MT_INT        //!< the type of the parameter UINT
 #define l_UINT_DEFAULT     0                    //!< a default Value for an UINT
 
@@ -68,5 +54,5 @@
 #define l_LONG_FUNC        isInt                //!< The function to parse a LONG
 #define l_LONG_NAME        "long"               //!< The name of a LONG
-#define l_LONG_PARAM       ParameterLong        //!< the type of the parameter LONG
+#define l_LONG_PARAM       MT_INT //!< the type of the parameter LONG
 #define l_LONG_DEFAULT     0                    //!< a default Value for a LONG
 
@@ -80,5 +66,5 @@
 #define l_FLOAT_FUNC       isFloat              //!< The function to parse a FLOAT
 #define l_FLOAT_NAME       "float"              //!< The name of a FLOAT
-#define l_FLOAT_PARAM      ParameterFloat       //!< the type of the parameter FLOAT
+#define l_FLOAT_PARAM      MT_FLOAT             //!< the type of the parameter FLOAT
 #define l_FLOAT_DEFAULT    0.0                  //!< a default Value for a FLOAT
 
@@ -91,5 +77,5 @@
 #define l_STRING_FUNC      isString             //!< The function to parse a STRING
 #define l_STRING_NAME      "string"             //!< The name of a STRING
-#define l_STRING_PARAM     ParameterString      //!< the type of the parameter STRING
+#define l_STRING_PARAM     MT_STRING            //!< the type of the parameter STRING
 #define l_STRING_DEFAULT   ""                   //!< a default Value for an STRING
 
Index: trunk/src/lib/Makefile.am
===================================================================
--- trunk/src/lib/Makefile.am	(revision 5633)
+++ trunk/src/lib/Makefile.am	(revision 5634)
@@ -40,4 +40,5 @@
                         util/helper_functions.cc \
                         util/multi_type.cc \
+                        util/executor/executor.cc \
                         math/vector.cc \
                         math/curve.cc
@@ -57,4 +58,5 @@
                         util/helper_functions.h \
                         util/multi_type.h \
+                        util/executor/executor.h \
                         math/vector.h \
                         math/curve.h
Index: trunk/src/lib/Makefile.in
===================================================================
--- trunk/src/lib/Makefile.in	(revision 5633)
+++ trunk/src/lib/Makefile.in	(revision 5634)
@@ -58,5 +58,5 @@
 	ini_parser.$(OBJEXT) substring.$(OBJEXT) color.$(OBJEXT) \
 	helper_functions.$(OBJEXT) multi_type.$(OBJEXT) \
-	vector.$(OBJEXT) curve.$(OBJEXT)
+	executor.$(OBJEXT) vector.$(OBJEXT) curve.$(OBJEXT)
 libORXlibs_a_OBJECTS = $(am_libORXlibs_a_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -229,4 +229,5 @@
                         util/helper_functions.cc \
                         util/multi_type.cc \
+                        util/executor/executor.cc \
                         math/vector.cc \
                         math/curve.cc
@@ -246,4 +247,5 @@
                         util/helper_functions.h \
                         util/multi_type.h \
+                        util/executor/executor.h \
                         math/vector.h \
                         math/curve.h
@@ -311,4 +313,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/executor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helper_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ini_parser.Po@am__quote@
@@ -458,4 +461,18 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multi_type.obj `if test -f 'util/multi_type.cc'; then $(CYGPATH_W) 'util/multi_type.cc'; else $(CYGPATH_W) '$(srcdir)/util/multi_type.cc'; fi`
+
+executor.o: util/executor/executor.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT executor.o -MD -MP -MF "$(DEPDIR)/executor.Tpo" -c -o executor.o `test -f 'util/executor/executor.cc' || echo '$(srcdir)/'`util/executor/executor.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/executor.Tpo" "$(DEPDIR)/executor.Po"; else rm -f "$(DEPDIR)/executor.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/executor/executor.cc' object='executor.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o executor.o `test -f 'util/executor/executor.cc' || echo '$(srcdir)/'`util/executor/executor.cc
+
+executor.obj: util/executor/executor.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT executor.obj -MD -MP -MF "$(DEPDIR)/executor.Tpo" -c -o executor.obj `if test -f 'util/executor/executor.cc'; then $(CYGPATH_W) 'util/executor/executor.cc'; else $(CYGPATH_W) '$(srcdir)/util/executor/executor.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/executor.Tpo" "$(DEPDIR)/executor.Po"; else rm -f "$(DEPDIR)/executor.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/executor/executor.cc' object='executor.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o executor.obj `if test -f 'util/executor/executor.cc'; then $(CYGPATH_W) 'util/executor/executor.cc'; else $(CYGPATH_W) '$(srcdir)/util/executor/executor.cc'; fi`
 
 vector.o: math/vector.cc
@@ -621,5 +638,5 @@
 
 distdir: $(DISTFILES)
-	$(mkdir_p) $(distdir)/coord $(distdir)/graphics/render2D $(distdir)/lang $(distdir)/math $(distdir)/util
+	$(mkdir_p) $(distdir)/coord $(distdir)/graphics/render2D $(distdir)/lang $(distdir)/math $(distdir)/util $(distdir)/util/executor
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 5633)
+++ trunk/src/lib/shell/shell_command.cc	(revision 5634)
@@ -584,25 +584,25 @@
     switch (this->parameters[i])
     {
-      case ParameterBool:
+      case MT_BOOL:
         this->defaultValue[i].setInt(va_arg(defaultList, int));
         break;
-      case ParameterChar:
+      case MT_CHAR:
         this->defaultValue[i].setChar((char)va_arg(defaultList, int));
         break;
-      case ParameterString:
+      case MT_STRING:
         this->defaultValue[i].setString(va_arg(defaultList, char*));
         break;
-      case ParameterInt:
+      case MT_INT:
         this->defaultValue[i].setInt(va_arg(defaultList, int));
         break;
-      case ParameterUInt:
+/*      case MT_UINT:
         this->defaultValue[i].setInt((int)va_arg(defaultList, unsigned int));
-        break;
-      case ParameterFloat:
+        break;*/
+      case MT_FLOAT:
         this->defaultValue[i].setFloat(va_arg(defaultList, double));
         break;
-      case ParameterLong:
+/*      case MT_LONG:
         this->defaultValue[i].setInt((int) va_arg(defaultList, long));
-        break;
+        break;*/
       default:
         break;
@@ -654,5 +654,7 @@
 const char* ShellCommandBase::paramToString(long parameter)
 {
-  switch (parameter)
+  return MultiType::MultiTypeToString((MT_Type)parameter);
+// FIXME
+  /*  switch (parameter)
   {
     case ParameterBool:
@@ -680,4 +682,4 @@
       return "NULL";
       break;
-  }
-}
+  }*/
+}
Index: trunk/src/util/loading/load_param.cc
===================================================================
--- trunk/src/util/loading/load_param.cc	(revision 5633)
+++ trunk/src/util/loading/load_param.cc	(revision 5634)
@@ -80,17 +80,17 @@
         switch (tmpType)
         {
-          case ParameterInt:
+          case MT_INT:
             sprintf(defaultVal, "%d", va_arg(types, int));
             break;
-          case ParameterLong:
+/*          case MT_LONG:
             sprintf(defaultVal, "%0.3f", va_arg(types, l_LONG_TYPE));
-            break;
-          case ParameterFloat:
+            break;*/
+          case MT_FLOAT:
             sprintf(defaultVal, "%0.3f", va_arg(types, double));
             break;
-          case ParameterString:
+          case MT_STRING:
             sprintf(defaultVal, "%s", va_arg(types, l_STRING_TYPE));
             break;
-          case ParameterXML:
+          case MT_EXT1:
             sprintf(defaultVal, "");
             break;
Index: trunk/src/util/loading/load_param_description.cc
===================================================================
--- trunk/src/util/loading/load_param_description.cc	(revision 5633)
+++ trunk/src/util/loading/load_param_description.cc	(revision 5634)
@@ -71,34 +71,35 @@
     if (i > 0)
       PRINT(3)(",");
-    switch (this->types[i])
-    {
-      default:
-        PRINTF(3)("none");
-        break;
-      case ParameterBool:
-        PRINT(3)("bool");
-        break;
-      case ParameterChar:
-        PRINT(3)("char");
-        break;
-      case ParameterString:
-        PRINT(3)("string");
-        break;
-      case ParameterInt:
-        PRINT(3)("int");
-        break;
-      case ParameterUInt:
-        PRINT(3)("Uint");
-        break;
-      case ParameterFloat:
-        PRINT(3)("float");
-        break;
-      case ParameterLong:
-        PRINT(3)("long");
-        break;
-      case ParameterXML:
-        PRINT(3)("XML");
-        break;
-    }
+    // FIXME
+    //     switch (this->types[i])
+//     {
+//       default:
+//         PRINTF(3)("none");
+//         break;
+//       case ParameterBool:
+//         PRINT(3)("bool");
+//         break;
+//       case ParameterChar:
+//         PRINT(3)("char");
+//         break;
+//       case ParameterString:
+//         PRINT(3)("string");
+//         break;
+//       case ParameterInt:
+//         PRINT(3)("int");
+//         break;
+//       case ParameterUInt:
+//         PRINT(3)("Uint");
+//         break;
+//       case ParameterFloat:
+//         PRINT(3)("float");
+//         break;
+//       case ParameterLong:
+//         PRINT(3)("long");
+//         break;
+//       case ParameterXML:
+//         PRINT(3)("XML");
+//         break;
+//     }
   }
   PRINT(3)("</%s>", this->paramName);
@@ -113,5 +114,5 @@
       if (i > 0)
         PRINT(3)(", ");
-      if (this->types[i] & ParameterString)
+      if (this->types[i] & MT_STRING)
       { // leave brackets !!
         PRINT(3)("\"%s\"", this->defaultValues[i]);
Index: trunk/src/world_entities/player.cc
===================================================================
--- trunk/src/world_entities/player.cc	(revision 5633)
+++ trunk/src/world_entities/player.cc	(revision 5634)
@@ -33,4 +33,5 @@
 #include "event.h"
 
+#include "executor/executor.h"
 
 using namespace std;
@@ -118,4 +119,6 @@
 void Player::init()
 {
+  Executor* test =  new ExecutorObjective<Player>("test", "Player", &Player::ADDWEAPON);
+
 //  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
   this->setClassID(CL_PLAYER, "Player");
@@ -161,5 +164,4 @@
   this->weaponMan->setSlotPosition(9, Vector(-2.5, -0.3, 2.0));
   this->weaponMan->setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));
-
 }
 
