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 ); }
__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); }
__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 ); } }