X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fmain.qc;h=1695f21e5bb81c0e6c921304c6e77beee5b82fb8;hb=6491b766d925a1088212e86cf4767d4be7bf6a4f;hp=327a9edf877667958d07ba8a278051c00583181d;hpb=6981a613dda2452a4dd9e41be7c25113078dc219;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 327a9edf8..1695f21e5 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -96,6 +96,9 @@ void CSQC_Init() registercvar("cl_weapon_switch_fallback_to_impulse", "1"); registercvar("cl_allow_uidranking", "1"); + + // z411 + registercvar("cl_chat_sounds", "1"); if(autocvar_cl_lockview) cvar_set("cl_lockview", "0"); @@ -793,6 +796,8 @@ NET_HANDLE(ENT_CLIENT_RANDOMSEED, bool isnew) NET_HANDLE(ENT_CLIENT_ACCURACY, bool isnew) { make_pure(this); + float entnum = ReadByte(); + int sf = ReadInt24_t(); if (sf == 0) { for (int w = 0; w <= WEP_LAST - WEP_FIRST; ++w) @@ -803,13 +808,22 @@ NET_HANDLE(ENT_CLIENT_ACCURACY, bool isnew) int f = 1; for (int w = 0; w <= WEP_LAST - WEP_FIRST; ++w) { if (sf & f) { - int b = ReadByte(); - if (b == 0) - weapon_accuracy[w] = -1; - else if (b == 255) - weapon_accuracy[w] = 1.0; // no better error handling yet, sorry - else - weapon_accuracy[w] = (b - 1.0) / 100.0; + if(entnum > 0) { + playerslots[entnum-1].accuracy_frags[w] = ReadByte(); + playerslots[entnum-1].accuracy_hit[w] = ReadShort(); + playerslots[entnum-1].accuracy_cnt_hit[w] = ReadShort(); + playerslots[entnum-1].accuracy_cnt_fired[w] = ReadShort(); + + //LOG_INFOF("Duel stats ?/%d", playerslots[entnum-1].accuracy_cnt_fired[w]); + } else { + int b = ReadByte(); + if (b == 0) + weapon_accuracy[w] = -1; + else if (b == 255) + weapon_accuracy[w] = 1.0; // no better error handling yet, sorry + else + weapon_accuracy[w] = (b - 1.0) / 100.0; + } } f = (f == 0x800000) ? 1 : f * 2; } @@ -1114,6 +1128,11 @@ NET_HANDLE(ENT_CLIENT_INIT, bool isnew) serverflags = ReadByte(); g_trueaim_minrange = ReadCoord(); + + strcpy(hostname_full, ReadString()); + strcpy(motd_permanent, ReadString()); + + sv_timer_countdown = ReadByte(); return = true; @@ -1122,6 +1141,27 @@ NET_HANDLE(ENT_CLIENT_INIT, bool isnew) if (!postinit) PostInit(); } +NET_HANDLE(TE_CSQC_TEAMNAMES, bool isNew) +{ + teamname_red = strzone(ReadString()); + teamname_blue = strzone(ReadString()); + teamname_yellow = strzone(ReadString()); + teamname_pink = strzone(ReadString()); + + return = true; +} + +NET_HANDLE(TE_CSQC_CHATSOUND, bool isNew) +{ + string snd = ReadString(); + snd = strcat("chat/", snd, ".ogg"); + + precache_sound(snd); + _sound(NULL, CH_INFO, snd, VOL_BASE, ATTN_NONE); + + return = true; +} + float GetSpeedUnitFactor(int speed_unit) { switch(speed_unit) @@ -1402,18 +1442,18 @@ bool net_handle_ServerWelcome() campaign = ReadByte(); if (campaign) { - string campaign_title = ReadString(); int campaign_level = ReadByte(); - string campaign_msg = ReadString(); - string welcomedialog_args; - welcomedialog_args = strcat("HOSTNAME \"", campaign_title, "\""); + // Menu can't build the whole campaign message because it lacks getcommandkey and CCR + // so we build part of the message here and let the menu insert the level description + // (that client doesn't know) by replacing the keyword _LEVEL_DESC string key = getcommandkey(_("jump"), "+jump"); string msg = strcat( CCR("^F1"), sprintf(_("Level %d:"), campaign_level), - sprintf(CCR(" ^BG%s\n^3\n"), campaign_msg), + sprintf(CCR(" ^BG%s\n\n"), "_LEVEL_DESC"), sprintf(CCR(_("^BGPress ^F2%s^BG to enter the game")), key)); msg = MakeConsoleSafe(strreplace("\n", "\\n", msg)); - welcomedialog_args = strcat(welcomedialog_args, " WELCOME \"", msg, "\""); + string welcomedialog_args = strcat("CAMPAIGN ", itos(campaign_level), " \"", msg, "\""); + localcmd("\nmenu_cmd directmenu Welcome ", welcomedialog_args, "\n"); return true; }