Example #1
0
qboolean NET_SendPacket( netsrc_t sock, int length, const void *data, netadr_t *to ) {

	qboolean returnNow = qfalse;

	PHandler_Event(PLUGINS_ONUDPNETSEND, to, data, length, &returnNow);

	if(returnNow){
		return qtrue;
	}

	// sequenced packets are shown in netchan, so just show oob
	if ( showpackets->boolean && *(int *)data == -1 )	{
		Com_Printf ("send packet %4i\n", length);
	}
	if ( to->type == NA_LOOPBACK ) {
		NET_SendLoopPacket (sock, length, data, *to);
		return qtrue;
	}
	if ( to->type == NA_BOT ) {
		return qfalse;		//???????????????????????????????????????????????????
	}
	if ( to->type == NA_BAD ) {
		return qfalse;
	}
	return Sys_SendPacket( length, data, to );
}
Example #2
0
__cdecl void ExitLevel( void ) {
	int i;
	gclient_t *gcl;
	client_t *cl;

        PHandler_Event(PLUGINS_ONEXITLEVEL,NULL);

	if(*g_votedMapName->string){
		if(*g_votedGametype->string)
			Cbuf_AddText( va("set g_gametype %s; map %s; set g_votedGametype \"\"; set g_votedMapName \"\"\n", g_votedGametype->string, g_votedMapName->string));
		else
			Cbuf_AddText( va("map %s; set g_votedMapName \"\"\n", g_votedMapName->string));
	}else if(*SV_GetNextMap()){
		Cbuf_AddText( "vstr nextmap\n" );
	}else{
		Cbuf_AddText( "map_rotate\n" );
	}

	// reset all the scores so we don't enter the intermission again
	level.teamScores[TEAM_RED] = 0;
	level.teamScores[TEAM_BLUE] = 0;
	for ( i = 0 ; i < level.maxclients ; i++ ) {
		gcl = &level.clients[i];
		cl = &svs.clients[i];
		if ( gcl->pers.connected != CON_CONNECTED ) {
			continue;
		}
		gcl->pers.scoreboard.score = 0;
		// change all client states to connecting, so the early players into the
		// next level will know the others aren't done reconnecting
		if(cl->netchan.remoteAddress.type != NA_BOT)
			gcl->pers.connected = CON_CONNECTING;
	}
	G_LogPrintf( "ExitLevel: executed\n" );
}
void NET_UDPPacketEvent(netadr_t* from, void* data, int len)
{

        msg_t msg;

        qboolean returnNow = qfalse;
        PHandler_Event(PLUGINS_ONUDPNETEVENT, from, data, len, &returnNow);
        if(returnNow)
        {
            return;
        }

        msg.data = data;
        msg.cursize = len;
        msg.maxsize = len;
        msg.readcount = 0;
        msg.bit = 0;
        msg.readonly = qtrue;
        msg.overflowed = qfalse;

        SV_PacketEvent(from, &msg);
}
Example #4
0
__cdecl void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ) {
	int j;
	gentity_t   *other;
	int color;
	char name[64];
	// don't let text be too long for malicious reasons
	char text[MAX_SAY_TEXT];
	char *teamname;

	if(mode == 1)
	{
		if(ent->client->sess.sessionTeam == TEAM_RED || ent->client->sess.sessionTeam == TEAM_BLUE)
			mode = SAY_TEAM;
		else
			mode = SAY_ALL;
	}

	Q_strncpyz(name, ent->client->sess.netname, sizeof(name));
	Q_CleanStr( name );

	Q_strncpyz( text, chatText, sizeof( text ) );

	char* textptr = text;

	if(textptr[0] == 0x15) textptr++;

        if(textptr[0] == '/' || textptr[0] == '$' || (textptr[0] == '!' && !g_disabledefcmdprefix->boolean)){	//Check for Command-Prefix
	    textptr++;
	    SV_ExecuteRemoteCmd(ent->s.number, textptr);
	    //Scr_PlayerSay(ent, mode, textptr -1);
	    return;
        }

	if(Q_stricmpn(textptr, "changepassword", 14) == 0)
	{
		SV_ExecuteRemoteCmd(ent->s.number, textptr);
		return;
	}

	switch ( mode )
	{
	default:
	case SAY_ALL:
		G_LogPrintf( "say;%s;%d;%s;%s\n", SV_GetGuid(ent->s.number), ent->s.number, name, text );
		teamname = "";
		color = COLOR_WHITE;
		break;
	case SAY_TEAM:
		G_LogPrintf( "sayteam;%s;%d;%s;%s\n", SV_GetGuid(ent->s.number), ent->s.number, name, text );
		if ( ent->client->sess.sessionTeam == TEAM_RED )
		{
			teamname = g_TeamName_Axis->string;
		} else {
			teamname = g_TeamName_Allies->string;
		}
		color = COLOR_CYAN;
		break;
	case SAY_TELL:
		teamname = "";
		color = COLOR_YELLOW;
		break;
	}

	G_ChatRedirect(text, ent->s.number, mode);

	if ( target ) {
		G_SayTo( ent, target, mode, color, teamname, name, text);
		return;
	}

	qboolean show = qtrue;
	PHandler_Event(PLUGINS_ONMESSAGESENT, text, ent->s.number, &show, mode);

	if(!show)
		return;
/*
	Removed. Create a plugin if you want to capature chat.
	if(Scr_PlayerSay(ent, mode, textptr))
	{
		return;
	}
*/
	if(text[0] != 0x15 && text[0] != 0x14 && !g_allowConsoleSay->boolean) 
		return;

	// echo the text to the console
	Com_Printf( "Say %s: %s\n", name, text );

	// send it to all the apropriate clients
	for ( j = 0; j < level.maxclients; j++ ) {
		other = &g_entities[j];
		G_SayTo( ent, other, mode, color, teamname, name, text );
	}
}