diff --git a/.github/workflows/update_offsets.yml b/.github/workflows/update_offsets.yml index 432cf5f..23e68ed 100644 --- a/.github/workflows/update_offsets.yml +++ b/.github/workflows/update_offsets.yml @@ -27,13 +27,23 @@ jobs: id: run-python-script run: | python ./offsets/update_offsets.py + echo "exit_code=$?" >> $GITHUB_OUTPUT continue-on-error: true - name: Check Python Script Exit Code if: steps.run-python-script.outcome == 'failure' run: | - echo "Repository has no updates" - exit 0 + echo "Python script exited with code: ${{ steps.run-python-script.outputs.exit_code }}" + + if [ "${{ steps.run-python-script.outputs.exit_code }}" -eq 2 ]; then + echo "Could not parse offsets json file, most likely due to a schema change, check logs above!" + exit 1 + fi + + if [ "${{ steps.run-python-script.outputs.exit_code }}" -ne 0 ]; then + echo "Repository has no updates" + exit 0 + fi # - name: Commit and push changes # if: steps.run-python-script.outcome == 'success' diff --git a/offsets/update_offsets.py b/offsets/update_offsets.py index 86f3890..ff0cc0b 100644 --- a/offsets/update_offsets.py +++ b/offsets/update_offsets.py @@ -73,14 +73,19 @@ if offsets_json["build_number"] == int(build_number): print("Local offsets (dwLocalPlayer/dwViewMatrix) are outdated, pulling the latest offsets.") -offsets_json["build_number"] = int(build_number) +try: + offsets_json["build_number"] = int(build_number) -offsets_json["dwBuildNumber"] = offsets["engine2.dll"]["dwBuildNumber"] -offsets_json["dwLocalPlayer"] = offsets["client.dll"]["dwLocalPlayerPawn"] -offsets_json["dwLocalPlayerController"] = offsets["client.dll"]["dwLocalPlayerController"] -offsets_json["dwEntityList"] = offsets["client.dll"]["dwEntityList"] -offsets_json["dwViewMatrix"] = offsets["client.dll"]["dwViewMatrix"] -offsets_json["dwPlantedC4"] = offsets["client.dll"]["dwPlantedC4"] + offsets_json["dwBuildNumber"] = offsets["engine2.dll"]["dwBuildNumber"] + offsets_json["dwLocalPlayer"] = offsets["client.dll"]["dwLocalPlayerPawn"] + offsets_json["dwLocalPlayerController"] = offsets["client.dll"]["dwLocalPlayerController"] + offsets_json["dwEntityList"] = offsets["client.dll"]["dwEntityList"] + offsets_json["dwViewMatrix"] = offsets["client.dll"]["dwViewMatrix"] + offsets_json["dwPlantedC4"] = offsets["client.dll"]["dwPlantedC4"] +except KeyError as e: + print(f"KeyError (#1): {e}") + print("The structure of the remote offsets.json has changed. Please check the repository for updates.") + exit(2) client = get_raw_file(urls["client_dll"]) @@ -88,33 +93,38 @@ if not client: print("Could not find the latest client.dll.") exit(1) -client_json_base = client["client.dll"]["classes"] +try: + client_json_base = client["client.dll"]["classes"] -offsets_json["m_bIsDefusing"] = client_json_base["C_CSPlayerPawn"]["fields"]["m_bIsDefusing"] -offsets_json["m_ArmorValue"] = client_json_base["C_CSPlayerPawn"]["fields"]["m_ArmorValue"] + offsets_json["m_bIsDefusing"] = client_json_base["C_CSPlayerPawn"]["fields"]["m_bIsDefusing"] + offsets_json["m_ArmorValue"] = client_json_base["C_CSPlayerPawn"]["fields"]["m_ArmorValue"] + offsets_json["m_pClippingWeapon"] = client_json_base["C_CSPlayerPawn"]["fields"]["m_pClippingWeapon"] -offsets_json["m_pClippingWeapon"] = client_json_base["C_CSPlayerPawnBase"]["fields"]["m_pClippingWeapon"] -offsets_json["m_flFlashOverlayAlpha"] = client_json_base["C_CSPlayerPawnBase"]["fields"]["m_flFlashOverlayAlpha"] + offsets_json["m_flFlashOverlayAlpha"] = client_json_base["C_CSPlayerPawnBase"]["fields"]["m_flFlashOverlayAlpha"] -offsets_json["m_flC4Blow"] = client_json_base["C_PlantedC4"]["fields"]["m_flC4Blow"] -offsets_json["m_flNextBeep"] = client_json_base["C_PlantedC4"]["fields"]["m_flNextBeep"] -offsets_json["m_flTimerLength"] = client_json_base["C_PlantedC4"]["fields"]["m_flTimerLength"] + offsets_json["m_flC4Blow"] = client_json_base["C_PlantedC4"]["fields"]["m_flC4Blow"] + offsets_json["m_flNextBeep"] = client_json_base["C_PlantedC4"]["fields"]["m_flNextBeep"] + offsets_json["m_flTimerLength"] = client_json_base["C_PlantedC4"]["fields"]["m_flTimerLength"] -offsets_json["m_hPlayerPawn"] = client_json_base["CCSPlayerController"]["fields"]["m_hPlayerPawn"] -offsets_json["m_iAccount"] = client_json_base["CCSPlayerController_InGameMoneyServices"]["fields"]["m_iAccount"] -offsets_json["m_pInGameMoneyServices"] = client_json_base["CCSPlayerController"]["fields"]["m_pInGameMoneyServices"] + offsets_json["m_hPlayerPawn"] = client_json_base["CCSPlayerController"]["fields"]["m_hPlayerPawn"] + offsets_json["m_iAccount"] = client_json_base["CCSPlayerController_InGameMoneyServices"]["fields"]["m_iAccount"] + offsets_json["m_pInGameMoneyServices"] = client_json_base["CCSPlayerController"]["fields"]["m_pInGameMoneyServices"] -offsets_json["m_sSanitizedPlayerName"] = client_json_base["CCSPlayerController"]["fields"]["m_sSanitizedPlayerName"] # Added for backwards compatibility, this is the same as m_iszPlayerName -offsets_json["m_hController"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_hController"] -offsets_json["m_iszPlayerName"] = client_json_base["CBasePlayerController"]["fields"]["m_iszPlayerName"] + offsets_json["m_sSanitizedPlayerName"] = client_json_base["CCSPlayerController"]["fields"]["m_sSanitizedPlayerName"] # Added for backwards compatibility, this is the same as m_iszPlayerName + offsets_json["m_hController"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_hController"] + offsets_json["m_iszPlayerName"] = client_json_base["CBasePlayerController"]["fields"]["m_iszPlayerName"] -offsets_json["m_iHealth"] = client_json_base["C_BaseEntity"]["fields"]["m_iHealth"] -offsets_json["m_iTeamNum"] = client_json_base["C_BaseEntity"]["fields"]["m_iTeamNum"] -offsets_json["m_pGameSceneNode"] = client_json_base["C_BaseEntity"]["fields"]["m_pGameSceneNode"] + offsets_json["m_iHealth"] = client_json_base["C_BaseEntity"]["fields"]["m_iHealth"] + offsets_json["m_iTeamNum"] = client_json_base["C_BaseEntity"]["fields"]["m_iTeamNum"] + offsets_json["m_pGameSceneNode"] = client_json_base["C_BaseEntity"]["fields"]["m_pGameSceneNode"] -offsets_json["m_szName"] = client_json_base["CCSWeaponBaseVData"]["fields"]["m_szName"] -offsets_json["m_vOldOrigin"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_vOldOrigin"] -offsets_json["m_vecAbsOrigin"] = client_json_base["CGameSceneNode"]["fields"]["m_vecAbsOrigin"] + offsets_json["m_szName"] = client_json_base["CCSWeaponBaseVData"]["fields"]["m_szName"] + offsets_json["m_vOldOrigin"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_vOldOrigin"] + offsets_json["m_vecAbsOrigin"] = client_json_base["CGameSceneNode"]["fields"]["m_vecAbsOrigin"] +except KeyError as e: + print(f"KeyError (#2): {e}") + print("The structure of the remote client_dll.json has changed. Please check the repository for updates.") + exit(2) with open(dest_path, 'w') as dest_file: json.dump(offsets_json, dest_file, indent=4)