123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/usr/bin/env bash
- # DESCRIPTION
- # This is the main patch script to ensure basic game functionality in Wine.
- #
- # EXIT STATUS
- # 0 : The patch was applied successfully.
- # other : Patch failure. See stdout or stderr output for details.
- # Templates for the next patch testing phase
- #echo " === !! UNTESTED PATCH. CHECK FOR BANS USING A TRASH ACCOUNT !! ==="
- #echo " === REPORT RESULTS TO THE MAIN REPOSITORY. THANK YOU. ==="
- #echo ""
- #echo "If you would like to test this patch, modify this script and remove the line below this one."
- #exit 1
- echo "[NOTE] As of game version 3.7.0, it is assumed that binary patches are no longer"
- echo " needed for upcoming game versions. If you face issues while starting the"
- echo " game or logging in, please consult TROUBLESHOOTING.md for workarounds."
- echo ""
- # MacOS and *BSD do not have md5sum: use md5 instead
- if [[ $(uname) == "Darwin" || $(uname) == *"BSD" ]]; then
- md5sum() {
- md5 -q $@
- }
- fi
- DIR=$(dirname "${BASH_SOURCE[0]}")
- DATADIR=$(find . -maxdepth 1 -type d -name "*_Data")
- FILE="UnityPlayer.dll"
- sum=($(md5sum $FILE))
- reltype="" # os, cn, bb
- block_analytics=1
- # original hashes
- # TODO: Switch back to file hashes on occasion
- if [ -e "GenshinImpact.exe" ]; then
- reltype="os"
- echo "--- Applying for: International version"
- fi
- if [ -e "YuanShen.exe" ]; then
- reltype="bb"
- echo "--- Applying for: bilibili/miHoYo CN version"
- fi
- if [ -z "$reltype" ]; then
- # The patch might corrupt invalid/outdated files if this check is skippd.
- echo "[ERROR] Wrong file version or the patch is already applied"
- echo " -> md5sum: ${sum}" && exit 1
- fi
- # =========== DO NOT REMOVE START ===========
- if [[ -e "$DIR/$FILE" ]]; then
- # There is a good reason for this check. Do not pollute the game directory.
- echo "[ERROR] Invalid patch download directory. Please move all"
- echo " patch files outside the game directory prior executing."
- echo " -> See README.md for proper installation instructions" && exit 1
- fi
- # =========== DO NOT REMOVE END ===========
- echo
- echo "--- Setting up blocked servers"
- # START OF SUDO DANGER ZONE
- etc_hosts="$(cat /etc/hosts)"
- # See dev_tools/network.md (up-to-date as of 4.1.0)
- if [[ "$reltype" == "os" ]]; then
- servers=$(cat <<EOF
- # Genshin logging servers (do not remove!)
- 0.0.0.0 log-upload-os.hoyoverse.com
- 0.0.0.0 overseauspider.yuanshen.com
- 0.0.0.0 ys-log-upload-os.hoyoverse.com
- EOF
- )
- else
- servers=$(cat <<EOF
- # Genshin logging servers (do not remove!)
- 0.0.0.0 log-upload.mihoyo.com
- 0.0.0.0 uspider.yuanshen.com
- 0.0.0.0 ys-log-upload.mihoyo.com
- EOF
- )
- fi
- if [[ ! "$etc_hosts" == *"$servers"* ]]; then
- echo "[Optional] Block analytics domains via /etc/hosts"
- echo " The game collects uniquely identifiable information about your system."
- echo " For details, refer to the official privacy page or the file"
- echo " '../static/analytics_data.md' contained in this repository."
- echo "$servers"
- read -r -p "Would you like to block the analytics servers above? [Y/n]: " choice
- if [[ ! "$choice" == [Nn0]* ]]; then
- echo "-- Adding analytics servers"
- echo "$servers" | sudo tee -a /etc/hosts
- if [ $? -ne 0 ]; then
- read -p "--- Failed. Please edit /etc/hosts manually. Enter to continue."
- fi
- else
- block_analytics=0
- fi
- else
- echo "--- Analytics servers are already blocked. Skip."
- fi
- etc_hosts=""
- # END OF SUDO DANGER ZONE
- # ===========================================================
- echo "--- Adding launcher script"
- cp -f "$DIR/patch_files/launcher.bat" .
- if [ "$block_analytics" -eq 0 ]; then
- # Remove the lines related to domain checking
- sed -i "/REM DOMAIN_CHECK_BEGIN/,/REM DOMAIN_CHECK_END/d" "launcher.bat"
- fi
- if [[ "$reltype" != "os" ]]; then
- # Same thing but different
- sed -i "s/GenshinImpact/YuanShen/g" "launcher.bat"
- sed -i "s/log-upload-os.hoyoverse/log-upload.mihoyo/g" "launcher.bat"
- sed -i "s/overseauspider.yuanshen/uspider.yuanshen/g" "launcher.bat"
- fi
- # Temporary workaround for faulty updates on game version 3.7.0
- if [ `find "$DATADIR/Plugins/" -iname telemetry.dll 2>/dev/null | wc -l` -gt 1 ]; then
- echo "--- Removing duplicated telemetry.dll"
- rm -f "$DATADIR/Plugins/Telemetry.dll"
- fi
- # Done!
- echo "==> Patch applied! Enjoy the game."
- echo
- echo "[NOTICE] Please refrain from sharing this project in public. Thank you."
- exit 0
|