Compare commits

..

16 Commits

Author SHA1 Message Date
neru 697bff9752 chore: make more logs dbg only
Build / build (push) Successful in 3m26s
2026-04-09 23:27:08 -03:00
neru 0fa2e0540b feat: add getCatalogItems listener
Build / build (push) Successful in 3m32s
2026-04-09 23:23:10 -03:00
neru a1a123054f feat: move dumping to separate thread 2026-04-09 23:16:12 -03:00
neru 76d581c419 feat: add message spoofing 2026-04-09 23:12:12 -03:00
neru 4f91ab9cff fix: prevent log spam on rel builds 2026-04-09 23:11:55 -03:00
neru e6111f8dbd feat: add message spoofing 2026-04-09 23:11:44 -03:00
neru 7ec6e385a0 feat: add runtime catalog dumping 2026-04-09 23:11:31 -03:00
neru 7427357bc5 fix: dangling else
Build / build (push) Successful in 3m12s
2026-04-09 06:45:58 -03:00
neru 6b63d54eb8 build: modify tags, keep commits of failed runs
Build / build (push) Failing after 2m45s
2026-04-09 06:41:13 -03:00
neru a3df782245 feat: add getExePath 2026-04-09 06:40:34 -03:00
neru d4650aac84 feat: completely refactor dumper again
Build / build (push) Has been cancelled
2026-04-09 06:38:08 -03:00
neru 73b1c95257 chore: update items to reflect dumper changes 2026-04-09 06:37:59 -03:00
neru 93fe999249 feat: change items dump format 2026-04-09 06:37:53 -03:00
neru 393a591485 style: misc changes 2026-04-09 03:18:16 -03:00
neru 2b8cbafa19 feat: skip string scans for non bhvrdbd urls 2026-04-08 04:10:53 -03:00
neru 623542046a feat: add fun fact
Build / build (push) Successful in 3m19s
2026-04-07 19:43:20 -03:00
8 changed files with 656 additions and 573 deletions
+22 -20
View File
@@ -22,36 +22,31 @@ jobs:
if: ${{ github.event_name == 'push' }} if: ${{ github.event_name == 'push' }}
shell: bash shell: bash
run: | run: |
git fetch --tags || true git fetch --tags --force
# Determine last tag and log range if LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null); then
if git describe --tags --abbrev=0 >/dev/null 2>&1; then
LAST_TAG=$(git describe --tags --abbrev=0)
RANGE="${LAST_TAG}..HEAD" RANGE="${LAST_TAG}..HEAD"
else else
LAST_TAG="v0.1.9" LAST_TAG="v0.1.9"
RANGE="HEAD" RANGE="HEAD"
fi fi
# Calculate next version
IFS='.' read -r major minor patch <<< "${LAST_TAG#v}" IFS='.' read -r major minor patch <<< "${LAST_TAG#v}"
NEW_VERSION="$major.$minor.$((patch + 1))" NEW_VERSION="$major.$minor.$((patch + 1))"
NEW_TAG="v$NEW_VERSION"
# Log commits
CHANGELOG=$(git log $RANGE --oneline | sed 's/^/* /') CHANGELOG=$(git log $RANGE --oneline | sed 's/^/* /')
[ -z "$CHANGELOG" ] && CHANGELOG="Maintenance build." if [ -z "$CHANGELOG" ]; then
CHANGELOG="Re-run of version $NEW_VERSION or maintenance build."
fi
# Tag and push back to Gitea
git tag $NEW_TAG
git push origin $NEW_TAG
# Set outputs for next steps
echo "version-string=$NEW_VERSION" >> $GITHUB_OUTPUT echo "version-string=$NEW_VERSION" >> $GITHUB_OUTPUT
echo "changelog<<EOF" >> $GITHUB_OUTPUT echo "new-tag=v$NEW_VERSION" >> $GITHUB_OUTPUT
echo "## What's Changed" >> $GITHUB_OUTPUT {
echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "changelog<<EOF"
echo "EOF" >> $GITHUB_OUTPUT echo "## What's Changed"
echo "$CHANGELOG"
echo "EOF"
} >> $GITHUB_OUTPUT
- name: Setup Tools Cache - name: Setup Tools Cache
id: tools-cache id: tools-cache
@@ -124,11 +119,18 @@ jobs:
name: unlocker-build name: unlocker-build
path: unlocker.zip path: unlocker.zip
- name: Finalize Version and Push Tag
if: ${{ github.event_name == 'push' && success() }}
run: |
git tag ${{ steps.calculate-version.outputs.new-tag }}
git push origin ${{ steps.calculate-version.outputs.new-tag }}
- name: Create Gitea Release - name: Create Gitea Release
if: ${{ github.event_name == 'push' }} if: ${{ github.event_name == 'push' && success() }}
uses: akkuman/gitea-release-action@v1 uses: akkuman/gitea-release-action@v1
with: with:
files: unlocker.zip files: unlocker.zip
tag_name: v${{ steps.calculate-version.outputs.version-string }} tag_name: ${{ steps.calculate-version.outputs.new-tag }}
name: Release v${{ steps.calculate-version.outputs.version-string }} name: Release ${{ steps.calculate-version.outputs.new-tag }}
body: ${{ steps.calculate-version.outputs.changelog }} body: ${{ steps.calculate-version.outputs.changelog }}
+1
View File
@@ -8,3 +8,4 @@ for /r "src" %%f in (*.cpp *.h *.cs) do (
echo done echo done
pause pause
+105 -109
View File
@@ -1,111 +1,107 @@
{ {
"Camper": { "Campers": [
"Items": [ "Father_Key_Card",
"Father_Key_Card", "FireflyLantern",
"FireflyLantern", "Item_Camper_AlexsToolbox",
"Item_Camper_AlexsToolbox", "Item_Camper_AnniversaryToolbox",
"Item_Camper_AnniversaryToolbox", "Item_Camper_BeigeMap",
"Item_Camper_BeigeMap", "Item_Camper_BrokenKey",
"Item_Camper_BrokenKey", "Item_Camper_CommodiousToolbox",
"Item_Camper_CommodiousToolbox", "Item_Camper_ContaminationSerum",
"Item_Camper_ContaminationSerum", "Item_Camper_DullKey",
"Item_Camper_DullKey", "Item_Camper_EngineerToolbox",
"Item_Camper_EngineerToolbox", "Item_Camper_FadedMap",
"Item_Camper_FadedMap", "Item_Camper_Firecracker_Anniversary2019",
"Item_Camper_Firecracker_Anniversary2019", "Item_Camper_Firecracker_Chinese",
"Item_Camper_Firecracker_Chinese", "Item_Camper_Firecracker_Flashbang",
"Item_Camper_Firecracker_Flashbang", "Item_Camper_Firecracker_WinterEvent",
"Item_Camper_Firecracker_WinterEvent", "Item_Camper_Flashlight",
"Item_Camper_Flashlight", "Item_Camper_Flashlight_Anniversary2020",
"Item_Camper_Flashlight_Anniversary2020", "Item_Camper_Flashlight_Anniversary2022",
"Item_Camper_Flashlight_Anniversary2022", "Item_Camper_Flashlight_Random",
"Item_Camper_Flashlight_Random", "Item_Camper_Flashlight02",
"Item_Camper_Flashlight02", "Item_Camper_Flashlight03",
"Item_Camper_Flashlight03", "Item_Camper_Flashlight04",
"Item_Camper_Flashlight04", "Item_Camper_JerryCan_Spring2025",
"Item_Camper_JerryCan_Spring2025", "Item_Camper_K29InfectionRemover",
"Item_Camper_K29InfectionRemover", "Item_Camper_K32Emp",
"Item_Camper_K32Emp", "Item_Camper_K33Turret",
"Item_Camper_K33Turret", "Item_Camper_K36MagicItem_Boots",
"Item_Camper_K36MagicItem_Boots", "Item_Camper_K36MagicItem_Bracers",
"Item_Camper_K36MagicItem_Bracers", "Item_Camper_K36MagicItem_VecnaEye",
"Item_Camper_K36MagicItem_VecnaEye", "Item_Camper_K36MagicItem_VecnaHand",
"Item_Camper_K36MagicItem_VecnaHand", "Item_Camper_Key",
"Item_Camper_Key", "Item_Camper_Key_Random",
"Item_Camper_Key_Random", "Item_Camper_LunarToolbox",
"Item_Camper_LunarToolbox", "Item_Camper_Map_Random",
"Item_Camper_Map_Random", "Item_Camper_Map_Spring2024",
"Item_Camper_Map_Spring2024", "Item_Camper_MechanicsToolbox",
"Item_Camper_MechanicsToolbox", "Item_Camper_MedKit",
"Item_Camper_MedKit", "Item_Camper_Medkit_Anniversary2020",
"Item_Camper_Medkit_Anniversary2020", "Item_Camper_Medkit_Anniversary2022",
"Item_Camper_Medkit_Anniversary2022", "Item_Camper_MedKit_Random",
"Item_Camper_MedKit_Random", "Item_Camper_MedKit02",
"Item_Camper_MedKit02", "Item_Camper_MedKit03",
"Item_Camper_MedKit03", "Item_Camper_MedKit04",
"Item_Camper_MedKit04", "Item_Camper_Medkit05",
"Item_Camper_Medkit05", "Item_Camper_OnryoTape",
"Item_Camper_OnryoTape", "Item_Camper_RainbowMap",
"Item_Camper_RainbowMap", "Item_Camper_Toolbox",
"Item_Camper_Toolbox", "Item_Camper_Toolbox_Anniversary2022",
"Item_Camper_Toolbox_Anniversary2022", "Item_Camper_Toolbox_Random",
"Item_Camper_Toolbox_Random", "Item_Camper_VoidBomb_Halloween2024",
"Item_Camper_VoidBomb_Halloween2024", "Item_Camper_WornoutToolbox",
"Item_Camper_WornoutToolbox", "Item_FragileObject",
"Item_FragileObject", "Item_LamentConfiguration",
"Item_LamentConfiguration", "Item_Survivor_CalamariContaminationAntidote",
"Item_Survivor_CalamariContaminationAntidote", "Item_Survivor_K41Mushroom",
"Item_Survivor_K41Mushroom", "Item_Survivor_MakeshiftFogVial",
"Item_Survivor_MakeshiftFogVial", "Item_Survivor_PrototypeFogVial",
"Item_Survivor_PrototypeFogVial", "Item_Survivor_VigosFogVial"
"Item_Survivor_VigosFogVial" ],
] "Slashers": [
}, "Item_Blighted_Serum",
"Slasher": { "Item_Slasher_Beartrap",
"Powers": [ "Item_Slasher_Blinker",
"Item_Blighted_Serum", "Item_Slasher_Chainsaw",
"Item_Slasher_Beartrap", "Item_Slasher_CloakBell",
"Item_Slasher_Blinker", "Item_Slasher_DreamInducer",
"Item_Slasher_Chainsaw", "Item_Slasher_Frenzy",
"Item_Slasher_CloakBell", "Item_Slasher_GasBomb",
"Item_Slasher_DreamInducer", "Item_Slasher_GhostPower",
"Item_Slasher_Frenzy", "Item_Slasher_HarpoonRifle",
"Item_Slasher_GasBomb", "Item_Slasher_Hatchet",
"Item_Slasher_GhostPower", "Item_Slasher_K21Power",
"Item_Slasher_HarpoonRifle", "Item_Slasher_K22Power",
"Item_Slasher_Hatchet", "Item_Slasher_K24Power",
"Item_Slasher_K21Power", "Item_Slasher_K25Power",
"Item_Slasher_K22Power", "Item_Slasher_K26Power",
"Item_Slasher_K24Power", "Item_Slasher_K27Power",
"Item_Slasher_K25Power", "Item_Slasher_K28Power",
"Item_Slasher_K26Power", "Item_Slasher_K29Power",
"Item_Slasher_K27Power", "Item_Slasher_K30Power",
"Item_Slasher_K28Power", "Item_Slasher_K31Power",
"Item_Slasher_K29Power", "Item_Slasher_K32Power",
"Item_Slasher_K30Power", "Item_Slasher_K33Power",
"Item_Slasher_K31Power", "Item_Slasher_K34Power",
"Item_Slasher_K32Power", "Item_Slasher_K35Power",
"Item_Slasher_K33Power", "Item_Slasher_K36Power",
"Item_Slasher_K34Power", "Item_Slasher_K37Power",
"Item_Slasher_K35Power", "Item_Slasher_K38Power",
"Item_Slasher_K36Power", "Item_Slasher_K39Power",
"Item_Slasher_K37Power", "Item_Slasher_K40Power",
"Item_Slasher_K38Power", "Item_Slasher_K41Power",
"Item_Slasher_K39Power", "Item_Slasher_K42Power",
"Item_Slasher_K40Power", "Item_Slasher_Kanobo",
"Item_Slasher_K41Power", "Item_Slasher_Killer07Item",
"Item_Slasher_K42Power", "Item_Slasher_LFChainsaw",
"Item_Slasher_Kanobo", "Item_Slasher_PhantomTrap",
"Item_Slasher_Killer07Item", "Item_Slasher_PhaseWalker",
"Item_Slasher_LFChainsaw", "Item_Slasher_PlaguePower",
"Item_Slasher_PhantomTrap", "Item_Slasher_QatarKillerPower",
"Item_Slasher_PhaseWalker", "Item_Slasher_ReverseBearTrap",
"Item_Slasher_PlaguePower", "Item_Slasher_Stalker",
"Item_Slasher_QatarKillerPower", "Item_Slasher_ThrowingKnives",
"Item_Slasher_ReverseBearTrap", "Item_Slasher_TormentMode"
"Item_Slasher_Stalker", ]
"Item_Slasher_ThrowingKnives",
"Item_Slasher_TormentMode"
]
}
} }
+2 -2
View File
@@ -104,8 +104,8 @@ class DumpByDaylight
var itemsSerialized = new var itemsSerialized = new
{ {
Camper = new { Items = camperItems.OrderBy(x => x).ToList() }, Campers = camperItems.OrderBy(x => x).ToList(),
Slasher = new { Powers = slasherPowers.OrderBy(x => x).ToList() } Slashers = slasherPowers.OrderBy(x => x).ToList()
}; };
File.WriteAllText("items.json", JsonConvert.SerializeObject(itemsSerialized, Formatting.Indented)); File.WriteAllText("items.json", JsonConvert.SerializeObject(itemsSerialized, Formatting.Indented));
+484 -438
View File
File diff suppressed because it is too large Load Diff
+20 -4
View File
@@ -5,6 +5,8 @@
#include <unordered_set> #include <unordered_set>
#include <string> #include <string>
#include <mutex>
#include <nlohmann/json_fwd.hpp> #include <nlohmann/json_fwd.hpp>
class Spoofer class Spoofer
@@ -16,11 +18,22 @@ class Spoofer
void registerListeners(Proxy* proxy); void registerListeners(Proxy* proxy);
void loadData(); void loadData();
void parseCatalog(std::string data); bool parseCatalog(std::string data);
bool parseStackable(std::string data, std::unordered_set<std::string>& camperSet,
std::unordered_set<std::string>& slasherSet);
void parseAndDumpCatalog(std::string& data); std::string getRandomItem();
int getRandomQuantity();
void generateBloodweb(nlohmann::json& data);
void modifyCharacterData(nlohmann::json& js); void modifyCharacterData(nlohmann::json& js);
void onGetCatalogItems(std::string& body);
void onGetAll(std::string& body);
void onInventoryAll(std::string& body);
void onMessageList(std::string& body);
void onBloodweb(std::string& body, std::string& respHeaders);
void serverResponseHandler(const std::string& url, std::string& body, std::string& respHeaders); void serverResponseHandler(const std::string& url, std::string& body, std::string& respHeaders);
void clientRequestHandler(std::string& url, const std::string& body, std::string& reqHeaders); void clientRequestHandler(std::string& url, const std::string& body, std::string& reqHeaders);
@@ -33,11 +46,14 @@ class Spoofer
std::unordered_set<std::string> _camperAddonIds; std::unordered_set<std::string> _camperAddonIds;
std::unordered_set<std::string> _slasherAddonIds; std::unordered_set<std::string> _slasherAddonIds;
std::unordered_set<std::string> _slasherPerkIds;
std::unordered_set<std::string> _camperPerkIds; std::unordered_set<std::string> _camperPerkIds;
std::unordered_set<std::string> _slasherPerkIds;
std::unordered_set<std::string> _catalogOutfitIds; std::unordered_set<std::string> _catalogOutfitIds;
std::unordered_set<std::string> _catalogItemIds; std::unordered_set<std::string> _catalogItemIds;
std::string _lastBloodWebChar = "Ace"; std::unordered_set<std::string> _unownedCharacters;
std::string _lastBloodWebChar = "";
std::mutex _mtx;
}; };
+14
View File
@@ -0,0 +1,14 @@
#include "utils.h"
#include <minwindef.h>
#include <libloaderapi.h>
std::string utils::getExePath()
{
char buffer[MAX_PATH];
GetModuleFileNameA(NULL, buffer, MAX_PATH);
std::string path(buffer);
size_t pos = path.find_last_of("\\/");
if (pos != std::string::npos) return path.substr(0, pos + 1);
return "";
}
+8
View File
@@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace utils
{
std::string getExePath();
}