/* ================== NQD_ParseStufftext ================== */ static void NQD_ParseStufftext (void) { char *s; byte *p; if (msg_readcount + 7 <= net_message.cursize && net_message.data[msg_readcount] == 1 && net_message.data[msg_readcount + 1] == 7) { int num, ping; MSG_ReadByte(); MSG_ReadByte(); while ((ping = ReadPQShort()) != 0) { num = ping / 4096; if ((unsigned int)num >= nq_maxclients) Host_Error ("Bad ProQuake message"); cl.players[num].ping = ping & 4095; nq_drawpings = true; } // fall through to stufftext parsing (yes that's how it's intended by JPG) } s = MSG_ReadString (); Com_DPrintf ("stufftext: %s\n", s); for (p = (byte *)s; *p; p++) { if (*p > 32 && *p < 128) goto ok; } // ignore weird ProQuake stuff return; ok: Cbuf_AddTextEx (&cbuf_svc, s); }
double Movie_StartFrame(void) { double time; int views = 1; if (cl_multiview.value) { views = cl_multiview.value; } if (Cmd_FindAlias("f_captureframe")) { Cbuf_AddTextEx (&cbuf_main, "f_captureframe\n"); } // Default to 30 fps. time = (movie_fps.value > 0) ? (1.0 / movie_fps.value) : (1 / 30.0); return bound(1.0 / 1000, time / views, 1.0); }
void Cam_Lock(int playernum) { char st[32]; if (Cmd_FindAlias("f_trackspectate")) { Cbuf_AddTextEx (&cbuf_main, "f_trackspectate\n"); } if (cl_multiview.value && cls.mvdplayback) return; snprintf(st, sizeof (st), "ptrack %i", playernum); if (cls.mvdplayback) { memcpy(cl.stats, cl.players[playernum].stats, sizeof(cl.stats)); ideal_track = playernum; } last_lock = cls.realtime; if (cls.mvdplayback == QTV_PLAYBACK) { // its not setinfo extension, but adding new extension just for this is stupid IMO QTV_Cmd_Printf(QTV_EZQUAKE_EXT_SETINFO, st); } else { MSG_WriteByte (&cls.netchan.message, clc_stringcmd); MSG_WriteString (&cls.netchan.message, st); } spec_track = playernum; locked = false; Sbar_Changed(); if (TP_NeedRefreshSkins()) TP_RefreshSkins(); }
void TP_SearchForMsgTriggers (const char *s, int level) { msg_trigger_t *t; char *string; // message triggers disabled if (!tp_msgtriggers.value) return; // triggers banned by ruleset if (Rulesets_RestrictTriggers () && !cls.demoplayback && !cl.spectator) return; // we are in spec/demo mode, so play triggers if user want it if ((cls.demoplayback || cl.spectator) && cl_restrictions.value) return; for (t = msg_triggers; t; t = t->next) { if ((t->level == level || (t->level == 3 && level == 4)) && t->string[0] && strstr(s, t->string)) { if (level == PRINT_CHAT && ( strstr (s, "f_version") || strstr (s, "f_skins") || strstr(s, "f_fakeshaft") || strstr (s, "f_server") || strstr (s, "f_scripts") || strstr (s, "f_cmdline") || strstr (s, "f_system") || strstr (s, "f_speed") || strstr (s, "f_modified")) ) continue; // don't let llamas fake proxy replies if (cl.teamfortress && level == PRINT_HIGH && TP_IsFlagMessage (s)) continue; if ((string = Cmd_AliasString (t->name))) { strlcpy(vars.lasttrigger_match, s, sizeof (vars.lasttrigger_match)); Cbuf_AddTextEx (&cbuf_safe, va("%s\n", string)); } else { Com_Printf ("trigger \"%s\" has no matching alias\n", t->name); } } } }
void Cam_Unlock(void) { if (Cmd_FindAlias("f_freeflyspectate")) { Cbuf_AddTextEx (&cbuf_main, "f_freeflyspectate\n"); } if (!autocam) { return; } if (cls.mvdplayback == QTV_PLAYBACK) { // its not setinfo extension, but adding new extension just for this is stupid IMO QTV_Cmd_Printf(QTV_EZQUAKE_EXT_SETINFO, "ptrack"); } else { MSG_WriteByte (&cls.netchan.message, clc_stringcmd); MSG_WriteString (&cls.netchan.message, "ptrack"); } autocam = CAM_NONE; locked = false; Sbar_Changed(); if (cls.mvdplayback && cl.teamfortress) { V_TF_ClearGrenadeEffects (); } if (TP_NeedRefreshSkins()) { TP_RefreshSkins(); } }
void TP_ExecTrigger (char *trigger) { int i, j, numteammates = 0; cmd_alias_t *alias; if (!tp_triggers.value || ((cls.demoplayback || cl.spectator) && cl_restrictions.value)) return; for (i = 0; i < num_f_triggers; i++) { if (!strcmp (f_triggers[i].name, trigger)) break; } if (i == num_f_triggers) { Com_Printf ("Unknown f_trigger \"%s\"", trigger); return; } if (f_triggers[i].teamplay && !tp_forceTriggers.value) { if (!cl.teamplay) return; for (j = 0; j < MAX_CLIENTS; j++) if (cl.players[j].name[0] && !cl.players[j].spectator && j != cl.playernum) if (!strcmp(cl.players[j].team, cl.players[cl.playernum].team)) numteammates++; if (!numteammates) return; } if ((alias = Cmd_FindAlias (trigger))) { if (!(f_triggers[i].restricted && Rulesets_RestrictTriggers ())) { Cbuf_AddTextEx (&cbuf_main, va("%s\n", alias->value)); } } }
void Cbuf_AddText (const char *text) { Cbuf_AddTextEx (&cbuf_main, text); }