?? cl.java
字號:
Netchan.OutOfBandPrint(Defines.NS_CLIENT, Globals.net_from, "ack"); return; } // challenge from the server we are connecting to if (c.equals("challenge")) { Globals.cls.challenge = Lib.atoi(Cmd.Argv(1)); SendConnectPacket(); return; } // echo request from server if (c.equals("echo")) { Netchan.OutOfBandPrint(Defines.NS_CLIENT, Globals.net_from, Cmd .Argv(1)); return; } Com.Printf("Unknown command.\n"); } /** * ReadPackets */ static void ReadPackets() { while (NET.GetPacket(Defines.NS_CLIENT, Globals.net_from, Globals.net_message)) { // // remote command packet // if (Globals.net_message.data[0] == -1 && Globals.net_message.data[1] == -1 && Globals.net_message.data[2] == -1 && Globals.net_message.data[3] == -1) { // if (*(int *)net_message.data == -1) ConnectionlessPacket(); continue; } if (Globals.cls.state == Defines.ca_disconnected || Globals.cls.state == Defines.ca_connecting) continue; // dump it if not connected if (Globals.net_message.cursize < 8) { Com.Printf(NET.AdrToString(Globals.net_from) + ": Runt packet\n"); continue; } // // packet from server // if (!NET.CompareAdr(Globals.net_from, Globals.cls.netchan.remote_address)) { Com.DPrintf(NET.AdrToString(Globals.net_from) + ":sequenced packet without connection\n"); continue; } if (!Netchan.Process(Globals.cls.netchan, Globals.net_message)) continue; // wasn't accepted for some reason CL_parse.ParseServerMessage(); } // // check timeout // if (Globals.cls.state >= Defines.ca_connected && Globals.cls.realtime - Globals.cls.netchan.last_received > Globals.cl_timeout.value * 1000) { if (++Globals.cl.timeoutcount > 5) // timeoutcount saves debugger { Com.Printf("\nServer connection timed out.\n"); Disconnect(); return; } } else Globals.cl.timeoutcount = 0; } // ============================================================================= /** * FixUpGender_f */ static void FixUpGender() { String sk; if (Globals.gender_auto.value != 0.0f) { if (Globals.gender.modified) { // was set directly, don't override the user Globals.gender.modified = false; return; } sk = Globals.skin.string; if (sk.startsWith("male") || sk.startsWith("cyborg")) Cvar.Set("gender", "male"); else if (sk.startsWith("female") || sk.startsWith("crackhor")) Cvar.Set("gender", "female"); else Cvar.Set("gender", "none"); Globals.gender.modified = false; } } public static void RequestNextDownload() { int map_checksum = 0; // for detecting cheater maps //char fn[MAX_OSPATH]; String fn; qfiles.dmdl_t pheader; if (Globals.cls.state != Defines.ca_connected) return; if (SV_MAIN.allow_download.value == 0 && CL.precache_check < ENV_CNT) CL.precache_check = ENV_CNT; // ZOID if (CL.precache_check == Defines.CS_MODELS) { // confirm map CL.precache_check = Defines.CS_MODELS + 2; // 0 isn't used if (SV_MAIN.allow_download_maps.value != 0) if (!CL_parse .CheckOrDownloadFile(Globals.cl.configstrings[Defines.CS_MODELS + 1])) return; // started a download } if (CL.precache_check >= Defines.CS_MODELS && CL.precache_check < Defines.CS_MODELS + Defines.MAX_MODELS) { if (SV_MAIN.allow_download_models.value != 0) { while (CL.precache_check < Defines.CS_MODELS + Defines.MAX_MODELS && Globals.cl.configstrings[CL.precache_check].length() > 0) { if (Globals.cl.configstrings[CL.precache_check].charAt(0) == '*' || Globals.cl.configstrings[CL.precache_check] .charAt(0) == '#') { CL.precache_check++; continue; } if (CL.precache_model_skin == 0) { if (!CL_parse .CheckOrDownloadFile(Globals.cl.configstrings[CL.precache_check])) { CL.precache_model_skin = 1; return; // started a download } CL.precache_model_skin = 1; } // checking for skins in the model if (CL.precache_model == null) { CL.precache_model = FS .LoadFile(Globals.cl.configstrings[CL.precache_check]); if (CL.precache_model == null) { CL.precache_model_skin = 0; CL.precache_check++; continue; // couldn't load it } ByteBuffer bb = ByteBuffer.wrap(CL.precache_model); bb.order(ByteOrder.LITTLE_ENDIAN); int header = bb.getInt(); if (header != qfiles.IDALIASHEADER) { // not an alias model FS.FreeFile(CL.precache_model); CL.precache_model = null; CL.precache_model_skin = 0; CL.precache_check++; continue; } pheader = new qfiles.dmdl_t(ByteBuffer.wrap( CL.precache_model).order( ByteOrder.LITTLE_ENDIAN)); if (pheader.version != Defines.ALIAS_VERSION) { CL.precache_check++; CL.precache_model_skin = 0; continue; // couldn't load it } } pheader = new qfiles.dmdl_t(ByteBuffer.wrap( CL.precache_model).order(ByteOrder.LITTLE_ENDIAN)); int num_skins = pheader.num_skins; while (CL.precache_model_skin - 1 < num_skins) { //Com.Printf("critical code section because of endian // mess!\n"); String name = Lib.CtoJava(CL.precache_model, pheader.ofs_skins + (CL.precache_model_skin - 1) * Defines.MAX_SKINNAME, Defines.MAX_SKINNAME * num_skins); if (!CL_parse.CheckOrDownloadFile(name)) { CL.precache_model_skin++; return; // started a download } CL.precache_model_skin++; } if (CL.precache_model != null) { FS.FreeFile(CL.precache_model); CL.precache_model = null; } CL.precache_model_skin = 0; CL.precache_check++; } } CL.precache_check = Defines.CS_SOUNDS; } if (CL.precache_check >= Defines.CS_SOUNDS && CL.precache_check < Defines.CS_SOUNDS + Defines.MAX_SOUNDS) { if (SV_MAIN.allow_download_sounds.value != 0) { if (CL.precache_check == Defines.CS_SOUNDS) CL.precache_check++; // zero is blank while (CL.precache_check < Defines.CS_SOUNDS + Defines.MAX_SOUNDS && Globals.cl.configstrings[CL.precache_check].length() > 0) { if (Globals.cl.configstrings[CL.precache_check].charAt(0) == '*') { CL.precache_check++; continue; } fn = "sound/" + Globals.cl.configstrings[CL.precache_check++]; if (!CL_parse.CheckOrDownloadFile(fn)) return; // started a download } } CL.precache_check = Defines.CS_IMAGES; } if (CL.precache_check >= Defines.CS_IMAGES && CL.precache_check < Defines.CS_IMAGES + Defines.MAX_IMAGES) { if (CL.precache_check == Defines.CS_IMAGES) CL.precache_check++; // zero is blank while (CL.precache_check < Defines.CS_IMAGES + Defines.MAX_IMAGES && Globals.cl.configstrings[CL.precache_check].length() > 0) { fn = "pics/" + Globals.cl.configstrings[CL.precache_check++] + ".pcx"; if (!CL_parse.CheckOrDownloadFile(fn)) return; // started a download } CL.precache_check = Defines.CS_PLAYERSKINS; } // skins are special, since a player has three things to download: // model, weapon model and skin // so precache_check is now *3 if (CL.precache_check >= Defines.CS_PLAYERSKINS && CL.precache_check < Defines.CS_PLAYERSKINS + Defines.MAX_CLIENTS * CL.PLAYER_MULT) { if (SV_MAIN.allow_download_players.value != 0) { while (CL.precache_check < Defines.CS_PLAYERSKINS + Defines.MAX_CLIENTS * CL.PLAYER_MULT) { int i, n; //char model[MAX_QPATH], skin[MAX_QPATH], * p; String model, skin; i = (CL.precache_check - Defines.CS_PLAYERSKINS) / CL.PLAYER_MULT; n = (CL.precache_check - Defines.CS_PLAYERSKINS) % CL.PLAYER_MULT; if (Globals.cl.configstrings[Defines.CS_PLAYERSKINS + i] .length() == 0) { CL.precache_check = Defines.CS_PLAYERSKINS + (i + 1) * CL.PLAYER_MULT; continue; } int pos = Globals.cl.configstrings[Defines.CS_PLAYERSKINS + i].indexOf('\\'); if (pos != -1) pos++; else pos = 0; int pos2 = Globals.cl.configstrings[Defines.CS_PLAYERSKINS + i].indexOf('\\', pos); if (pos2 == -1) pos2 = Globals.cl.configstrings[Defines.CS_PLAYERSKINS + i].indexOf('/', pos); model = Globals.cl.configstrings[Defines.CS_PLAYERSKINS + i] .substring(pos, pos2); skin = Globals.cl.configstrings[Defines.CS_PLAYERSKINS + i].substring(pos2 + 1); switch (n) { case 0: // model fn = "players/" + model + "/tris.md2"; if (!CL_parse.CheckOrDownloadFile(fn)) { CL.precache_check = Defines.CS_PLAYERSKINS + i * CL.PLAYER_MULT + 1; return; // started a download } n++; /* FALL THROUGH */ case 1: // weapon model fn = "players/" + model + "/weapon.md2"; if (!CL_parse.CheckOrDownloadFile(fn)) { CL.precache_check = Defines.CS_PLAYERSKINS + i * CL.PLAYER_MULT + 2; return; // started a download } n++; /* FALL THROUGH */ case 2: // weapon skin fn = "players/" + model + "/weapon.pcx"; if (!CL_parse.CheckOrDownloadFile(fn)) { CL.precache_check = Defines.CS_PLAYERSKINS + i * CL.PLAYER_MULT + 3; return; // started a download } n++; /* FALL THROUGH */ case 3: // skin fn = "players/" + model + "/" + skin + ".pcx"; if (!CL_parse.CheckOrDownloadFile(fn)) { CL.precache_check = Defines.CS_PLAYERSKINS + i * CL.PLAYER_MULT + 4; return; // started a download } n++; /* FALL THROUGH */ case 4: // skin_i fn = "players/" + model + "/" + skin + "_i.pcx"; if (!CL_parse.CheckOrDownloadFile(fn)) { CL.precache_check = Defines.CS_PLAYERSKINS + i * CL.PLAYER_MULT + 5; return; // started a download } // move on to next model CL.precache_check = Defines.CS_PLAYERSKINS + (i + 1) * CL.PLAYER_MULT; } } } // precache phase completed CL.precache_check = ENV_CNT; } if (CL.precache_check == ENV_CNT) { CL.precache_check = ENV_CNT + 1; int iw[] = { map_checksum }; CM.CM_LoadMap(Globals.cl.configstrings[Defines.CS_MODELS + 1], true, iw); map_checksum = iw[0]; if ((map_checksum ^ Lib .atoi(Globals.cl.configstrings[Defines.CS_MAPCHECKSUM])) != 0) { Com .Error( Defines.ERR_DROP, "Local map version differs from server: " + map_checksum + " != '" + Globals.cl.configstrings[Defines.CS_MAPCHECKSUM] + "'\n"); return; } } if (CL.precache_check > ENV_CNT && CL.precache_check < TEXTURE_CNT) { if (SV_MAIN.allow_download.value != 0 && SV_MAIN.allow_download_maps.value != 0) { while (CL.precache_check < TEXTURE_CNT) { int n = CL.precache_check++ - ENV_CNT - 1; if ((n & 1) != 0) fn = "env/" + Globals.cl.configstrings[Defines.CS_SKY] + env_suf[n / 2] + ".pcx"; else fn = "env/" + Globals.cl.configstrings[Defines.CS_SKY] + env_suf[n / 2] + ".tga"; if (!CL_parse.CheckOrDownloadFile(fn)) return; // started a download } } CL.precache_check = TEXTURE_CNT; } if (CL.precache_check == TEXTURE_CNT) { CL.precache_check = TEXTURE_CNT + 1; CL.precache_tex = 0; } // confirm existance of textures, download any that don't exist if (CL.precache_check == TEXTURE_CNT + 1) { // from qcommon/cmodel.c // extern int numtexinfo; // extern mapsurface_t map_surfaces[]; if (SV_MAIN.allow_download.value != 0 && SV_MAIN.allow_download_maps.value != 0) { while (CL.precache_tex < CM.numtexinfo) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -