s1lentq / ReGameDLL_CS

:hammer: Reverse-engineered gamedll (CS 1.6 / CZero)
GNU General Public License v3.0
583 stars 203 forks source link

Server crashes when second player connects #6

Closed johnally closed 8 years ago

johnally commented 8 years ago

I downloaded the latest snapshot of ReGameDLL_CS from "http://nexus.rehlds.org/nexus/content/repositories/regamedll-snapshots/regamedll/regamedll/0.2-SNAPSHOT/". With both "bugfixed" and "pure", my server crashes as soon as a second player enters the servers. (Sometimes there's a small timelapse after the player entered and the server crashing)

I've cloned the repository and compiled the mp.dll myself. Still no luck!

I've disabled all custom plugins I've made and stripped my server to a point where debugging should be easier. Even with such changes, It was really hard to find the exact cause. At first, I thought it could have been the "cstrike_amxx" module but turns out even with the fix on dedicated-server.ru, it made no difference.

Here's some details about my server configuration:

screenshot_80

screenshot_81

screenshot_82

screenshot_83

screenshot_84

Your help is greatly appreciated :)

johnally commented 8 years ago

For more information, I'm using the latest HLDS installed with "app_update 90 validate" (SteamCMD) (Command was run multiple times because they said there is a bug)

screenshot_85

s1lentq commented 8 years ago
  1. check on a clean server without metamod. have a any crashes?
  2. why use mmtimer if you running with rehlds?
johnally commented 8 years ago
  1. I will do that as soon as I'm over with dishes. (But I can already fore-tell that that amxmodx is the cause. I can't disable the whole metamod plugin as I need 'Reunion'; I need a way to get in the server sadly)
  2. Good question. I will remove it. When I run it with rehlds, I get 2000fps. Without it I get 1000fps. But 1000fps is enough. I don't know why I keep leaving it there.

Thank you,

johnally commented 8 years ago

Amxmodx is NOT at fault. My bad. I disabled it alone to test and it still crashes. Right now people are playing in my server (8+ at the moment) with the following metamod/plugins.ini: win32 addons\reunion\reunion_mm.dll ;win32 addons\amxmodx\dlls\amxmodx_mm.dll ;win32 addons\revoice\revoice_mm.dll ;win32 addons\whblocker\whblocker.dll ;win32 addons\srdetector\srdetector.dll

When I disabled revoice, whblocker and srdetector, the server stopped crashing.

I renabled "revoice" and "srdetector" and the server stopped crashing :)

The final culprit is "whblocker". However, it is the same as http://www.dedicated-server.ru/vbb/showthread.php?t=25639 with default configuration file. Hmm..

P.S I re-read the thread and you said to specify the operating system which I did not do before. I'm running "Windows 10 Pro" (Build lab ex: 10586.17.amd64fre.th2_release.151121-2308)

s1lentq commented 8 years ago

try in whblocker setting "team" set to 1 this should your help.

P.S whblocker he can't find g_pGameRules in regamedll, for reason not binary compatibility.

johnally commented 8 years ago

Like you said, it worked indeed. However, I looked at what the "team" setting does and I'm baffled it solved the problem.

Can you explain why it worked? (I don't want to be the guy to remain ignorant in such situations lol)

s1lentq commented 8 years ago

setting "team" is 0 requires the presence of pointer g_pGameRules for to determine the enemy or teammate with using g_pGameRules->PlayerRelationship(object1, object2), but g_pGameRules we can't find in ReGameDLL_CS and call to a zero address we get crash.

johnally commented 8 years ago

Thank you a lot for your explanation. It makes more sense now. I did see that with ReGameDll that g_pGameRules was missing (From Fakemeta). However, I did not know WHBlocker was using it.

screenshot_86

Hope to see a future version of WHBlocker with the error handling.

Thanks again. (You are free to close that issue as it was resolved from a ReGameDll point of view)

coolmans commented 8 years ago

team = 1 server crash

Protocol version 48 Exe version 1.1.2.7/Stdio (cstrike) Exe build: 18:40:48 Dec 27 2015 (624) ReHLDS API version 2.5

[ 1] Reunion RUN - reunion_mm_i386. v0.1.57 ini Start Never [ 2] WHBlocker RUN - whblocker_mm_i38 v1.5.620 ini Chlvl ANY
[ 3] AMX Mod X RUN - amxmodx_mm_i386. v1.8.3-d ini Start ANY
[ 4] MySQL RUN - mysql_amxx_i386. v1.8.3-d pl3 ANY ANY
[ 5] Fun RUN - fun_amxx_i386.so v1.8.3-d pl3 ANY ANY
[ 6] Engine RUN - engine_amxx_i386 v1.8.3-d pl3 ANY ANY
[ 7] FakeMeta RUN - fakemeta_amxx_i3 v1.8.3-d pl3 ANY ANY
[ 8] GeoIP RUN - geoip_amxx_i386. v1.8.3-d pl3 ANY ANY
[ 9] CStrike RUN - cstrike_amxx_i38 v1.8.3-d pl3 ANY ANY
[10] CSX RUN - csx_amxx_i386.so v1.8.3-d pl3 ANY ANY
[11] Ham Sandwich RUN - hamsandwich_amxx v1.8.3-d pl3 ANY ANY

johnally commented 8 years ago

Indeed. It was rather unexpected that WHBlocker would make the whole server crash. Don't have access to the source code to patch it though. Will have to wait for s1lentq to take care of it.

P.S I just re-read. Read it wrong the first time. Any plugin that make use of "g_pGameRules" can crash the whole server if there is not a case being handled where "g_pGameRules" might not be present. For instance, FAKEMETA took care of it and disabled any functionality that made used of "g_pGameRules".

However, some plugins won't do that and expect "g_pGameRules" to be present. Obviously, ReGameDll is not binary compatible and that's why there is that issue.

For now, my only guess would be that you have a plugin (other than WHBlocker) that relies on "g_pGameRules" but does not handle its absence.

Try clearing your "amxmodx/config/plugins.ini" and see what happens. (This should prevent most of the amxx modules from auto-loading)

If you completely disable "WHBlocker", does it crash and when does it crash? At server load or when a second player joins the game?