AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Extensions (https://forums.alliedmods.net/forumdisplay.php?f=134)
-   -   SourceTV Manager (https://forums.alliedmods.net/showthread.php?t=280402)

Peace-Maker 03-15-2016 10:48

SourceTV Manager
 
SourceTV Manager

Interface to interact with the SourceTV server from SourcePawn.
https://github.com/peace-maker/sourcetvmanager

Lets you access SourceTV servers and interact with the spectators as well as handle demo recording.

API
There are a few natives and forwards in the include file for
  • Basic SourceTV information (stats, delay, active)
  • Interacting with spectators (chat/console messages, kick, ip, name)
  • Forcing camera shots on the director
  • Demo recording (filename, recording tick, print message to demo console)

Steam authentication
By default, SourceTV spectators aren't authenticated with Steam. This extension adds a
tv_force_steamauth convar to enable authentication on spectator clients.
Currently this prevents SourceTV relay proxy clients from connecting though :(

"status" command in demos
There is special effort done in this extension to have the "status" output recorded in SourceTV demos, so you can easily identify players when watching the demo. Just do
PHP Code:

FakeClientCommand(SourceTV_GetBotIndex(), "status"); 

I've only tested this in CS:GO and CS:S, but the TF2 gamedata was the same as CS:S, so odds are good it's working on all OBV games.

Download

Nightly build

Sourcecode
Gamedata

Look here for examples how to use the natives.

Thanks to GoD-Tony and asherkin.

Emp` 03-15-2016 12:58

Re: SourceTV Manager
 
Looks good, absolutely useful :bacon:

Φ ϴ

good_live 03-16-2016 02:24

Re: SourceTV Manager
 
Nice one. Goign to check it out later :)

nosoop 03-16-2016 19:06

Re: SourceTV Manager
 
The extension appears to be calling the SourceTV_OnSpectatorPutInServer forward multiple times for the same SourceTV client, an additional one per connect.

It also doesn't seem to be calling SourceTV_OnSpectatorDisconnect or the disconnected variation.

Edit: This is occurring on Team Fortress 2.

Here's some server console spew from the test plugin.

Client "Pikachu on LSD" connected (*:27005).
SourceTV client 1 connected. (isconnected 1)
SourceTV spectator is connecting! Name: Pikachu on LSD, pw: *, ip: *
*:27005:reconnect
Dropped Pikachu on LSD from server (Connection closing)
Client "Pikachu on LSD" connected (*:27005).
SourceTV client 1 connected. (isconnected 1)
SourceTV client 1 put in server.
SourceTV client 1 put in server.
SourceTV client 1 put in server.
SourceTV client 1 put in server.
SourceTV client 1 put in server.
SourceTV client 1 put in server.
[omitted a bunch more]
Dropped Pikachu on LSD from server (Disconnect by user.)
sm plugins unload sourcetv_test
[SM] Plugin sourcetv_test.smx unloaded successfully.


Awesome work though; I've been wanting some SourceTV support.

Peace-Maker 03-17-2016 07:38

Re: SourceTV Manager
 
1 Attachment(s)
Quote:

Originally Posted by nosoop (Post 2403132)
The extension appears to be calling the SourceTV_OnSpectatorPutInServer forward multiple times for the same SourceTV client, an additional one per connect.

It also doesn't seem to be calling SourceTV_OnSpectatorDisconnect or the disconnected variation.

Are you on linux?

EDIT: Try the attached version including this change. It's all been about not catching spectator disconnects, so they weren't unhooked. The extension added another hook on the same cached hltvclient instance when a new spectator joined on the same slot, so OnSpectatorPutInServer was called multiple times.

nosoop 03-17-2016 17:01

Re: SourceTV Manager
 
Yeah, forgot to mention I'm on Linux. New one works as expected; thanks!

good_live 04-11-2016 14:49

Re: SourceTV Manager
 
My Server keeps crashing, whenever im trying to start to record a demo.

Game: CS:GO
Sourcemod Version: 1.7

Root: Debian 8

Crashreport: https://crash.limetech.org/oomotcfsdgud

Would be nice if you could take a look at it.

iGANGNAM 04-12-2016 01:22

Re: SourceTV Manager
 
I haven't tried this yet, but I can say it would save alot of time...
Is there any possibility to cut demo?

I would love to see this extension cooperating with this plugin https://forums.alliedmods.net/showthread.php?t=279296

Peace-Maker 04-12-2016 04:16

Re: SourceTV Manager
 
Quote:

Originally Posted by iGANGNAM (Post 2410309)
I haven't tried this yet, but I can say it would save alot of time...
Is there any possibility to cut demo?

I would love to see this extension cooperating with this plugin https://forums.alliedmods.net/showthread.php?t=279296

Cut the demo? What do you have in mind?


I'll have a look at the crash later.

iGANGNAM 04-12-2016 13:28

Re: SourceTV Manager
 
Quote:

Originally Posted by Peace-Maker (Post 2410318)
Cut the demo? What do you have in mind?


I'll have a look at the crash later.

Let's say that map has 20 minutes and player was banned on 9 minute of the map so it could cut demo and it would be only from 4 minute to 9 min only (instead of 20 mins) and than it could be easily uploaded to sourcebans and attached as demo of course. (https://forums.alliedmods.net/showthread.php?t=279296)
So main thing that "MAIN" demo should not be stopped because other player can be banned like after few mins.

I bet 100% would love this feature! :)

8guawong 04-15-2016 05:33

Re: SourceTV Manager
 
sorry i'm noob
could some1 tell me when this extension would be of use?

nosoop 04-16-2016 04:20

Re: SourceTV Manager
 
Quote:

Originally Posted by 8guawong (Post 2411178)
sorry i'm noob
could some1 tell me when this extension would be of use?

If you're not running SourceTV, then this wouldn't be useful to you at all.

Otherwise, it provides a few new possibilities:
  • Sending messages that can only be seen by spectators (and won't show up in the demo).
  • Using the connection events to provide player join / leave messages on the main server when someone is spectating via SourceTV.
  • I think you could also get the total number of spectators watching a game in SourceTV and output that on screen, if you were hosting some kind of big event.
  • Getting an accurate demo tick for events. I'm planning on writing a personal plugin that lets people bookmark points in a SourceTV demo so they can grab the demo off a web server later for rendering (as an alternative to the mess that is TF2's Replay system).
  • Providing some cleaner checks to move in-game spectators to SourceTV. (You could just use tv_port, though.)
  • The ability to kick specific clients off SourceTV (maybe you wanted STV reserved slots, or a second-level AFK kicker after they get moved from in-game spectate).


Now that I'm thinking about it, I wonder how complicated it'd be to get chat messages from SourceTV.

Peace-Maker 04-16-2016 08:42

Re: SourceTV Manager
 
Quote:

Originally Posted by nosoop (Post 2411492)
Now that I'm thinking about it, I wonder how complicated it'd be to get chat messages from SourceTV.

I've that on my todo, but sourcetv chat is just broadcasted like normal events using the "hltv_chat" event and the "text" attribute is formatted like "Playername : message", so there's no quick way to get the client index. There are those "tv_chatgroup"s as well, which would be nice to control and monitor in a chat hook, so i'll get to it when i have the time.

good_live 04-21-2016 05:53

Re: SourceTV Manager
 
Quote:

Originally Posted by Peace-Maker (Post 2410318)
I'll have a look at the crash later.

Any idea?

Peace-Maker 05-04-2016 13:44

Re: SourceTV Manager
 
Quote:

Originally Posted by good_live (Post 2412821)
Any idea?

As you know this is now fixed in the latest version 1.0.1.

Changes are:
  • Fix OnSpectatorDisconnect forward on linux
  • Fix demo recording related features on CS:GO linux
  • Fix getting demo filename on CS:GO
  • Update windows CS:GO gamedata

good_live 06-27-2016 10:28

Re: SourceTV Manager
 
Hey,
since the latest updates it is crashing again, when i am trying to do smth demo related (in this case i tried to get the tick).

Sourcemod 1.7
OS: Debian 8
Crashlog: https://crash.limetech.org/fc36hjb5ip4m

TinKode 07-28-2016 05:44

Re: SourceTV Manager
 
Just wanted to know if is possible to use this in L4D2 as it is not fully implemented.

Peace-Maker 07-28-2016 08:43

Re: SourceTV Manager
 
1 Attachment(s)
Quote:

Originally Posted by TinKode (Post 2440165)
Just wanted to know if is possible to use this in L4D2 as it is not fully implemented.

If L4D2 supports SourceTV, it's certainly possible to add support for it in this extension. I just don't play L4D*, so I won't test much :wink:

try adding this to the gamedata file
Code:

"l4d2"
    {
        "Addresses"
        {
            "host_client"
            {
                "windows"
                {
                    "signature"    "host_client"
                    "read" "32"
                }
                "linux"
                {
                    "signature" "host_client"
                }
            }
           
            "CHLTVServer::m_DemoRecorder"
            {
                "windows"
                {
                    "signature"    "CHLTVServer::Shutdown"
                    "read"    "5"
                }
                "linux"
                {
                    "signature"    "CHLTVServer::Shutdown"
                    "read"    "12"
                }
            }
        }
        "Offsets"
        {
            "CNetChan::SendNetMsg"
            {
                "windows"    "41"
                "linux"    "42"
            }
           
            "CBaseClient::m_NetChannel"
            {
                "windows"    "180"
                "linux"    "184"
            }
           
            "CGameClient::ClientPrintf"
            {
                "linux"    "31"
            }
           
            "CBaseServer::BroadcastPrintf"
            {
                "windows"    "36"
                "linux"        "37"
            }
           
            "CHLTVServer::ConnectClient"
            {
                "windows"    "50"
                "linux"    "51"
            }
           
            "CHLTVServer::RejectConnection"
            {
                "windows"    "48"
                "linux"    "49"
            }
           
            "CHLTVServer::GetChallengeType"
            {
                "windows"    "54"
                "linux"    "55"
            }
           
            "CBaseClient::ActivatePlayer"
            {
                "windows"    "15"
                "linux"    "61"
            }
           
            "CBaseClient::Disconnect"
            {
                "linux"    "15"
            }
           
            "CHLTVServer::Shutdown"
            {
                "windows"    "42"
                "linux"    "43"
            }
           
            "CHLTVDirector::m_iPVSEntity"
            {
                "windows"    "16"
                "linux"    "16"
            }
           
            "CHLTVDirector::m_vPVSOrigin"
            {
                "windows"    "20"
                "linux"    "20"
            }
           
            "CHLTVDirector::m_nNextShotTick"
            {
                "windows"    "40"
                "linux"    "40"
            }
        }
        "Signatures"
        {
            "host_client"
            {
                "library"    "engine"
                "linux"    "@host_client"
                // ping(CCommand const&) "Client ping times:\n"
                "windows" "\x55\x8B\xEC\x51\x83\x3D\x2A\x2A\x2A\x2A\x01\x75\x2A"
            }
           
            "CHLTVServer::BroadcastEventLocal"
            {
                "library"    "engine"
                "linux"    "@_ZN11CHLTVServer19BroadcastEventLocalEP10IGameEventb"
                // "SourceTV broadcast local event: %s\n"
                "windows"    "\x55\x8B\xEC\x81\xEC\x58\x04\x00\x00\xA1\x2A\x2A\x2A\x2A\x33\xC5\x89\x45\xFC\x8B\x45\x10\x8B"
            }
           
            "CHLTVServer::Shutdown"
            {
                "library"    "engine"
                "linux"    "@_ZN11CHLTVServer8ShutdownEv"
                // "SourceTV stop."
                "windows"    "\x56\x8B\xF1\x8B\x86\x2A\x2A\x2A\x2A\x8B\x50\x2A\x8D\x8E\x2A\x2A\x2A\x2A\xFF\xD2\x8B\x86\x2A\x2A\x2A\x2A\x8B\x50"
            }
           
            // StartRecording and StopRecording are virtual, but get called directly in the linux binary..
            // Need to add a detour.
            "CHLTVDemoRecorder::StartRecording"
            {
                "library"    "engine"
                "linux"    "@_ZN17CHLTVDemoRecorder14StartRecordingEPKcb"
            }
           
            "CHLTVDemoRecorder::StopRecording"
            {
                "library"    "engine"
                "linux"    "@_ZN17CHLTVDemoRecorder13StopRecordingEv"
            }
        }
    }

Edit: Here's a windows binary too

Peace-Maker 07-28-2016 13:06

Re: SourceTV Manager
 
Version 1.0.2 is out. Grab it here!
This only includes some fixes for CS:GO:
  • Fix demo recording related features on CS:GO
  • Fix chat/hint message and forced director shot natives in CS:GO
  • Update windows CS:GO gamedata

TinKode 08-02-2016 23:18

Re: SourceTV Manager
 
Thanks for the extension. It seems is loading but some errors do appear:

Quote:

L 08/03/2016 - 05:12:06: [STVM] Failed to find host_client pointer. Server might crash when executing commands on SourceTV bot.
L 08/03/2016 - 05:12:06: [STVM] Failed to find CHLTVServer::Shutdown offset.
L 08/03/2016 - 05:12:06: [STVM] Failed to find CNetChan::SendNetMsg offset. Can't print to demo console.
L 08/03/2016 - 05:12:06: [STVM] Failed to get CHLTVServer::ConnectClient offset.
L 08/03/2016 - 05:12:06: [STVM] Failed to get CHLTVServer::RejectConnection offset.
L 08/03/2016 - 05:12:06: [STVM] Failed to get CHLTVServer::GetChallengeType offset.
L 08/03/2016 - 05:12:06: [STVM] Failed to get CBaseClient::ActivatePlayer offset.
L 08/03/2016 - 05:12:06: [STVM] Failed to get CBaseServer::BroadcastPrintf offset.
Basically, I would like to know what setup I must undertake to have this properly working. Thanks again.

Peace-Maker 08-03-2016 04:31

Re: SourceTV Manager
 
Have you added the gamedata info for l4d2 to the gamedata file?

kiko. 08-13-2016 05:44

Re: SourceTV Manager
 
Hello Peace-Maker

The server keeps crashing.

Spoiler

Peace-Maker 08-16-2016 03:53

Re: SourceTV Manager
 
Grab the latest gamedata from the repository.

pcmaster 08-16-2016 17:08

Re: SourceTV Manager
 
Sadly, it keeps on crashing in CS:GO, even when using the latest gamedata.
System is a linux debian 7.

Stacktrace:
Code:

CRASH: Tue Aug 16 23:06:04 CEST 2016
Start Line: ./srcds_linux -game csgo -usercon -ip <omitted> -port <omitted> +game_type 0 +game_mode 0 +mapgroup mg_surf +map surf_beginner -maxplayers_override 10 +sv_hibernate_when_empty 0 -debug +bot_quota 0
[New LWP 21221]
[New LWP 21222]
[New LWP 21224]
[New LWP 21229]
[New LWP 21227]
[New LWP 21232]
[New LWP 21236]
[New LWP 21225]
[New LWP 21233]
[New LWP 21240]
[New LWP 21241]
[New LWP 21231]
[New LWP 21234]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./srcds_linux -game csgo -usercon -ip <omitted> -port <omitted> +game_type 0 +'.
Program terminated with signal 11, Segmentation fault.
#0  0xe8beec55 in Native_IsRecording(SourcePawn::IPluginContext*, int const*) () at /home/jannik/git/sourcetvmanager/natives.cpp:463
#0  0xe8beec55 in Native_IsRecording(SourcePawn::IPluginContext*, int const*) () at /home/jannik/git/sourcetvmanager/natives.cpp:463
#1  0xe7f45b59 in ?? ()
#2  0xe7f45b59 in ?? ()
#3  0xec7c806f in ?? ()
#4  0xec8cd045 in sp::Environment::Invoke(sp::PluginRuntime*, sp::CompiledFunction*, int*) () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
#5  0xec8cf955 in sp::InvokeFrame::InvokeFrame(sp::PluginContext*, unsigned int) () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
#6  0xec8d33a0 in sp::PluginContext::Invoke(unsigned int, int const*, unsigned int, int*) () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
#7  0x0cc8d310 in ?? ()
#8  0xeccf0938 in k_steamIDNonSteamGS () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcemod.2.csgo.so
__SourceHook_ParamInfos2M_CBaseServer_BroadcastPrintf = {{pNormalCtor = 0x0, pCopyCtor = 0x0, pDtor = 0x0, pAssignOperator = 0x0}}
__SourceHook_ParamInfosM_CBaseServer_BroadcastPrintf = {{size = 1, type = 0, flags = 0}}
vec2_origin = {x = 0, y = 0}
k_steamIDOutofDateGS = {m_steamid = {m_comp = {m_unAccountID = 0, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 0}}
k_steamIDNil = {m_steamid = {m_comp = {m_unAccountID = 0, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 0}}
UNSPECIFIED_LOGGING_COLOR = {_color = "\000\000\000"}
vec4_invalid = {x = 3.40282347e+38, y = 3.40282347e+38, z = 3.40282347e+38, w = 3.40282347e+38}
k_steamIDLanModeGS = {m_steamid = {m_comp = {m_unAccountID = 0, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniversePublic}, m_unAll64Bits = 72057594037927936}}
vec4_origin = {x = 0, y = 0, z = 0, w = 0}
k_steamIDNonSteamGS = {m_steamid = {m_comp = {m_unAccountID = 2, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 2}}
vec2_invalid = {x = 3.40282347e+38, y = 3.40282347e+38}
k_steamIDNotInitYetGS = {m_steamid = {m_comp = {m_unAccountID = 1, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 1}}
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_Inst = {_vptr.__SourceHook_MFHCls_CBaseServer_BroadcastPrintf = 0xe8d12830, static ms_Inst = {_vptr.__SourceHook_MFHCls_CBaseServer_BroadcastPrintf = 0xe8d12830, static ms_Inst = <same as static member of an already seen type>, static ms_MFI = {isVirtual = true, thisptroffs = 0, vtblindex = 40, vtbloffs = 0}, static ms_HI = 0x0, static ms_Proto = {numOfParams = 0, retPassInfo = {size = 0, type = 0, flags = 0}, paramsPassInfo = 0xe8d12530, convention = 0, retPassInfo2 = {pNormalCtor = 0x0, pCopyCtor = 0x0, pDtor = 0x0, pAssignOperator = 0x0}, paramsPassInfo2 = 0xe8d12520}}, static ms_MFI = <same as static member of an already seen type>, static ms_HI = 0x0, static ms_Proto = <same as static member of an already seen type>}
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_MFI = {isVirtual = true, thisptroffs = 0, vtblindex = 40, vtbloffs = 0}
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_HI = 0x0
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_Proto = {numOfParams = 0, retPassInfo = {size = 0, type = 0, flags = 0}, paramsPassInfo = 0xe8d12530, convention = 0, retPassInfo2 = {pNormalCtor = 0x0, pCopyCtor = 0x0, pDtor = 0x0, pAssignOperator = 0x0}, paramsPassInfo2 = 0xe8d12520}


Peace-Maker 08-16-2016 17:43

Re: SourceTV Manager
 
I just checked the windows gamedata. I'll have a look at linux as well.

Updated.

pcmaster 08-17-2016 14:26

Re: SourceTV Manager
 
Still crashing:

Code:

----------------------------------------------
CRASH: Wed Aug 17 20:24:54 CEST 2016
Start Line: ./srcds_linux -game csgo -usercon -ip <omitted> -port <omitted> +game_type 0 +game_mode 0 +mapgroup mg_surf +map surf_beginner -maxplayers_override 10 +sv_hibernate_when_empty 0 -debug +bot_quota 0
[New LWP 5369]
[New LWP 5372]
[New LWP 5370]
[New LWP 5373]
[New LWP 5383]
[New LWP 5378]
[New LWP 5382]
[New LWP 5389]
[New LWP 5380]
[New LWP 5385]
[New LWP 5381]
[New LWP 5375]
[New LWP 5390]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./srcds_linux -game csgo -usercon -ip <omitted> -port <omitted> +game_type 0 +'.
Program terminated with signal 11, Segmentation fault.
#0  0xe81c6c5a in Native_IsRecording(SourcePawn::IPluginContext*, int const*) () at /home/jannik/git/sourcetvmanager/natives.cpp:463
#0  0xe81c6c5a in Native_IsRecording(SourcePawn::IPluginContext*, int const*) () at /home/jannik/git/sourcetvmanager/natives.cpp:463
#1  0xe74c6b59 in ?? ()
#2  0xe74c6b59 in ?? ()
#3  0xec71006f in ?? ()
#4  0xece2d045 in sp::Environment::Invoke(sp::PluginRuntime*, sp::CompiledFunction*, int*) () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
#5  0xece2f955 in sp::InvokeFrame::InvokeFrame(sp::PluginContext*, unsigned int) () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
#6  0xece333a0 in sp::PluginContext::Invoke(unsigned int, int const*, unsigned int, int*) () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
#7  0x0ceb9600 in ?? ()
#8  0xeccf0938 in k_steamIDNonSteamGS () from /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcemod.2.csgo.so
__SourceHook_ParamInfos2M_CBaseServer_BroadcastPrintf = {{pNormalCtor = 0x0, pCopyCtor = 0x0, pDtor = 0x0, pAssignOperator = 0x0}}
__SourceHook_ParamInfosM_CBaseServer_BroadcastPrintf = {{size = 1, type = 0, flags = 0}}
vec2_origin = {x = 0, y = 0}
k_steamIDOutofDateGS = {m_steamid = {m_comp = {m_unAccountID = 0, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 0}}
k_steamIDNil = {m_steamid = {m_comp = {m_unAccountID = 0, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 0}}
UNSPECIFIED_LOGGING_COLOR = {_color = "\000\000\000"}
vec4_invalid = {x = 3.40282347e+38, y = 3.40282347e+38, z = 3.40282347e+38, w = 3.40282347e+38}
k_steamIDLanModeGS = {m_steamid = {m_comp = {m_unAccountID = 0, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniversePublic}, m_unAll64Bits = 72057594037927936}}
vec4_origin = {x = 0, y = 0, z = 0, w = 0}
k_steamIDNonSteamGS = {m_steamid = {m_comp = {m_unAccountID = 2, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 2}}
vec2_invalid = {x = 3.40282347e+38, y = 3.40282347e+38}
k_steamIDNotInitYetGS = {m_steamid = {m_comp = {m_unAccountID = 1, m_unAccountInstance = 0, m_EAccountType = 0, m_EUniverse = k_EUniverseInvalid}, m_unAll64Bits = 1}}
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_Inst = {_vptr.__SourceHook_MFHCls_CBaseServer_BroadcastPrintf = 0xe82ea830, static ms_Inst = {_vptr.__SourceHook_MFHCls_CBaseServer_BroadcastPrintf = 0xe82ea830, static ms_Inst = <same as static member of an already seen type>, static ms_MFI = {isVirtual = true, thisptroffs = 0, vtblindex = 40, vtbloffs = 0}, static ms_HI = 0x0, static ms_Proto = {numOfParams = 0, retPassInfo = {size = 0, type = 0, flags = 0}, paramsPassInfo = 0xe82ea530, convention = 0, retPassInfo2 = {pNormalCtor = 0x0, pCopyCtor = 0x0, pDtor = 0x0, pAssignOperator = 0x0}, paramsPassInfo2 = 0xe82ea520}}, static ms_MFI = <same as static member of an already seen type>, static ms_HI = 0x0, static ms_Proto = <same as static member of an already seen type>}
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_MFI = {isVirtual = true, thisptroffs = 0, vtblindex = 40, vtbloffs = 0}
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_HI = 0x0
__SourceHook_MFHCls_CBaseServer_BroadcastPrintf::ms_Proto = {numOfParams = 0, retPassInfo = {size = 0, type = 0, flags = 0}, paramsPassInfo = 0xe82ea530, convention = 0, retPassInfo2 = {pNormalCtor = 0x0, pCopyCtor = 0x0, pDtor = 0x0, pAssignOperator = 0x0}, paramsPassInfo2 = 0xe82ea520}
sourcetv_natives = {{name = 0xe82ea494 "SourceTV_GetServerInstanceCount", func = 0xe81c5d50 <Native_GetServerInstanceCount(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea0db "SourceTV_SelectServerInstance", func = 0xe81c6ff0 <Native_SelectServerInstance(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea4b4 "SourceTV_GetSelectedServerInstance", func = 0xe81c6c10 <Native_GetSelectedServerInstance(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea0f9 "SourceTV_IsActive", func = 0xe81c5ef0 <Native_IsActive(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea10b "SourceTV_IsMasterProxy", func = 0xe81c6580 <Native_IsMasterProxy(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea122 "SourceTV_GetServerIP", func = 0xe81c6b60 <Native_GetServerIP(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea137 "SourceTV_GetServerPort", func = 0xe81c5ec0 <Native_GetServerPort(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea14e "SourceTV_GetBotIndex", func = 0xe81c6550 <Native_GetBotIndex(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea163 "SourceTV_GetLocalStats", func = 0xe81c6490 <Native_GetLocalStats(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea17a "SourceTV_GetGlobalStats", func = 0xe81c63d0 <Native_GetGlobalStats(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea192 "SourceTV_GetBroadcastTick", func = 0xe81c5d60 <Native_GetBroadcastTick(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea1ac "SourceTV_GetDelay", func = 0xe81c5d90 <Native_GetDelay(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea4d8 "SourceTV_BroadcastScreenMessage", func = 0xe81c7360 <Native_BroadcastScreenMessage(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea4f8 "SourceTV_BroadcastConsoleMessage", func = 0xe81c7660 <Native_BroadcastConsoleMessage(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea1be "SourceTV_BroadcastChatMessage", func = 0xe81c71c0 <Native_BroadcastChatMessage(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea1dc "SourceTV_GetViewEntity", func = 0xe81c5dc0 <Native_GetViewEntity(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea1f3 "SourceTV_GetViewOrigin", func = 0xe81c5dd0 <Native_GetViewOrigin(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea20a "SourceTV_ForceFixedCameraShot", func = 0xe81c68b0 <Native_ForceFixedCameraShot(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea228 "SourceTV_ForceChaseCameraShot", func = 0xe81c6620 <Native_ForceChaseCameraShot(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea246 "SourceTV_StartRecording", func = 0xe81c6f80 <Native_StartRecording(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea25e "SourceTV_StopRecording", func = 0xe81c6c80 <Native_StopRecording(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea275 "SourceTV_IsRecording", func = 0xe81c6c30 <Native_IsRecording(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea28a "SourceTV_GetDemoFileName", func = 0xe81c6cf0 <Native_GetDemoFileName(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea2a3 "SourceTV_GetRecordingTick", func = 0xe81c65b0 <Native_GetRecordingTick(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea2bd "SourceTV_PrintToDemoConsole", func = 0xe81c7690 <Native_PrintToDemoConsole(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea2d9 "SourceTV_GetSpectatorCount", func = 0xe81c5e90 <Native_GetSpectatorCount(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea2f4 "SourceTV_GetMaxClients", func = 0xe81c5e60 <Native_GetMaxClients(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea30b "SourceTV_GetClientCount", func = 0xe81c5e30 <Native_GetClientCount(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea323 "SourceTV_IsClientConnected", func = 0xe81c5f20 <Native_IsClientConnected(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea33e "SourceTV_IsClientProxy", func = 0xe81c6320 <Native_IsClientProxy(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea355 "SourceTV_GetClientName", func = 0xe81c6240 <Native_GetClientName(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea36c "SourceTV_GetClientIP", func = 0xe81c6160 <Native_GetClientIP(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea381 "SourceTV_GetClientPassword", func = 0xe81c6080 <Native_GetClientPassword(SourcePawn::IPluginContext*, int const*)>}, {name = 0xe82ea39c "SourceTV_KickClient", func = 0xe81c5fa0 <Native_KickClient(SourcePawn::IPluginContext*, int const*)>}, {name = 0x0, func = 0}}
g_bHasClientPrintfOffset = true
eax            0xca48228    212107816
ecx            0x6000    24576
edx            0x0    0
ebx            0xb6f8dc0    191860160
esp            0xffe1d180    0xffe1d180
ebp            0xffe1d1b8    0xffe1d1b8
esi            0xb6f2dc0    191835584
edi            0x5ffc    24572
eip            0xe81c6c5a    0xe81c6c5a <Native_IsRecording(SourcePawn::IPluginContext*, int const*)+42>
eflags        0x10206    [ PF IF RF ]
cs            0x23    35
ss            0x2b    43
ds            0x2b    43
es            0x2b    43
fs            0x0    0
gs            0x63    99
From        To          Syms Read  Shared Object Library
                        No          linux-gate.so.1
0xf76c6600  0xf76f41a5  Yes (*)    /lib32/libm.so.6
0xf76bdad0  0xf76be96c  Yes (*)    /lib32/libdl.so.2
0xf76a5870  0xf76b1ea7  Yes        /lib32/libpthread.so.0
0xf750d420  0xf763bd2e  Yes (*)    /lib32/libc.so.6
0xf7712860  0xf772a73c  Yes (*)    /lib/ld-linux.so.2
0xf74b4030  0xf74d0618  Yes (*)    /gameserver/csgo/setup_surf/bin/libtier0.so
0xf745df30  0xf7487dbc  Yes (*)    /gameserver/csgo/setup_surf/bin/libvstdlib.so
0xf6f6bba0  0xf6ff2f98  Yes (*)    /gameserver/csgo/setup_surf/bin/dedicated.so
0xf6f2dd60  0xf6f431b4  Yes (*)    /gameserver/csgo/setup_surf/bin/libsteam_api.so
0xf6e91914  0xf6ed7c78  Yes        /gameserver/csgo/setup_surf/bin/libstdc++.so.6
0xf6e37e04  0xf6e474b8  Yes        /gameserver/csgo/setup_surf/bin/libgcc_s.so.1
0xf5f4d3b0  0xf6392560  Yes (*)    /gameserver/csgo/setup_surf/bin/engine.so
0xf57e91a0  0xf58c8e7c  Yes (*)    /gameserver/csgo/setup_surf/bin/materialsystem.so
0xf52818a0  0xf533663c  Yes (*)    /gameserver/csgo/setup_surf/bin/studiorender.so
0xf508e4e0  0xf51e6dec  Yes (*)    /gameserver/csgo/setup_surf/bin/vphysics.so
0xf4f813d0  0xf4ffe554  Yes (*)    /gameserver/csgo/setup_surf/bin/datacache.so
0xf4eadd40  0xf4f245e4  Yes (*)    /gameserver/csgo/setup_surf/bin/vscript.so
0xf4e6dbd0  0xf4e855d0  Yes (*)    /gameserver/csgo/setup_surf/bin/shaderapiempty.so
0xf35ec4c0  0xf4262b04  Yes (*)    /gameserver/csgo/setup_surf/bin/steamclient.so
0xf352e9b0  0xf3531eaa  Yes (*)    /lib32/librt.so.1
0xf34eff60  0xf35151c0  Yes (*)    /gameserver/csgo/setup_surf/bin/crashhandler.so
0xf344beb0  0xf34a1d48  Yes (*)    /gameserver/csgo/setup_surf/csgo/bin/matchmaking_ds.so
0xf24539e0  0xf2df8514  Yes (*)    /gameserver/csgo/setup_surf/csgo/bin/server.so
0xf20ea3d0  0xf2116bb4  Yes (*)    /gameserver/csgo/setup_surf/bin/soundemittersystem.so
0xf20b6f40  0xf20cd6bc  Yes (*)    /gameserver/csgo/setup_surf/bin/scenefilecache.so
0xed7de130  0xed7dfe0c  Yes (*)    /gameserver/csgo/setup_surf/csgo/../csgo/addons/metamod/bin/server.so
0xed7ab4b0  0xed7d1e78  Yes (*)    /gameserver/csgo/setup_surf/csgo/../csgo/addons/metamod/bin/metamod.2.csgo.so
0xedf00a90  0xedf011c8  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcemod_mm_i486.so
0xecb13c80  0xecc810f9  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcemod.2.csgo.so
0xeca68430  0xecabd0a0  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcemod.logic.so
0xece2c700  0xece4a2a4  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/bin/sourcepawn.jit.x86.so
0xece234f0  0xece26334  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/updater.ext.so
0xec6e0a60  0xec708df5  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/webternet.ext.so
0xece1f7a0  0xece1fcd4  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/stripper/bin/stripper_mm_i486.so
0xeb6bc570  0xeb6cda30  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/stripper/bin/stripper.16.csgo.so
0xece05280  0xece19f14  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/stripper/bin/stripper.core.so
0xeb6a0ad0  0xeb6a752b  Yes (*)    /lib32/libnss_files.so.2
0xeb698c40  0xeb69bb16  Yes (*)    /lib32/libnss_dns.so.2
0xeb682720  0xeb68ece4  Yes (*)    /lib32/libresolv.so.2
0xeb631e10  0xeb6617d8  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/accelerator.ext.so
0xeb6add40  0xeb6af778  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/cleaner.ext.2.csgo.so
0xeab6eac0  0xeacaec80  Yes        /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/curl.ext.so
0xeb60d800  0xeb61319d  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/game.cstrike.ext.2.csgo.so
0xeb605c90  0xeb6094d8  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/bintools.ext.so
0xeaa94de0  0xeaacbd82  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/sdktools.ext.2.csgo.so
0xeaa7e780  0xeaa84e78  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/topmenus.ext.so
0xeaa75ae0  0xeaa7a634  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/clientprefs.ext.so
0xea948e00  0xeaa68f00  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/dbi.sqlite.ext.so
0xea7c7320  0xea7f94d0  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/regex.ext.so
0xea6d4410  0xea790aa4  Yes        /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/socket.ext.so
0xea903e30  0xea906698  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/geoip.ext.so
0xe8ba11b0  0xe8bbfe52  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/sdkhooks.ext.2.csgo.so
0xe81c3510  0xe82e9433  Yes        /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/sourcetvmanager.ext.2.csgo.so
0xe7ff4490  0xe807f1f5  Yes (*)    /gameserver/csgo/setup_surf/csgo/addons/sourcemod/extensions/dbi.mysql.ext.so
0xea643b50  0xea651e68  Yes (*)    /usr/lib32/libz.so.1
(*): Shared library is missing debugging information.
Dump of assembler code for function _ZL18Native_IsRecordingPN10SourcePawn14IPluginContextEPKi:
  0xe81c6c30 <+0>:    mov    0xe8370640,%eax
  0xe81c6c35 <+5>:    test  %eax,%eax
  0xe81c6c37 <+7>:    je    0xe81c6c68 <_ZL18Native_IsRecordingPN10SourcePawn14IPluginContextEPKi+56>
  0xe81c6c39 <+9>:    sub    $0x1c,%esp
  0xe81c6c3c <+12>:    mov    %eax,(%esp)
  0xe81c6c3f <+15>:    call  0xe81cbe00 <_ZN17HLTVServerWrapper15GetDemoRecorderEv>
  0xe81c6c44 <+20>:    test  %eax,%eax
  0xe81c6c46 <+22>:    je    0xe81c6c70 <_ZL18Native_IsRecordingPN10SourcePawn14IPluginContextEPKi+64>
  0xe81c6c48 <+24>:    mov    0xe8370640,%eax
  0xe81c6c4d <+29>:    mov    %eax,(%esp)
  0xe81c6c50 <+32>:    call  0xe81cbe00 <_ZN17HLTVServerWrapper15GetDemoRecorderEv>
  0xe81c6c55 <+37>:    mov    (%eax),%edx
  0xe81c6c57 <+39>:    mov    %eax,(%esp)
=> 0xe81c6c5a <+42>:    call  *0x28(%edx)
  0xe81c6c5d <+45>:    add    $0x1c,%esp
  0xe81c6c60 <+48>:    movzbl %al,%eax
  0xe81c6c63 <+51>:    ret   
  0xe81c6c64 <+52>:    lea    0x0(%esi,%eiz,1),%esi
  0xe81c6c68 <+56>:    xor    %eax,%eax
  0xe81c6c6a <+58>:    ret   
  0xe81c6c6b <+59>:    nop
  0xe81c6c6c <+60>:    lea    0x0(%esi,%eiz,1),%esi
  0xe81c6c70 <+64>:    xor    %eax,%eax
  0xe81c6c72 <+66>:    add    $0x1c,%esp
  0xe81c6c75 <+69>:    ret   
End of assembler dump.
Stack level 0, frame at 0xffe1d1a0:
 eip = 0xe81c6c5a in Native_IsRecording(SourcePawn::IPluginContext*, int const*) (/home/jannik/git/sourcetvmanager/natives.cpp:463); saved eip 0xe74c6b59
 called by frame at 0xffe1d1c0
 source language c++.
 Arglist at 0xffe1d17c, args:
 Locals at 0xffe1d17c, Previous frame's sp is 0xffe1d1a0
 Saved registers:
  eip at 0xffe1d19c
End of Source crash report
----------------------------------------------


kiko. 08-17-2016 15:02

Re: SourceTV Manager
 
confirmed https://crash.limetech.org/hkthz6szy6f4

you can add me for testing: http://steamcommunity.com/id/therealkiko

pcmaster 08-21-2016 10:44

Re: SourceTV Manager
 
Seems like the code has to be changed... I tried changing the "read" value from 0 all up the way to 12, but the server crashed every time.

pcmaster 09-02-2016 08:53

Re: SourceTV Manager
 
It would be really nice if we could get this extension working on linux too..
Wanting to install a plugin to auto record everything, only thing is that it's crashing the server (see log above).

Peace-Maker 10-15-2016 19:27

Re: SourceTV Manager
 
Updated to 1.0.3 to fix that crashing in CS:GO on linux. Sorry for the delay.
Future updates shouldn't require a new build but only gamedata changes now.

Changes:
  • Fix demo recording related features on CS:GO
  • Fix crash when executing status on SourceTV bot when host_client lookup fails

pcmaster 10-19-2016 12:17

Re: SourceTV Manager
 
Thanks, works fine now!

Peace-Maker 11-16-2016 00:52

Re: SourceTV Manager
 
Updated to Version 1.1
Adds spectator chat interaction!

Changelog:
  • Add SourceTV_OnSpectatorChatMessage[_Post] forwards to catch or block spectator chat
  • Add SourceTV_PrintToChat native to print to one spectator's chat only
  • Add SourceTV_PrintToConsole native to print to one spectator's console only
  • Add SourceTV_SetClientTVTitle to set the stream title (tv_title) for one spectator individually
  • Fix sending messages to locally connected players only in SourceTV_Broadcast*Message
  • Change magic bLocalOnly boolean argument to a more readable SourceTVBroadcastTarget enum

nosoop 02-15-2017 01:53

Re: SourceTV Manager
 
Code:

[SM] Unable to load extension "sourcetvmanager.ext": /home/server/tf/addons/sourcemod/extensions/sourcetvmanager.ext.2.tf2.so: undefined symbol: Warning
Occurs on SourceMod 1.8.0.5967 and 1.9.0.6039 in TF2; Linux.
Might need to be built with Clang? Had the same symbol message when I was testing out a modified SDKTools extension built on GCC.

Edit: Looks like building with Clang did the trick.

Edit 2:
It's been a while since I worked with the extension, but since someone was trying to join a game from a relay, I decided to look into it again.

A multi-forward bug appears to actually still be present; client appears to be forcing a reconnect (internet:27005:reconnect in the output below), but only when the extension is loaded. Increases by one connection between map changes.

Here's sample output from sourcetv_test after a few map changes.

Spoiler


After reconnecting, the number of times the event is forwarded is reset.

Peace-Maker 02-15-2017 18:54

Re: SourceTV Manager
 
Oh, I used the older gcc-4.8 to avoid that, but there seem to be problems still.
The server forces the client to reconnect? Can you elaborate? Do you have tv_force_steamauth set to 1?
I don't think I tested during mapchanges, so the extension might not catch the "disconnect" and keep hooking the client?

nosoop 02-15-2017 20:07

Re: SourceTV Manager
 
Built it with clang-3.4 here.

I'm not sure which side is forcing the reconnection; all I know is that <ip>:<port>:reconnect shows up in the server console after reconnecting. No disconnect message before the map change, so it may be possible that the spectator disconnect on map change isn't being processed.

Further testing; the forward count actually isn't being reset on reconnect, and the <ip>:<port>:reconnect message shows up whether I use retry or connect <serverip>:<tvport>.

SourceTV_OnServerStart is also fired at some point after the map change, though I don't see SourceTV_OnServerShutdown being called.

Haven't modified tv_force_steamauth; it's unchanged from 0.

Peace-Maker 02-16-2017 18:06

Re: SourceTV Manager
 
I've fixed part of it here. OnDisconnect isn't called for sourcetv spectators during mapchanges, but OnClientPutInServer is after they loaded the new map. Should I mimic the core forwards and always call the disconnect forwards on mapchange and the onconnect ones after mapchange? There is no "player_disconnect" event to catch actual disconnects for sourcetv clients though.

nosoop 02-16-2017 22:30

Re: SourceTV Manager
 
I don't think it'd matter too much if the extension forwards differ from the SourceMod core forwards.

Compiled and installed the latest source and seems to work as expected in testing (no multiple forward calls and client reconnections). I'll drop it into my normal server and see if I run into any issues there.

Thanks!

hlstriker 04-19-2017 16:48

Re: SourceTV Manager
 
Did any gamedata update (I'm using the latest)? Simply testing FakeClientCommand(SourceTV_GetBotIndex(), "status") will crash my Linux server.

Quote:

0 sourcetvmanager.ext.2.csgo.so!HLTVServerWrapp er::OnHLTVBotExecuteStringCommand(char const*) [hltvserverwrapper.cpp:233 + 0x0]
1 sourcetvmanager.ext.2.csgo.so!__SourceHook_FH Cls_IClientExecuteStringCommand0::Func(char const*) [commonhooks.cpp:41 + 0x14]
2 sourcemod.2.csgo.so!VEngineServer_Logic::Fake ClientCommand [logic_bridge.cpp:121 + 0x16]
3 sourcemod.logic.so!FakeClientCommand [smn_console.cpp:256 + 0xd]
4 sourcepawn.jit.x86.so!sp::PoolScope::~PoolSco pe [pool-allocator.cpp:82 + 0xc]
5 0x88c43d89
6 sourcepawn.jit.x86.so!sp::ScriptedInvoker::In voke [scripted-invoker.cpp:296 + 0x1f]
7 0x8
8 0xecdf3908
9 sourcemod.logic.so + 0x558d0
10 sourcemod.2.csgo.so!ConsoleDetours::InternalD ispatch [ConsoleDetours.cpp:366 + 0x10]

Peace-Maker 04-19-2017 19:23

Re: SourceTV Manager
 
Quote:

Originally Posted by hlstriker (Post 2513646)
Did any gamedata update (I'm using the latest)? Simply testing FakeClientCommand(SourceTV_GetBotIndex(), "status") will crash my Linux server.

That's quite possible, but I don't have access to a windows machine right now to check the gamedata :(

hlstriker 04-19-2017 21:36

Re: SourceTV Manager
 
Quote:

Originally Posted by Peace-Maker (Post 2513684)
That's quite possible, but I don't have access to a windows machine right now to check the gamedata :(

It works fine on Windows. It's only Linux that's crashing for me.


All times are GMT -4. The time now is 06:19.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.