diff --git a/Application/Application.csproj b/Application/Application.csproj index 7ea18e12..b150b4b1 100644 --- a/Application/Application.csproj +++ b/Application/Application.csproj @@ -24,7 +24,7 @@ - + all diff --git a/GameFiles/GameInterface/_integration_base.gsc b/GameFiles/GameInterface/_integration_base.gsc index 20d4cbc6..cc80b91d 100644 --- a/GameFiles/GameInterface/_integration_base.gsc +++ b/GameFiles/GameInterface/_integration_base.gsc @@ -193,8 +193,6 @@ PlayerSpawnEvents() } self RequestClientBasicData(); - // example of requesting meta from IW4MAdmin - // self RequestClientMeta( "LastServerPlayed" ); } PlayerTrackingOnInterval() @@ -436,7 +434,6 @@ SaveTrackingMetrics() } IncrementClientMeta( "TotalShotsFired", change, self.persistentClientId ); - } BuildEventRequest( responseExpected, eventType, eventSubtype, entOrId, data ) @@ -664,6 +661,8 @@ OnClientDataReceived( event ) metaKey = event.data[0]; clientData.meta[metaKey] = event.data[metaKey]; + + LogDebug( "Meta Key=" + metaKey + ", Meta Value=" + event.data[metaKey] ); return; } diff --git a/GameFiles/GameInterface/_integration_iw4x.gsc b/GameFiles/GameInterface/_integration_iw4x.gsc index fa66a23c..28ae690f 100644 --- a/GameFiles/GameInterface/_integration_iw4x.gsc +++ b/GameFiles/GameInterface/_integration_iw4x.gsc @@ -47,6 +47,7 @@ OnPlayerConnect() } player thread SetPersistentData(); + player thread WaitForClientEvents(); } } @@ -67,6 +68,28 @@ RegisterClientCommands() scripts\_integration_base::AddClientCommand( "NoClip", false, ::NoClipImpl ); } +WaitForClientEvents() +{ + self endon( "disconnect" ); + + // example of requesting a meta value + lastServerMetaKey = "LastServerPlayed"; + // self scripts\_integration_base::RequestClientMeta( lastServerMetaKey ); + + for ( ;; ) + { + self waittill( level.eventTypes.localClientEvent, event ); + + scripts\_integration_base::LogDebug( "Received client event " + event.type ); + + if ( event.type == level.eventTypes.clientDataReceived && event.data[0] == lastServerMetaKey ) + { + clientData = self.pers[level.clientDataKey]; + lastServerPlayed = clientData.meta[lastServerMetaKey]; + } + } +} + GetTotalShotsFired() { return maps\mp\_utility::getPlayerStat( "mostshotsfired" ); diff --git a/Plugins/ScriptPlugins/GameInterface.js b/Plugins/ScriptPlugins/GameInterface.js index ce514df8..0ab88352 100644 --- a/Plugins/ScriptPlugins/GameInterface.js +++ b/Plugins/ScriptPlugins/GameInterface.js @@ -465,8 +465,9 @@ function onReceivedDvar(server, dvarName, dvarValue, success) { if (event.subType === 'Meta') { const metaService = _serviceResolver.ResolveService('IMetaServiceV2'); - const meta = metaService.GetPersistentMeta(event.data, client, token).GetAwaiter().GetResult(); + const meta = metaService.GetPersistentMeta(event.data, client.ClientId, token).GetAwaiter().GetResult(); data[event.data] = meta === null ? '' : meta.Value; + logger.WriteDebug(`event data is ${event.data}`); } else { data = { level: client.Level, @@ -612,7 +613,7 @@ const parseDataString = data => { dict[keyValue[0]] = keyValue[1]; } - return dict.length === 0 ? data : dict; + return Object.keys(dict).length === 0 ? data : dict; } const validateEnabled = (server, origin) => {