return PyFalse();
Py_RETURN_FALSE;
PyObject* wpChar_getAttr( wpChar* self, char* name ){	// Python specific stuff	/*		\rproperty char.gm Indicates whether the player is a gm or not.		Always false for NPCs.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	if ( !strcmp( "gm", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( !player )			return PyFalse();		return player->isGM() ? PyTrue() : PyFalse();		/*				\rproperty char.tags This property is a list of names for all tags attached to this character.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "tags", name ) )	{		// Return a list with the keynames		PyObject* list = PyList_New( 0 );		QStringList tags = self->pChar->getTags();		for ( QStringList::iterator it = tags.begin(); it != tags.end(); ++it )		{			QString name = *it;			if ( !name.isEmpty() )			{				PyList_Append( list, PyString_FromString( name.latin1() ) );			}		}		return list;		/*				\rproperty char.party A <object id="party">party</object> object for the party the player belongs to.				None for NPCs or if the player is not in a party.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "party", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( player && player->party() )		{			return player->party()->getPyObject();		}		Py_INCREF( Py_None );		return Py_None;		/*				\rproperty char.guild A <object id="guild">guild</object> object for the guild the player belongs to.				None for NPCs or if the player is not in a guild.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "guild", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( player && player->guild() )		{			return player->guild()->getPyObject();		}		Py_INCREF( Py_None );		return Py_None;		/*				\rproperty char.rank The rank for the players account.				NPCs and players without accounts always have rank 1.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "rank", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( !player )			return PyInt_FromLong( 1 );		cAccount* account = player->account();		if ( account )		{			return PyInt_FromLong( account->rank() );		}		else		{			return PyInt_FromLong( 1 );		}		/*				\rproperty char.region A <object id="REGION">region</object> object for the region the character is in.				May be None if the region the character is in is undefined.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "region", name ) )		return PyGetRegionObject( self->pChar->region() );	/*		\rproperty char.account An <object id="ACCOUNT">account</object> object for the players account.		None for NPCs and players without accounts.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "account", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( !player )		{			Py_INCREF( Py_None );			return Py_None;		}		return PyGetAccountObject( player->account() );	}	/*		\rproperty char.socket The <object id="SOCKET">SOCKET</object> object for this character.		None for disconnected players and NPCs.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "socket", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( !player )		{			Py_INCREF( Py_None );			return Py_None;		}		return PyGetSocketObject( player->socket() );	}	/*		\rproperty char.skill Returns a <object id="SKILL">SKILL</object> object in value mode for the character.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "skill", name ) )	{		wpSkills* skills = PyObject_New( wpSkills, &wpSkillsType );		skills->pChar = self->pChar;		skills->type = 0;		return ( PyObject * ) ( skills );	}	/*		\rproperty char.skillcap Returns a <object id="SKILL">SKILL</object> object in cap mode for the character.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "skillcap", name ) )	{		wpSkills* skills = PyObject_New( wpSkills, &wpSkillsType );		skills->pChar = self->pChar;		skills->type = 1;		return ( PyObject * ) ( skills );	}	/*		\rproperty char.skilllock Returns a <object id="SKILL">SKILL</object> object in lock mode for the character.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "skilllock", name ) )	{		wpSkills* skills = PyObject_New( wpSkills, &wpSkillsType );		skills->pChar = self->pChar;		skills->type = 2;		return ( PyObject * ) ( skills );	}	/*		\rproperty char.followers Returns the list of followers for this player.		This property is None for NPCs, not an empty list.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "followers", name ) )	{		P_PLAYER player = dynamic_cast<P_PLAYER>( self->pChar );		if ( !player )		{			Py_INCREF( Py_None );			return Py_None;		}		cBaseChar::CharContainer followers = player->pets();		PyObject* rVal = PyTuple_New( followers.size() );		for ( uint i = 0; i < followers.size(); ++i )			PyTuple_SetItem( rVal, i, PyGetCharObject( followers[i] ) );		return rVal;	}	/*		\rproperty char.guards Returns a list of NPCs who are guarding this character.		This property is valid for NPCs and players.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "guards", name ) )	{		cBaseChar::CharContainer guards = self->pChar->guardedby();		PyObject* rVal = PyTuple_New( guards.size() );		for ( uint i = 0; i < guards.size(); ++i )			PyTuple_SetItem( rVal, i, PyGetCharObject( guards[i] ) );		return rVal;	}	/*		\property char.events The names of the scripts attached to this character.		This property is exclusive to python scripts and overrides normal properties with the same name.	*/	else if ( !strcmp( "events", name ) )	{		QStringList events = QStringList::split( ",", self->pChar->eventList() );		PyObject* list = PyList_New( events.count() );		for ( uint i = 0; i < events.count(); ++i )			PyList_SetItem( list, i, PyString_FromString( events[i].latin1() ) );		return list;		/*				\rproperty char.npc True if this character is a npc, false otherwise.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "npc", name ) )	{		return self->pChar->objectType() == enNPC ? PyTrue() : PyFalse();		/*				\rproperty char.player True if this character is a player, false otherwise.				This property is exclusive to python scripts and overrides normal properties with the same name.			*/	}	else if ( !strcmp( "player", name ) )	{		return self->pChar->objectType() == enPlayer ? PyTrue() : PyFalse();	}	else	{		cVariant result;		stError* error = self->pChar->getProperty( name, result );		if ( !error )		{			PyObject* obj = 0;			switch ( result.type() )			{			case cVariant::BaseChar:				obj = PyGetCharObject( result.toChar() );				break;			case cVariant::Item:				obj = PyGetItemObject( result.toItem() );				break;			case cVariant::Long:			case cVariant::Int:				obj = PyInt_FromLong( result.toInt() );				break;			case cVariant::String:				if ( result.toString().isNull() )					obj = PyUnicode_FromWideChar( L"", 0 );				else					obj = PyUnicode_FromUnicode( ( Py_UNICODE * ) result.toString().ucs2(), result.toString().length() );				break;			case cVariant::Double:				obj = PyFloat_FromDouble( result.toDouble() );				break;			case cVariant::Coord:				obj = PyGetCoordObject( result.toCoord() );				break;			}			if ( !obj )			{				PyErr_Format( PyExc_ValueError, "Unsupported Property Type: %s", result.typeName() );				return 0;			}			return obj;		}		else			delete error;	}	// If no property is found search for a method	return Py_FindMethod( wpCharMethods, ( PyObject * ) self, name );}