Coder Social home page Coder Social logo

mvdsv's Introduction

MVDSV: a QuakeWorld server

MVDSV Logo

MVDSV (MultiView Demo SerVer) has been the most popular QuakeWorld server in the world for more than a decade because of its ability to record every player's point of view in a server side demo and provide many different game modes to enjoy QuakeWorld with.

Getting Started

The following instructions will help you get a MVDSV server up and running on your local machine from prebuilt binaries. Details on how to compile your own MVDSV binary will also be included to match specific architectures or for development purposes.

Supported architectures

The following architectures are fully supported by MVDSV and are available as prebuilt binaries:

  • Linux amd64 (Intel and AMD 64-bits processors)
  • Linux i686 (Intel and AMD 32-bit processors)
  • Linux aarch (ARM 64-bit processors)
  • Linux armhf (ARM 32-bit processors)
  • Windows x64 (Intel and AMD 64-bits processors)
  • Windows x86 (Intel and AMD 32-bit processors)

Prebuilt binaries

You can find the prebuilt binaries on this download page.

Prerequisites

None at the moment.

Installing

For more detailed information we suggest looking at the nQuake server, which uses MVDSV and KTX as QuakeWorld server.

Building binaries

Build from source with CMake

Assuming you have installed essential build tools and CMake

mkdir build && cmake -B build . && cmake --build build

Build artifacts would be inside build/ directory, for unix like systems it would be mvdsv.

You can also use build_cmake.sh script, it mostly suitable for cross compilation and probably useless for experienced CMake user. Some examples:

./build_cmake.sh linux-amd64

should build MVDSV for linux-amd64 platform, release version, check cross-cmake directory for all platforms

B=Debug ./build_cmake.sh linux-amd64

should build MVDSV for linux-amd64 platform with debug

V=1 B=Debug ./build_cmake.sh linux-amd64

should build MVDSV for linux-amd64 platform with debug, verbose (useful if you need validate compiler flags)

G="Unix Makefiles" ./build_cmake.sh linux-amd64

force CMake generator to be unix makefiles

./build_cmake.sh linux-amd64

build MVDSV for linux-amd64 version, you can provide any platform combinations.

Versioning

For the versions available, see the tags on this repository.

Authors

(Listed by last name alphabetic order)

  • Ivan Bolsunov - qqshka
  • Dominic Evans - oldman
  • Anton Gavrilov - tonik
  • Dmitry Musatov - disconnect
  • Peter Nicol - meag
  • Alexandre Nizoux - deurk
  • Tero Parkkonen - Renzo
  • Vladimir Vladimirovich - VVD

Names of those contributors have been lost but they have also helped with this project: bliP, danfe, hdworak, HighlandeR, jhodge, kreon, SD-Angel.

Code of Conduct

We try to stick to our code of conduct when it comes to interaction around this project. See the CODE_OF_CONDUCT.md file for details.

License

This project is licensed under the GPL-2.0 License - see the LICENSE.md file for details.

Acknowledgments

  • Thanks to Jon "bps" Cednert for the MVDSV logo.
  • Thanks to the fine folks on Quakeworld Discord for their support and ideas.

mvdsv's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mvdsv's Issues

Server-side weapon switching not always hiding weapon when cl_weaponhide set

With a decent ping, using +fire and having cl_weaponhide 1, quickly pressing the +fire bind will result in the weapon fired being kept out, as opposed to when manually configuring serverside weapons, eg

cmd wreg a +75234
cmd wreg z -1
alias +rl "cmd a;set lastattack rl;setinfo w_rank 75234"
alias -rl "if ($lastattack == 'rl') then cmd z"

Possible integer overflow in integer value sent to mod as seed value

in pr2_exec.c we cast sys_doubletime*100000 to an integer and send this to the mod, which uses it as a seed for random values, after a few hours of uptime this value can overflow.

src/pr2_exec.c: gamedata_ptr = (intptr_t) VM_Call(sv_vm, 2, GAME_INIT, (int)(sv.time * 1000), (int)(Sys_DoubleTime() * 100000), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

suggest we just use (int)Sys_DoubleTime() as this value just needs to be unique each time this is called (at game start), or just use epoch to make sure it's "always" a different value.

-reported by phylter and zorak

packetloss with low cpu load

Constant packetloss (3-5%). And no packet loss on the other servers at the same machine

Ubuntu 18;
Latest mvdsv server at the moment;

implement fte's sv_fullredirect

this feature is useful mainly for FFA mods, its at FTEsv from r3899
from fte.cfg file:

sv_fullredirect "" //This is the ip:port to redirect players to when the server is full

so when a player tries to join the server, but it is full, he is automatically redirected to another, with a proper message.

good for FFA servers. this way we can reduce the maxplayers of ffa server, making it less chaotic at busy times.

Slow firing sounds

ping up, fire sng - it sounds like you're firing slower
whats actually happening is that the packets arrive at the same time, so the sound over-writes itself and you only hear every second sound
doesn't happen on FTE

qtv disconnecting from newer mvdsv/ktx builds

ciscon: @meag fyi, i get qtv randomly disconnecting from servers using your fork of mvdsv/ktx whereas it doesn't appear to happen in official, so i'm assuming one of those fixes is freaking it out a bit
[3:08 PM] ciscon: scratch that, it's happening with the official build too, something recently
[3:09 PM] ciscon: in qtv i see this

image

[3:10 PM] ciscon: but no players exist via quakestat, and as soon as i connect to it, qtv disconnects (closing source, no errors)

binaries with missing source

Hi,

I'm planning on packaging mvdsv for Debian, and while reviewing the source tree I noticed that there are two binaries checked into the git repo:

  • tools/ml/build/x86/ml.exe
  • tools/gas2masm/build/x86/gas2masm.exe

While it seems that the latter can be built on Windows from the source (I haven't tested it), the former has no clear function or accompanying source. If that was the case it wouldn't be shippable in Debian. Can you tell me about the function of ml.exe? If it's just an artifact from cleaning up the repo, could you remove it from the next release?

[BUG] sv_demoremove *token doesn't work properly

Describe the bug
using sv_demoremove with token doesn't remove all demos with that token

To Reproduce
Steps to reproduce the behavior:

1- have a big list of demos (3000+)
2- type rcon sv_demoremove *]240315 to remove demos from that date
3- type rcon sv_demoremove *]240315 to remove demos from that date again

Expected behavior
all demos from that date are removed on the first command

What actually happens
The command removes a few demos, type again, and it removes a few more, and a few more get left behind

Environment(please complete the following information):

Operation System: [e.g. Windows, Linux, ...]: Ubuntu 20.04.3 LTS"
Processor Architecture: [e.g. x86, x86_64, arm7, ...] x86-64
MVDSV Version: mvdsv 0.35 antilag r115
KTX Version: 1.41 beta antilag r115

Additional context

demo file is not created after X amounts of bytes

There seems to be some hardcoded limit for file size for a demo. Certain matches overflow this (like a 10on10 on a big map), resulting in a not recorded demo.
Console text:
[2021-11-15 15:08:35] Embedding (./ktx/demoinfo_127.0.1.1_28501.json):
[2021-11-15 15:08:35] SZ_GetSpace: overflow: cur = 26512, len = 8084, max = 32408
[2021-11-15 15:08:35] Error in MVD/QTV recording, recording stopped
[2021-11-15 15:08:35] failed write to mvd/qtv
[2021-11-15 15:08:35] Not recording demo!

Travis builds and mac

I can add macOS to the Travis build process if you would like - has it been left out for a reason ?

Issue spectating a passworded server

when a server has a password there are some problems regarding the ability to spectate.

ok, the server is passworded, the first thing to do is to set the /password and/or /spectator_password right?? ok, done, on both.

but:

  • /observe doesn't work as intended
  • spectator 1 and /reconnect doesn't work.

my guess is that /spectator_password isn't doing what it is supposed to do.

-- start of mambo jambo --
The only way to spectate a FULL server with password is doing it like this, around the problem (doesn't work when the server isn't full):

  • set password
  • spectator 0 (yes, zero)
  • reconnect - it will try to connect as player. if the server is full (maxplayers), it will connect you as spectator instead! tada!!

-- end of mambo jambo --

also, spectator_password is being saved on the config. i guess password as well? is this ok?

Example server: fr.predze.dk:28503
i can give you pass on discord

Provide a `--help` CLI parameter

Would be great to be able to run mvdsv --help for a list of most command CLI parameters in case my brain doesn't remember them anymore.

Server crash while executing config

New nQuakeSV servers with mvdsv+ktx using the latest rekifork, which is nearly the latest mvdsv+ktx plus some antilag changes and protocol extension.

Have been pretty rock solid with lots of 4on4 activity and 10+ specs and qtv at the same time, except for 2 crashes:

[DP]BLooD_DoG — 01/24/2022
got a crash of one of my ports when @namtsui executed his config
ERROR: SZ_GetSpace: overflow without allowoverflow set (399/1056/1450)
we had just finished 4on4 schloss with a bunch of specs, yeti was downloading a demo
not sure if we were still in intermission or not

Then it happened again just now with the same error but different values:
ERROR: SZ_GetSpace: overflow without allowoverflow set (399/1056/1450)

Here's what happened just before the second crash:
ezquake675

Not sure about the cause but it's from common.c:

void *SZ_GetSpace (sizebuf_t *buf, const int length)
{
        void *data;

        if (buf->cursize + length > buf->maxsize)
        {
                if (!buf->allowoverflow)
                        Sys_Error ("SZ_GetSpace: overflow without allowoverflow set (%d/%d/%d)",
                                   buf->cursize, length, buf->maxsize);

                if (length > buf->maxsize)
                        Sys_Error ("SZ_GetSpace: %d/%d is > full buffer size",
                                   length, buf->maxsize);

                // because Con_Printf may be redirected
                Sys_Printf ("SZ_GetSpace: overflow: cur = %d, len = %d, max = %d\n",
                            buf->cursize, length, buf->maxsize);
                SZ_Clear (buf);
                buf->overflowed = true;
        }

        data = buf->data + buf->cursize;
        buf->cursize += length;

        return data;
}

Could use a man page

I've had trouble figuring out deploying this without the Nquakesv bundle; something I can't use as my server has now been migrated to FreeBSD. I've kinda sorta scrounged together bits and pieces of what I'm supposed to do, but ultimately I realized that what this server needs is a manual entry. Just a suggestion, thank you for your time.

[REQ] Improvements on MVDs .xml

I have one suggestion for improving the .xml that is generated with the .mvd
Maybe you have some too. Feel free to share in the comments.

Problem: Player names are not listed in team modes. So we can't filter by player names on https://hub.quakeworld.nu/demos/ on 2on2, 4on4, for example.
Suggestion: Add the names of the players that participated on the match to the .xml

old embedded pcre version

src/pcre/* contains an antique pcre (3?) version, that also gets statically linked into the binary during build. I'll see if I can update it to current versions, and also change the build to preferentially use the system version.

I'll see if I can get a working PR done today.

FYI, this is (with the missing man page) the only remaining blocker for including mvdsv in Debian.

Strange gravity physics after climbing out of fluids

If you are hit by a rocket explosion when climbing out of fluids, the knockback behaves strangely. Your vertical velocity does not get halted by a ceiling so you can 'levitate' against a ceiling rather than falling to the ground.

To reproduce, do a quad rocketjump when climbing out of lava onto a ledge on dm2. Compare with a quad rocketjump from lava when NOT climbing out onto a ledge (this behaves normally).

Demo example attached (first quad rj is 'normal', subsequent quad rjs have the bug):
gravbug.zip

Improved console

  • Clearer messages and logs
  • Descriptions of each command and cvar
  • Message categories
  • Support special keys (arrows, backspace, ...)

BUG: fix rcon_crypt for any size of time_t

diff --git a/src/common.h b/src/common.h
index 0bece51..a5999d0 100644
--- a/src/common.h
+++ b/src/common.h
@@ -231,4 +231,6 @@ qbool COM_FileExists(char *path);
 // Name comparison: case insensitive, red/white text insensitive
 int Q_namecmp(const char* s1, const char* s2);
 
+#define TIME_T_SIZE    8
+
 #endif /* !__COMMON_H__ */
diff --git a/src/sv_main.c b/src/sv_main.c
index 9629d9d..50091d5 100644
--- a/src/sv_main.c
+++ b/src/sv_main.c
@@ -1543,7 +1543,7 @@ int Rcon_Validate (char *client_string, char *password1)
                const char* digest = Cmd_Argv(1);
                const char* time_start = Cmd_Argv(1) + DIGEST_SIZE * 2;
 
-               if (strlen(digest) < DIGEST_SIZE * 2 + sizeof(time_t) * 2) {
+               if (strlen(digest) < DIGEST_SIZE * 2 + TIME_T_SIZE * 2) {
                        return 0;
                }
 
@@ -1552,9 +1552,9 @@ int Rcon_Validate (char *client_string, char *password1)
                        double difftime_server_client;
 
                        time(&server_time);
-                       for (i = 0; i < sizeof(client_time) * 2; i += 2) {
-                               client_time += (char2int((unsigned char)time_start[i]) << (4 + i * 4)) +
-                                              (char2int((unsigned char)time_start[i + 1]) << (i * 4));
+                       for (i = 0; i < TIME_T_SIZE * 2; i += 2) {
+                               client_time += ((time_t)char2int((unsigned char)time_start[i]) << (4 + i * 4)) +
+                                              ((time_t)char2int((unsigned char)time_start[i + 1]) << (i * 4));
                        }
                        difftime_server_client = difftime(server_time, client_time);
 

More information are here:
QW-Group/ezquake-source#719
QW-Group/ezquake-source#726

Compile with libcurl support

Should change the Travis build to include libcurl, so that results reporting works out of the box.
Less urgent, but would be good: also build with libcurl support for Windows (use dynamic linking).

BUG: laststats connectionless command responds with invalid json

Example

echo -e "\xff\xff\xff\xfflaststats 3" | nc -u -vvv -w 1 quake.se 28505
Connection to quake.se 28505 port [udp/*] succeeded!
����nlaststats 3
[
,
{"version": 3,"date": "2023-02-23 20:21:24 +0100","map": "dm2","hostname": "QUAKE.SE KTX:28501"},
]

Related code

mvdsv/src/sv_demo_misc.c

Lines 1035 to 1107 in 971e7de

#define STATS_LIMIT_DEFAULT 10
#define STATS_LIMIT_MAX 50
void SV_LastStats_f (void)
{
int limit = STATS_LIMIT_DEFAULT;
int i;
char buf[512];
FILE *f = NULL;
char path[MAX_OSPATH];
dir_t dir;
extern redirect_t sv_redirected;
if (sv_redirected != RD_PACKET)
{
return;
}
if (Cmd_Argc() > 2)
{
Con_Printf("usage: laststats [<limit>]\n<limit> = '0' for last %i stats\n<limit> = 'n' for last n stats (max %i)\n<limit> = '' (empty) for last %i stats\n", STATS_LIMIT_MAX, STATS_LIMIT_MAX, STATS_LIMIT_DEFAULT);
return;
}
else if (Cmd_Argc() == 2)
{
limit = Q_atoi(Cmd_Argv(1));
if (limit <= 0 || limit > STATS_LIMIT_MAX)
{
limit = STATS_LIMIT_MAX;
}
}
dir = Sys_listdir(va("%s/%s", fs_gamedir, sv_demoDir.string), sv_demoRegexp.string,
SORT_BY_DATE);
if (!dir.numfiles)
{
Con_Printf("laststats 0:\n");
Con_Printf("[]\n");
return;
}
if (limit > dir.numfiles)
{
limit = dir.numfiles;
}
Con_Printf("laststats %i\n", limit);
Con_Printf("[\n");
for (i = dir.numfiles - limit; i < dir.numfiles; i++)
{
snprintf(path, MAX_OSPATH, "%s/%s/%s", fs_gamedir, sv_demoDir.string,
SV_MVDName2Txt(dir.files[i].name));
if ((f = fopen(path, "rt")) != NULL)
{
if (i != dir.numfiles - limit)
{
Con_Printf(",\n");
}
while (fread(buf, 1, sizeof(buf)-1, f))
{
Con_Printf("%s", (unsigned char*)buf);
memset(buf, 0, sizeof(buf));
}
fclose(f);
}
}
Con_Printf("\n]\n");
}


In the example above , is printed as the first entry. Could it be because we are reading the stats file for the demo of current game (which is empty)? Also there is an invalid trailing comma at the second entry.

We should iterate a Sys_listdir() call with the stats files, instead of using the demo files (sv_demoRegexp).

Example

// STATS_FILE_REGEX = "\\.mvd\\.txt$"
dir = Sys_listdir(va("%s/%s", fs_gamedir, sv_demoDir.string), STATS_FILE_REGEX, SORT_BY_DATE); 

User info spam detection kicks players when game is paused

Code: sv_user.c/Cmd_SetInfo_f()

realtime doesn't increase, so the player will be kicked after /sv_kickuserinfospamcount userinfo changes.
More of an issue with newer clients that set 'chat' userinfo, as players speaking to each other while game is paused will result in them being kicked.

Comprehensive documentation of the config options

Would be nice to have a list of all the config options you can set in the config. Docs you find on the 'net for QuakeWorld don't really match up with mvdsv anymore that has evolved in the last 20 years.

Windows installation/deployment instructions

The Installing section of the README defers to nQuake server, but that project only documents use on Linux.

It's exciting that the Prebuilt Binaries section of the README lists Windows support. But I'm not finding any documentation and how to install and deploy on Windows.

This GitHub Issue is Done once the README includes instructions for how to actually play via an MVDSV server running on Windows using the prebuilt binaries.

compiling / running on x64_86

i build the executable on a fresh ubuntu 14.04.4 and when i tried to run mvdsv i got

ERROR: SV_Error: PR_ExecuteProgram: NULL function

after googling i found you had to pass a param to make

make FORCE32BITFLAGS=-m32

the compile threw errors but

apt-get install gcc-multilib

fixed it

Rename cs_* commands

We can't have cvars, commands or aliases that start with cs_ in a Quakeworld mod!
This "central server (cs)" feature needs to be named differently (ex "central repository (cr)" or something)

Docker

Does this have docker container? Is it possible to run this in docker?

Trouble running on Alpine Linux

Hi!
I'm trying to run mvdsv on Alpine Linux (from this docker container), and I get this error:

VM_Load: "qwprogs"
ERROR: SV_Error: PR1_LoadProgs: couldn't load progs.dat

I tried this with mvdsv from the nquake package ( https://github.com/nQuake/server-linux/raw/master/releases/nquakesv_installer-linux-latest.tar.gz ), and also with a fresh build from this repo.

Outside of my mvdsv binary, I'm using all the files installed from the nquake Linux server installer script (so my qwprogs.so is the same).

I've set up and run nquake servers on Ubuntu and Fedora before, so this is unlikely to be user error.
Any ideas what could be going wrong? I'm not sure if anyone has tried on Alpine before...

[BUG] sv_demoClearOld doesn't work

Describe the bug
I have set sv_demoClearOld and sv_demoMaxDirSize but it just doesn't work

To Reproduce
Steps to reproduce the behavior:
1- Set sv_demoMaxDirSize 2048000
2- Set sv_demoClearOld 10
3- Play a lot and see your demo dir size surpass 2gb

Expected behavior
Everytime that the dirsize reaches 2gb delete the last 10 demos

What actually happens
Nothing

Environment(please complete the following information):

Operation System: [e.g. Windows, Linux, ...]: Ubuntu 20.04.3 LTS"
Processor Architecture: [e.g. x86, x86_64, arm7, ...] x86-64
MVDSV Version: mvdsv 0.35 antilag r115
KTX Version: 1.41 beta antilag r115

Additional context
sv_demoremove *token also has bugs, so no tools provided by mvdsv work to do demo maintenance, have to delete the files manually

Fixed build error messages

../src/mathlib.c: In function ‘PerpendicularVector’:
../src/mathlib.c:72:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   VectorNormalizeFast(dst);
   ^
../src/mathlib.c:72:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
../src/net.c: In function ‘NetadrToSockadr’:
../src/net.c:242:11: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  ((struct sockaddr_in*)s)->sin_addr.s_addr = *(int *)&a->ip;
           ^
../src/net.c: In function ‘SockadrToNetadr’:
../src/net.c:249:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  *(int *)&a->ip = ((struct sockaddr_in *)s)->sin_addr.s_addr;
  ^
../src/net.c: In function ‘NET_GetTCPPacket_SV’:
../src/net.c:746:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   message->cursize = BigShort(*(short*)st->inbuffer);
   ^
../src/net.c: In function ‘NET_GetLocalAddress’:
../src/net.c:1253:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  if (!*(int*)out->ip) //socket was set to auto
  ^
../src/net.c:1254:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(int *)out->ip = *(int *)adr.ip; //change it to what the machine says it is, rather than the socket.
   ^
../src/net.c:1254:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
../src/net.c:1235:8: warning: variable ‘notvalid’ set but not used [-Wunused-but-set-variable]
  qbool notvalid = false;
        ^
../src/pr2_edict.c: In function ‘ED2_FindFieldOffset’:
../src/pr2_edict.c:54:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    return f->ofs-((int)&(((edict_t *)0)->v));
                   ^
../src/sv_demo.c: In function ‘SV_MVD_Record’:
../src/sv_demo.c:1105:21: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
   memset(&demo, 0, ((int)&(((demo_t *)0)->mem_set_point)));
                     ^
../src/sv_phys.c: In function ‘SV_CheckVelocity’:
../src/sv_phys.c:96:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   if (IS_NAN(ent->v.velocity[i]))
   ^
../src/sv_phys.c:101:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   if (IS_NAN(ent->v.origin[i]))
   ^
../src/vfs_os.c: In function ‘FSOS_ReadFile’:
../src/vfs_os.c:249:7: warning: ignoring return value of ‘fread’, declared with attribute warn_unused_result [-Wunused-result]
  fread(buffer, 1, loc->len, f);
       ^
../src/sv_main.c: In function ‘Rcon_Validate’:
../src/sv_main.c:1514:3: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
   SHA1_Update((unsigned char*)Cmd_Argv(0));
   ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c:1515:3: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
   SHA1_Update((unsigned char*)" ");
   ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c:1516:3: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
   SHA1_Update((unsigned char*)password1);
   ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c:1517:3: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
   SHA1_Update((unsigned char*)Cmd_Argv(1) + DIGEST_SIZE * 2);
   ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c:1518:3: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
   SHA1_Update((unsigned char*)" ");
   ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c:1520:4: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
    SHA1_Update((unsigned char*)Cmd_Argv(i));
    ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c:1521:4: warning: pointer targets in passing argument 1 of ‘SHA1_Update’ differ in signedness [-Wpointer-sign]
    SHA1_Update((unsigned char*)" ");
    ^
In file included from ../src/qwsvdef.h:76:0,
                 from ../src/sv_main.c:22:
../src/sha1.h:61:6: note: expected ‘char *’ but argument is of type ‘unsigned char *’
 void SHA1_Update (char* data);
      ^
../src/sv_main.c: In function ‘StringToFilter’:
../src/sv_main.c:1975:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  f->mask = *(unsigned *)m;
  ^
../src/sv_main.c:1976:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  f->compare = *(unsigned *)b;
  ^
../src/sv_main.c: In function ‘SV_ListIPVIP_f’:
../src/sv_main.c:2060:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(unsigned *)b = ipvip[i].compare;
   ^
../src/sv_main.c: In function ‘SV_WriteIPVIP_f’:
../src/sv_main.c:2090:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(unsigned *)b = ipvip[i].compare;
   ^
../src/sv_main.c: In function ‘SV_ListIP_f’:
../src/sv_main.c:2204:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(unsigned *)b = ipfilters[i].compare;
   ^
../src/sv_main.c: In function ‘SV_WriteIP_f’:
../src/sv_main.c:2246:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(unsigned *)b = ipfilters[i].compare;
   ^
../src/sv_main.c:2260:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(unsigned *)b = ipfilters[i].compare;
   ^
../src/sv_main.c: In function ‘SV_FilterPacket’:
../src/sv_main.c:2297:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  in = *(unsigned *)net_from.ip;
  ^
../src/sv_main.c: In function ‘Do_BanList’:
../src/sv_main.c:2321:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   *(unsigned *)b = ipfilters[i].compare;
   ^
../src/sv_main.c: In function ‘SV_Cmd_Banip_f’:
../src/sv_main.c:2572:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  *(unsigned *)b = f.compare;
  ^
../src/sv_main.c: In function ‘SV_Cmd_Banremove_f’:
../src/sv_main.c:2618:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  *(unsigned *)b = ipfilters[id].compare;
  ^
../src/sv_main.c: In function ‘SV_VIPbyIP’:
../src/sv_main.c:2637:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  in = *(unsigned *)adr.ip;
  ^
../src/vfs_pak.c: In function ‘FSPAK_LoadPackFile’:
../src/vfs_pak.c:297:6: warning: variable ‘read’ set but not used [-Wunused-but-set-variable]
  int read;
      ^
../src/pcre/pcre.c: In function ‘pcre_compile’:
../src/pcre/pcre.c:5596:28: warning: ‘reqbyte’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   re->req_byte = ((reqbyte & REQ_CASELESS) != 0 &&
                            ^
../src/pcre/pcre.c:5574:8: warning: ‘firstbyte’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     if (firstbyte < 0)
        ^

Fix for build on FreeBSD

freebsd-amd64.cmake:

# the name of the target operating system
set(CMAKE_SYSTEM_NAME FreeBSD)
set(CMAKE_SYSTEM_PROCESSOR amd64)

# which compilers to use for C and C++
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

can't see spectators talk all of the time

as a normal player you cannot always see spectators talk. if two players are in a game, one goes spectator, and then says something, the actual player will not see it. on the spectator's screen they will see their message and it will be prefaced with "spec". if the other player is to then go spectator, they will see eachother's messages and they will no longer be prefaced with "spec". if one of those players is to then go back to non-spectator, they will see eachother's messages and neither will be prefaced as "spec" even though one of the players is a spectator.

Server sometimes not registering +attack from clients and related button0 stuff

We're using a 0.33 MVDSV since 1 year ago, to run the PROZAC CustomTF mod in qwprogs.dat VM format, and noticed that playing on our servers, especially high ping players, get issues with not registering the attack button. It may happen 1 out of 5 maps during 15 minutes or so. Or not happen at all, but when it does it's annoying as hell and game-breaking. For some reason it seems to happen on high ping (>140) clients more often. When it happens you need to press the attack button twice, as the first doesn't go through.

Also, don't know if related or not, but MVDSV even older versions look to have a bug that makes players sometimes spawn with +attack, so they need to type -attack in console to get correct behaviour. As I said dunno if related, maybe...

Any information is welcome!

You may check all the source code we currently use on https://gitlab.com/prozac-customtf

Server dying after about 90 seconds

Hey I'm running 0.31 fine at qw://fortressone.ga

Compiled 0.32 and swapped out the binary and the server crashes after about 90 seconds with:

sv_error: Program error

At least that's what I get in the client. I'm all yours to troubleshoot the issue. Hoping to use bsp2 so any tips are appreciated.

Create a possibility to mark a certain part of a running match for game highlights

The idea is to be able to mark a part in a demo while the demo is recorded, so later a video editor can use these markings for highlights of the game.

Original idea is from vampir.

Ideally this is possible during the game, with a special bind. So players don't need to rewatch the demo. They just mark a moment during the game.

change the allowed rate limit

the client's rate command is limited programmatically to 100000 (100kbs).
when #44 is done, this limit can be reached with 2 or 3 duplicated packets.

I suggest changing this limit to 500000.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.