Skip to content

Instantly share code, notes, and snippets.

@k0pernikus
Created December 21, 2025 03:03
Show Gist options
  • Select an option

  • Save k0pernikus/e978373c9ce1cca8a24f7135ea569933 to your computer and use it in GitHub Desktop.

Select an option

Save k0pernikus/e978373c9ce1cca8a24f7135ea569933 to your computer and use it in GitHub Desktop.
Rocket League SoS Plugin Install / Web Socket Listener

Requirements

What to do

Install SoS-Plugin, either by this install install_sos_plugin.ps1 or via their releases. Be aware to use the actual "SOS-Plugin-1.6.0.zip", not the zipped sources.

Notes

  • clock_stopped Events are ignored as they spam the console, all others are passed through as they are
./listener.ps1
{"data":"1.6.0","event":"sos:version"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"","name":""},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":76.35599517822266,"goaltime":8.0,"impact_location":{"X":0.8833166360855103,"Y":0.8536249995231628},"scorer":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"leverp0stejsmad_1","name":"leverp0stejsmad","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"EpicSave","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Epic Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"Hoιm_2","name":"Hoιm","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"Hundek0ed_3","name":"Hundek0ed","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"EpicSave","main_target":{"id":"Hoιm_2","name":"Hoιm","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Epic Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Assist","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Assist"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus"},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":101.87999725341797,"goaltime":82.0,"impact_location":{"X":0.5567777752876282,"Y":0.5674843788146973},"scorer":{"id":"Draxtors4411_5","name":"Draxtors4411","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Goal","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"","name":""},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":46.727996826171875,"goaltime":8.0,"impact_location":{"X":0.14399445056915283,"Y":0.5260312557220459},"scorer":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"Hoιm_2","name":"Hoιm","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"Hundek0ed_3","name":"Hundek0ed","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Demolish","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"Hoιm_2","name":"Hoιm","team_num":0},"type":"Demolition"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Assist","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Assist"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus"},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":56.59199905395508,"goaltime":65.0,"impact_location":{"X":0.20242777466773987,"Y":0.8498594164848328},"scorer":{"id":"Draxtors4411_5","name":"Draxtors4411","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"LongGoal","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Long Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"HatTrick","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Hat Trick"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"","name":""},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":43.30799865722656,"goaltime":20.0,"impact_location":{"X":0.7577222585678101,"Y":0.8544687032699585},"scorer":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"BicycleHit","main_target":{"id":"Hundek0ed_3","name":"Hundek0ed","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Bicycle Hit"},"event":"game:statfeed_event"}
{"data":{"event_name":"BicycleHit","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Bicycle Hit"},"event":"game:statfeed_event"}
{"data":{"event_name":"BicycleHit","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Bicycle Hit"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Win","main_target":{"id":"Draxtors4411_5","name":"Draxtors4411","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Win"},"event":"game:statfeed_event"}
{"data":{"event_name":"Win","main_target":{"id":"agentP_6","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Win"},"event":"game:statfeed_event"}
{"data":{"event_name":"Win","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Win"},"event":"game:statfeed_event"}
{"data":{"event_name":"MVP","main_target":{"id":"Çøvįd LuXus_7","name":"Çøvįd LuXus","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"MVP"},"event":"game:statfeed_event"}
{"data":{"match_guid":"","winner_team_num":1},"event":"game:match_ended"}
{"data":{"match_guid":""},"event":"game:podium_start"}
{"data":{"match_guid":""},"event":"game:match_destroyed"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Demolish","main_target":{"id":"agentP_5","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"type":"Demolition"},"event":"game:statfeed_event"}
{"data":{"event_name":"Demolish","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"bboy-lazlo_7","name":"bboy-lazlo","team_num":1},"type":"Demolition"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"LongGoal","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Long Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Assist","main_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Assist"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"Vaultzzy_3","name":"Vaultzzy"},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":71.31599426269531,"goaltime":73.0,"impact_location":{"X":0.5933777689933777,"Y":0.8312656283378601},"scorer":{"id":"javierrh69_2","name":"javierrh69","teamnum":0}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"BicycleHit","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Bicycle Hit"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"bboy-lazlo_7","name":"bboy-lazlo","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"bboy-lazlo_7","name":"bboy-lazlo","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Assist","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Assist"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"asesino_sanz_6","name":"asesino_sanz"},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":89.42399597167969,"goaltime":35.0,"impact_location":{"X":0.2425277829170227,"Y":0.8516718745231628},"scorer":{"id":"bboy-lazlo_7","name":"bboy-lazlo","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"agentP_5","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"bboy-lazlo_7","name":"bboy-lazlo","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"BicycleHit","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Bicycle Hit"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"","name":""},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":53.567996978759766,"goaltime":78.0,"impact_location":{"X":0.19839443266391754,"Y":0.7872499823570251},"scorer":{"id":"javierrh69_2","name":"javierrh69","teamnum":0}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Demolish","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"bboy-lazlo_7","name":"bboy-lazlo","team_num":1},"type":"Demolition"},"event":"game:statfeed_event"}
{"data":{"event_name":"Demolish","main_target":{"id":"agentP_5","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"type":"Demolition"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Assist","main_target":{"id":"agentP_5","name":"agentP","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Assist"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"agentP_5","name":"agentP"},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":75.70800018310547,"goaltime":83.0,"impact_location":{"X":0.24497778713703156,"Y":0.8195781707763672},"scorer":{"id":"asesino_sanz_6","name":"asesino_sanz","teamnum":1}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"asesino_sanz_6","name":"asesino_sanz","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Save","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Shot","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"Goal","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"LongGoal","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Long Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"HatTrick","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Hat Trick"},"event":"game:statfeed_event"}
{"data":{"event_name":"Assist","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Assist"},"event":"game:statfeed_event"}
{"data":{"assister":{"id":"Archz_2good4u_1","name":"Archz_2good4u"},"ball_last_touch":{"player":"","speed":0.0},"goalspeed":81.0719985961914,"goaltime":16.0,"impact_location":{"X":0.08986667543649673,"Y":0.8191719055175781},"scorer":{"id":"javierrh69_2","name":"javierrh69","teamnum":0}},"event":"game:goal_scored"}
{"data":"game_replay_start","event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_start"}
{"data":{"match_guid":""},"event":"game:replay_end"}
{"data":{"match_guid":""},"event":"game:pre_countdown_begin"}
{"data":{"match_guid":""},"event":"game:post_countdown_begin"}
{"data":{"event_name":"Shot","main_target":{"id":"bboy-lazlo_7","name":"bboy-lazlo","team_num":1},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Shot on Goal"},"event":"game:statfeed_event"}
{"data":{"event_name":"EpicSave","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Epic Save"},"event":"game:statfeed_event"}
{"data":{"event_name":"Win","main_target":{"id":"Archz_2good4u_1","name":"Archz_2good4u","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Win"},"event":"game:statfeed_event"}
{"data":{"event_name":"Win","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Win"},"event":"game:statfeed_event"}
{"data":{"event_name":"Win","main_target":{"id":"Vaultzzy_3","name":"Vaultzzy","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"Win"},"event":"game:statfeed_event"}
{"data":{"event_name":"MVP","main_target":{"id":"javierrh69_2","name":"javierrh69","team_num":0},"match_guid":"","secondary_target":{"id":"","name":"","team_num":-1},"type":"MVP"},"event":"game:statfeed_event"}
{"data":{"match_guid":"","winner_team_num":0},"event":"game:match_ended"}
{"data":{"match_guid":""},"event":"game:podium_start"}
{"data":{"match_guid":""},"event":"game:match_destroyed"}
$ErrorActionPreference = "Stop"
$bakkesPath = "$env:APPDATA\bakkesmod\bakkesmod"
$zipUrl = "https://gitlab.com/-/project/16389912/uploads/f2d83448dde919235edced70f591baf6/SOS-Plugin-1.6.0.zip"
$tempZip = Join-Path $env:TEMP "sos_install_$((Get-Date).Ticks).zip"
$extractPath = Join-Path $env:TEMP "sos_ext_$((Get-Date).Ticks)"
if (!(Test-Path $bakkesPath)) { throw "BakkesMod directory not found at $bakkesPath" }
Invoke-WebRequest -Uri $zipUrl -OutFile $tempZip -UserAgent "Mozilla/5.0"
New-Item -ItemType Directory -Path $extractPath -Force | Out-Null
Expand-Archive -Path $tempZip -DestinationPath $extractPath -Force
$folders = @("plugins", "data", "cfg")
foreach ($folder in $folders) {
$src = Join-Path $extractPath $folder
if (!(Test-Path $src)) { continue }
$dest = Join-Path $bakkesPath $folder
if (!(Test-Path $dest)) { New-Item -ItemType Directory -Path $dest | Out-Null }
Copy-Item -Path "$src\*" -Destination $dest -Recurse -Force
}
$cfgFile = Join-Path $bakkesPath "cfg\plugins.cfg"
$loadCmd = "plugin load sos"
if (!(Test-Path $cfgFile)) {
New-Item -ItemType File -Path $cfgFile -Value $loadCmd | Out-Null
return
}
$content = Get-Content $cfgFile
if ($content -contains $loadCmd) { return }
Add-Content -Path $cfgFile -Value "`n$loadCmd"
if (Test-Path $tempZip) { Remove-Item $tempZip -Force }
if (Test-Path $extractPath) { Remove-Item -Recurse $extractPath -Force }
$uri = New-Object System.Uri("ws://127.0.0.1:49122")
$cl = New-Object System.Net.WebSockets.ClientWebSocket
$ct = New-Object System.Threading.CancellationTokenSource
$cl.ConnectAsync($uri, $ct.Token).Wait()
$chunkBuffer = New-Object Byte[] 1024
while($cl.State -eq "Open") {
$ms = New-Object System.IO.MemoryStream
do {
$segment = New-Object ArraySegment[Byte] -ArgumentList @(,$chunkBuffer)
$res = $cl.ReceiveAsync($segment, $ct.Token).Result
if ($res.MessageType -eq "Close") { break }
$ms.Write($chunkBuffer, 0, $res.Count)
} while (!$res.EndOfMessage)
if ($ms.Length -gt 0) {
$ms.Position = 0
$reader = New-Object System.IO.StreamReader($ms)
$msg = $reader.ReadToEnd()
if ($msg -and $msg -notlike '*"event":"game:clock_stopped"*') {
$msg
}
}
$ms.Dispose()
}
$cl.Dispose()
$ct.Dispose()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment