I'm not sure, since I haven't played with the python stuff much. But one thing to be aware - the python code is in a plugin shared library, and the server loads that library from someplace where prefix points to. So if you do what I often do, which is run the server directory from the build directory and don't run make install, you'll continue to have the old plugin code until you do a make install. One other note on your change - if you are modifying the object speed, you need to add a call to update_ob_speed, otherwise the object won't be processed and do anything. Alex Schultz wrote: > Hi, > > Today I was tring to extend the "CreateInvisibleObjectInside" function > in the python bindings to also allow limited duration forces to be > created in the same manner that markers can do that. So I attempted to > add another optional parameter to allow the duration to set (in the same > measurement as the food parameter of marker objects). However when I try > to call it with: > > force = CFPython.CreateInvisibleObjectInside(activator, forcename, 1.00) > > the script crashes with: > > TypeError: function takes exactly 2 arguments (3 given) > > I've attached the modifications that I've tried to make to it here. > Anybody have any ideas? > > Thanks, > Alex Schultz > > > > ------------------------------------------------------------------------ > > Index: plugin/plugin_python.c > =================================================================== > RCS file: /cvsroot/crossfire/crossfire/plugin/plugin_python.c,v > retrieving revision 1.62 > diff -C10 -r1.62 plugin_python.c > *** plugin/plugin_python.c 20 May 2005 19:28:02 -0000 1.62 > --- plugin/plugin_python.c 1 Jun 2005 04:28:48 -0000 > *************** > *** 2362,2413 **** > { > if(tmp2->type == FORCE && tmp2->slaying && !strcmp(tmp2->slaying,id)) > break; > }; > > return Py_BuildValue("l",(long)(tmp2)); > }; > > /*****************************************************************************/ > /* Name : CFCreateInvisibleObjectInside */ > ! /* Python : CFPython.CreateInvisibleObjectInside(object,string) */ > /*****************************************************************************/ > static PyObject* CFCreateInvisibleObjectInside(PyObject* self, PyObject* args) > { > long whereptr; > char* txt; > char txt2[6]; > object *myob; > object *where; > CFParm* CFR; > > ! if (!PyArg_ParseTuple(args,"ls",&whereptr,&txt)) > return NULL; > > CHECK_OBJ(whereptr); > > where = (object *)(whereptr); > > strcpy(txt2,"force"); > > GCFP.Value[0] = (void *)(txt2); > CFR = (PlugHooks[HOOK_GETARCHETYPE])(&GCFP); > myob = (object *)(CFR->Value[0]); > PyFreeMemory( CFR ); > > if(strncmp(query_name(myob), "singluarity", 11) == 0) > { > PyFreeObject(myob); > set_exception("can't find archetype 'force'"); > return NULL; > } > ! myob->speed = 0.0; > GCFP.Value[0] = (void *)(myob); > (PlugHooks[HOOK_UPDATESPEED])(&GCFP); > > if (myob->slaying != NULL) > DELETE_STRING(myob->slaying); > myob->slaying = add_string(txt); > myob = insert_ob_in_ob(myob, where); > > GCFP.Value[0] = (void *)(where); > GCFP.Value[1] = (void *)(myob); > --- 2366,2422 ---- > { > if(tmp2->type == FORCE && tmp2->slaying && !strcmp(tmp2->slaying,id)) > break; > }; > > return Py_BuildValue("l",(long)(tmp2)); > }; > > /*****************************************************************************/ > /* Name : CFCreateInvisibleObjectInside */ > ! /* Python : CFPython.CreateInvisibleObjectInside(object,string[,food]) */ > /*****************************************************************************/ > static PyObject* CFCreateInvisibleObjectInside(PyObject* self, PyObject* args) > { > long whereptr; > char* txt; > char txt2[6]; > + double lspeed = 0; > object *myob; > object *where; > CFParm* CFR; > > ! if (!PyArg_ParseTuple(args,"ls|d",&whereptr,&txt,&lspeed)) > return NULL; > > CHECK_OBJ(whereptr); > > where = (object *)(whereptr); > > strcpy(txt2,"force"); > > GCFP.Value[0] = (void *)(txt2); > CFR = (PlugHooks[HOOK_GETARCHETYPE])(&GCFP); > myob = (object *)(CFR->Value[0]); > PyFreeMemory( CFR ); > > if(strncmp(query_name(myob), "singluarity", 11) == 0) > { > PyFreeObject(myob); > set_exception("can't find archetype 'force'"); > return NULL; > } > ! myob->speed = 0; > ! if (lspeed) { > ! myob->speed = 0.01; > ! myob->speed_left = -(lspeed); > ! } > GCFP.Value[0] = (void *)(myob); > (PlugHooks[HOOK_UPDATESPEED])(&GCFP); > > if (myob->slaying != NULL) > DELETE_STRING(myob->slaying); > myob->slaying = add_string(txt); > myob = insert_ob_in_ob(myob, where); > > GCFP.Value[0] = (void *)(where); > GCFP.Value[1] = (void *)(myob); > > > ------------------------------------------------------------------------ > > _______________________________________________ > crossfire mailing list > crossfire at metalforge.org > http://mailman.metalforge.org/mailman/listinfo/crossfire