示例#1
0
/*
=============
G_NewTarget
=============
*/
gentityCallDefinition_t G_NewCallDefinition( char *eventKey, const char *string )
{
	char *stringPointer;
	int  i, stringLength;
	gentityCallDefinition_t newCallDefinition = { NULL, ON_DEFAULT, NULL, NULL, ECA_NOP };

	stringLength = strlen( string ) + 1;
	if(stringLength == 1)
		return newCallDefinition;

	stringPointer = BG_Alloc( stringLength );
	newCallDefinition.name = stringPointer;

	for ( i = 0; i < stringLength; i++ )
	{
		if ( string[ i ] == ':' && !newCallDefinition.action )
		{
			*stringPointer++ = '\0';
			newCallDefinition.action = stringPointer;
			continue;
		}
		*stringPointer++ = string[ i ];
	}
	newCallDefinition.actionType = G_GetCallActionTypeFor( newCallDefinition.action );

	newCallDefinition.event = eventKey;
	newCallDefinition.eventType = G_GetCallEventTypeFor( newCallDefinition.event );
	return newCallDefinition;
}
示例#2
0
void Svcmd_EntityFire_f()
{
    char argument[ MAX_STRING_CHARS ];
    int  entityNum;
    gentity_t *selection;
    gentityCall_t call;
    gentityCallDefinition_t callDefinition = { nullptr, ON_DEFAULT, nullptr, nullptr, ECA_DEFAULT };

    if ( trap_Argc() < 2 || trap_Argc() > 3 )
    {
        G_Printf( "usage: entityFire <entityNum> [<action>]\n" );
        return;
    }

    trap_Argv( 1, argument, sizeof( argument ) );
    entityNum = atoi( argument );

    if ( entityNum >= level.num_entities || entityNum < MAX_CLIENTS )
    {
        G_Printf( "invalid entityId %d\n", entityNum );
        return;
    }

    selection = &g_entities[entityNum];

    if (!selection->inuse)
    {
        G_Printf("entity slot %d is not in use\n", entityNum);
        return;
    }

    if( trap_Argc() >= 3 )
    {
        trap_Argv( 2, argument, sizeof( argument ) );
        callDefinition.action = argument;
        callDefinition.actionType = G_GetCallActionTypeFor( callDefinition.action );
    }

    G_Printf( "firing %s:%s\n", etos( selection ), callDefinition.action ? callDefinition.action : "default" );

    if(selection->names[0])
        callDefinition.name = selection->names[0];

    call.definition = &callDefinition;
    call.caller = &g_entities[ ENTITYNUM_NONE ];
    call.activator = &g_entities[ ENTITYNUM_NONE ] ;

    G_CallEntity(selection, &call);
}
示例#3
0
void G_ReorderCallTargets( gentity_t *ent )
{
	int i, j;
	// don't leave any "gaps" between multiple targets
	j = 0;
	for (i = 0; i < MAX_ENTITY_CALLTARGETS; ++i)
	{
		if (ent->calltargets[i].name) {
			ent->calltargets[j] = ent->calltargets[i];
			ent->calltargets[j].actionType = G_GetCallActionTypeFor(ent->calltargets[i].action);
			j++;
		}
	}
	ent->calltargets[ j ].name = NULL;
	ent->calltargets[ j ].action = NULL;
	ent->calltargets[ j ].actionType = ECA_NOP;
	ent->callTargetCount = j;
}