Compare commits
37 Commits
ef83c60711
...
2a94a94a2d
Author | SHA1 | Date | |
---|---|---|---|
2a94a94a2d | |||
bab3977af0 | |||
2f25298ad1 | |||
af62974fdb | |||
d4c0104fcc
|
|||
67c419d7a4 | |||
4a3d9a6d6f | |||
100d5f49a6 | |||
235a267d43 | |||
a43b415d4b | |||
fc0aa3a3f8 | |||
4580894721 | |||
7036f06b6f | |||
36e3163edf | |||
576155e0df | |||
6e5cee5ccc | |||
8faed4e910 | |||
c85b706fee | |||
732a00183f | |||
4906e8cc3a | |||
51cc3610b8 | |||
3d6c08b319 | |||
0e0ec3028d | |||
92d86fb496 | |||
8b223bed38 | |||
fe1ff111fa | |||
3e67394c91 | |||
e3be4858b0 | |||
a81a8d8fe0 | |||
ae17cd8b01 | |||
00fed7a134 | |||
e89dae4f23 | |||
068d148eab | |||
c15ec0102f | |||
4ee7af0997 | |||
629f50e097 | |||
0c97d2c003 |
@ -7,8 +7,8 @@
|
||||
<a href="https://flathub.org/ru/apps/ru.linux_gaming.PortProton">
|
||||
<img src="https://img.shields.io/flathub/downloads/ru.linux_gaming.PortProton?style=flat&logo=flathub" alt="Flathub Downloads">
|
||||
</a>
|
||||
<a href="https://discord.gg/FTaheP99wE">
|
||||
<img src="https://img.shields.io/discord/378683352946835456?logo=discord" alt="Discord">
|
||||
<a href="https://t.me/linux_gaming_ru">
|
||||
<img src="https://img.shields.io/endpoint?&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Flinux_gaming_ru" alt="Telegram">
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@linux-gaming5986">
|
||||
<img src="https://img.shields.io/youtube/channel/subscribers/UCbI8OJx2D3q-4QKt4LffXTw?style=flat&logo=youtube" alt="YouTube Channel Subscribers">
|
||||
|
@ -7,8 +7,8 @@
|
||||
<a href="https://flathub.org/apps/ru.linux_gaming.PortProton">
|
||||
<img src="https://img.shields.io/flathub/downloads/ru.linux_gaming.PortProton?style=flat&logo=flathub" alt="Flathub Downloads">
|
||||
</a>
|
||||
<a href="https://discord.gg/FTaheP99wE">
|
||||
<img src="https://img.shields.io/discord/378683352946835456?logo=discord" alt="Discord">
|
||||
<a href="https://t.me/linux_gaming_ru">
|
||||
<img src="https://img.shields.io/endpoint?&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Flinux_gaming_ru" alt="Telegram">
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@linux-gaming5986">
|
||||
<img src="https://img.shields.io/youtube/channel/subscribers/UCbI8OJx2D3q-4QKt4LffXTw?style=flat&logo=youtube" alt="YouTube Channel Subscribers">
|
||||
|
@ -2,6 +2,17 @@ You can help us in the development of the project on the website: https://linux-
|
||||
----------------------------------------
|
||||
Changelog:
|
||||
|
||||
###Scripts version 2369### / Date: 31.10.2024 / Download update size: 4 megabytes
|
||||
* added automatic installation of games (thanks to Chal55rus):
|
||||
* Chicken Invaders Universe
|
||||
* Eldevin
|
||||
* The World of Nifty Craft
|
||||
* Toribash
|
||||
* improved performance of the time spent in the game counter (thanks to Htylol)
|
||||
* fixed prefix backups for systems with SELinux (thanks to Htylol and Alek)
|
||||
* updated CLI and added arguments: --launch, --edit-db (thanks to Htylol)
|
||||
* many other improvements and script optimizations
|
||||
|
||||
###Scripts version 2368### / Date: 27.10.2024 / Download update size: 4 megabytes
|
||||
* added automatic installation of games (thanks to Chal55rus):
|
||||
* Goose Goose Duck
|
||||
|
@ -2,6 +2,17 @@
|
||||
-----------------------------------------
|
||||
История изменений:
|
||||
|
||||
###Scripts version 2369### / Дата: 31.10.2024 / Размер скачиваемого обновления: 4 мегабайта
|
||||
* добавлены автоустановки игр (спасибо Chal55rus):
|
||||
* Chicken Invaders Universe
|
||||
* Eldevin
|
||||
* The World of Nifty Craft
|
||||
* Toribash
|
||||
* улучшена работа счетчика времени проведенного в игре (спасибо Htylol)
|
||||
* исправлены бэкапы префиксов для систем с SELinux (спасибо Htylol и Alek)
|
||||
* обновлен CLI и добавлены аргументы: --launch, --edit-db (спасибо Htylol)
|
||||
* множество других улучшений и оптимизаций скриптов
|
||||
|
||||
###Scripts version 2368### / Дата: 27.10.2024 / Размер скачиваемого обновления: 4 мегабайта
|
||||
* добавлены автоустановки игр (спасибо Chal55rus):
|
||||
* Goose Goose Duck
|
||||
|
BIN
data_from_portwine/img/gui/chickeninvadersuniverse.png
Normal file
BIN
data_from_portwine/img/gui/chickeninvadersuniverse.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
BIN
data_from_portwine/img/gui/eldevin.png
Normal file
BIN
data_from_portwine/img/gui/eldevin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
BIN
data_from_portwine/img/gui/theworldofniftycraft.png
Normal file
BIN
data_from_portwine/img/gui/theworldofniftycraft.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.4 KiB |
BIN
data_from_portwine/img/gui/toribash.png
Normal file
BIN
data_from_portwine/img/gui/toribash.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
@ -63,6 +63,21 @@ export -f make_abbreviation
|
||||
|
||||
check_variables () { [[ -z ${!1} ]] && export $1="$2" ;}
|
||||
|
||||
# Эксортирует несколько переменных за один раз (одной командой)
|
||||
# и создаёт список этих переменных в $keys_all
|
||||
# К примеру set_several_variables PW_MANGOHUD=1 PW_VKBASALT=0
|
||||
set_several_variables () {
|
||||
local key value
|
||||
unset keys_all
|
||||
while (( $# > 0 )) ; do
|
||||
key=${1//=*/}
|
||||
value=${1//*=/}
|
||||
keys_all+="$key "
|
||||
export "$key"="$value"
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
add_to_var () {
|
||||
if ! echo ${!1} | grep "$2" &>/dev/null
|
||||
then export $1="${!1} $2"
|
||||
@ -526,7 +541,7 @@ try_download () {
|
||||
if [[ -n "${PW_AUTOINSTALL_EXE}" ]] \
|
||||
&& [[ "$no_mirror" == "true" ]]
|
||||
then
|
||||
filename="$(basename "${PW_AUTOINSTALL_EXE}")"
|
||||
filename="${PW_AUTOINSTALL_EXE//*\//}"
|
||||
else
|
||||
filename="$(basename "$1")"
|
||||
fi
|
||||
@ -560,7 +575,7 @@ try_download () {
|
||||
else
|
||||
curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \
|
||||
-H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o "$dest" 2>&1 | \
|
||||
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
||||
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|100||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
||||
"$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \
|
||||
--auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
|
||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE"
|
||||
@ -571,7 +586,7 @@ try_download () {
|
||||
print_warning "Failed download $filename from ${FIRST_URL[0]}, trying mirror: ${SECOND_URL[0]}"
|
||||
curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \
|
||||
-H 'Pragma: no-cache' -L ${SECOND_URL[@]} -o "$dest" 2>&1 | \
|
||||
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
||||
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|100||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
||||
"$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \
|
||||
--auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
|
||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE"
|
||||
@ -748,6 +763,26 @@ check_flatpak () {
|
||||
}
|
||||
export -f check_flatpak
|
||||
|
||||
check_selinux () {
|
||||
if [[ -n "$SELINUX_IN_USE" ]]
|
||||
then [[ "$SELINUX_IN_USE" == 1 ]] && return 0 || return 1
|
||||
fi
|
||||
if check_flatpak ; then
|
||||
if grep -i ^"SELINUX=enforcing" /run/host/etc/selinux/config &>/dev/null ; then
|
||||
export SELINUX_IN_USE=1
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
if grep -i ^"SELINUX=enforcing" /etc/selinux/config &>/dev/null ; then
|
||||
export SELINUX_IN_USE=1
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
export SELINUX_IN_USE=0
|
||||
return 1
|
||||
}
|
||||
export -f check_selinux
|
||||
|
||||
background_pid () {
|
||||
local arg1=$1 # --start или --end
|
||||
local arg2=$2 # Название команды
|
||||
@ -796,9 +831,9 @@ unpack () {
|
||||
[[ "$?" != 0 ]] && return 1 || return 0
|
||||
elif [[ "$silent" != "true" ]] ; then
|
||||
set -o pipefail
|
||||
pw_start_progress_bar_cover_block "${COVERS_PATH}/unpacking_${LANGUAGE_GIF}.gif"
|
||||
pw_start_progress_bar_cover "${COVERS_PATH}/unpacking_${LANGUAGE_GIF}.gif" --block
|
||||
$command "$1" -C "$2" 2>/dev/null
|
||||
pw_stop_progress_bar_cover_block
|
||||
pw_stop_progress_bar
|
||||
[[ "${PIPESTATUS[0]}" != 0 ]] && print_error "File $1 unpacking error." && return 1 || return 0
|
||||
else
|
||||
$command "$1" -C "$2" && return 0 || return 1
|
||||
@ -849,7 +884,12 @@ debug_timer () {
|
||||
# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени)
|
||||
# Параллельное создание базы по времени после завершения приложения
|
||||
search_desktop_file () {
|
||||
local desktop_file desktop_file_new EXEC_DESKTOP line1 line2 TIME_TOTAL
|
||||
local desktop_file desktop_file_new line1 line2 FILE_SHA256SUM_ARRAY EXEC_DESKTOP BROKEN_LINE FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND
|
||||
if [[ -z $FILE_SHA256SUM ]] ; then
|
||||
read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe")
|
||||
FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]}
|
||||
edit_db_from_gui FILE_SHA256SUM
|
||||
fi
|
||||
for desktop_file in "$PORT_WINE_PATH"/* ; do
|
||||
desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
|
||||
if [[ $desktop_file_new =~ .desktop$ ]] ; then
|
||||
@ -863,62 +903,174 @@ search_desktop_file () {
|
||||
fi
|
||||
fi
|
||||
done < "$desktop_file"
|
||||
while IFS=" " read -r -a line2 ; do
|
||||
if [[ ${line2[1]} == "$ENTRY_POINT" ]] ; then
|
||||
break
|
||||
fi
|
||||
done < "$PORT_WINE_TMP_PATH/statistics"
|
||||
if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then
|
||||
DESKTOP_CORRECT_FILE="$desktop_file"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
IFS="$orig_IFS"
|
||||
if [[ -n ${line2[2]} ]]
|
||||
then TIME_CURRENT=${line2[2]}
|
||||
else TIME_CURRENT=0
|
||||
if [[ $DESKTOP_WITH_TIME == enabled ]] || [[ $SORT_WITH_TIME == enabled ]] ; then
|
||||
while IFS=" " read -r -a line2 ; do
|
||||
if [[ -z ${line2[0]} ]] \
|
||||
|| [[ ! ${line2[0],,} =~ (.bat$|.exe$|.msi$|.reg$) ]] ; then
|
||||
BROKEN_LINE=1
|
||||
break
|
||||
fi
|
||||
export TIME_CURRENT
|
||||
# Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню
|
||||
if [[ ${line2[1]} == "$FILE_SHA256SUM" ]] ; then
|
||||
FILE_SHA256SUM_FOUND=1
|
||||
break
|
||||
fi
|
||||
if [[ ${line2[1]} != "$FILE_SHA256SUM" ]] \
|
||||
&& [[ ${line2[0]} == "${portwine_exe// /#@_@#}" ]] ; then
|
||||
FILE_SHA256SUM_NOT_FOUND=1
|
||||
break
|
||||
fi
|
||||
done < "$PORT_WINE_TMP_PATH/statistics"
|
||||
fi
|
||||
IFS="$orig_IFS"
|
||||
if [[ $DESKTOP_WITH_TIME == enabled ]] || [[ $SORT_WITH_TIME == enabled ]] ; then
|
||||
local line3 line4 count_line i TIME_TOTAL SKIP_REPAIR
|
||||
## Ремонты:
|
||||
# Ремонт, проверяет чтобы длинна хеш суммы была равна 64 символам, в ином случае удалит битые
|
||||
if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] && [[ ${#line2[1]} != "64" ]] ; then
|
||||
while IFS=" " read -r -a line3 ; do
|
||||
if [[ ${#line3[1]} == "64" ]]
|
||||
then echo "${line3[*]}"
|
||||
fi
|
||||
done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair"
|
||||
IFS="$orig_IFS"
|
||||
try_remove_file "$PORT_WINE_TMP_PATH/statistics"
|
||||
mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Ремонт, если есть пустые строки и непонятные строки без .exe, .bat, .msi, .reg
|
||||
if [[ $BROKEN_LINE == 1 ]] ; then
|
||||
while IFS=" " read -r -a line4 ; do
|
||||
if [[ -n ${line4[0]} ]] && [[ ${line4[0]} =~ (.[Bb][Aa][Tt]$|.[Ee][Xx][Ee]$|.[Mm][Ss][Ii]$|.[Rr][Ee][Gg]$) ]]
|
||||
then echo "${line4[*]}"
|
||||
fi
|
||||
done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair"
|
||||
IFS="$orig_IFS"
|
||||
try_remove_file "$PORT_WINE_TMP_PATH/statistics"
|
||||
mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Ремонтирует путь на новый, если вдруг путь до .exe файла битый или изменился, но .exe файл он опознал
|
||||
if [[ $FILE_SHA256SUM_FOUND == 1 ]] && [[ ${line2[0]} != "${portwine_exe// /#@_@#}" ]] ; then
|
||||
sed -i "s|${line2[0]} ${line2[1]}|${portwine_exe// /#@_@#} ${line2[1]}|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
line2[0]=${portwine_exe// /#@_@#}
|
||||
fi
|
||||
|
||||
# Ремонт, если sha256sum изменилась, но путь до .exe тот же
|
||||
if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] ; then
|
||||
sed -i "s|${line2[0]} ${line2[1]}|${line2[0]} $FILE_SHA256SUM|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
line2[1]=$FILE_SHA256SUM
|
||||
fi
|
||||
|
||||
# Когда приложения ещё нет в статистике
|
||||
[[ -z ${line2[2]} ]] && line2[2]=0
|
||||
# Ремонт, если сломалось время
|
||||
if (( line2[2] >= 999999999 )) ; then
|
||||
sed -i "s|${line2[1]} ${line2[2]}|${line2[1]} 0|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
line2[2]=0
|
||||
fi
|
||||
# Ремонт, если кто-то сломал время
|
||||
if [[ ! ${line2[2]} =~ ^[0-9]+$ ]] ; then
|
||||
sed -i "/${line2[1]}/d" "$PORT_WINE_TMP_PATH/statistics"
|
||||
return 1
|
||||
fi
|
||||
|
||||
###############################
|
||||
# Общее проведённое время в секундах
|
||||
export TIME_CURRENT=${line2[2]}
|
||||
# количество запусков приложения
|
||||
export COUNT_STARTS=${line2[4]//L4-/}
|
||||
###############################
|
||||
|
||||
# Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню + ремонт
|
||||
if [[ $PW_NEW_DESKTOP == 1 ]] && [[ ${line2[3]} != NEW_DESKTOP ]] ; then
|
||||
if [[ -n ${line2[1]} ]] ; then
|
||||
sed -i "s|$ENTRY_POINT $TIME_CURRENT OLD_DESKTOP|$ENTRY_POINT $TIME_CURRENT NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then
|
||||
sed -i "s|${line2[1]} \(.*\) ${line2[3]}|${line2[1]} \1 NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
else
|
||||
echo "${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_CURRENT NEW_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
||||
echo "${portwine_exe// /#@_@#} $FILE_SHA256SUM $TIME_CURRENT NEW_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
||||
fi
|
||||
fi
|
||||
unset PW_NEW_DESKTOP
|
||||
|
||||
# Когда приложение было запущено и завершено
|
||||
if [[ -n $PW_TIME_IN_GAME ]] ; then
|
||||
TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
|
||||
if [[ -n ${line2[1]} ]] ; then
|
||||
if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then
|
||||
# Когда есть предыдущее время
|
||||
sed -i "s|$ENTRY_POINT $TIME_CURRENT|$ENTRY_POINT $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
sed -i "s|$FILE_SHA256SUM $TIME_CURRENT|$FILE_SHA256SUM $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
else
|
||||
# Когда только запустили приложение первый раз
|
||||
echo "${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_TOTAL OLD_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
||||
echo "${portwine_exe// /#@_@#} $FILE_SHA256SUM $TIME_TOTAL OLD_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
||||
fi
|
||||
# Здесь добавляются новые линии для статистики по аналогии, к примеру ${line2[4]}
|
||||
# L4 важен, чтобы не было путаницы из-за sed, то что используется \(.*\), для ${line2[5]} это будет L5 и т.д.
|
||||
count_line=4
|
||||
# Здесь добавляются новые линии для статистики (L4-) важен
|
||||
if [[ -z ${line2[4]} ]] ; then
|
||||
line2[4]=1
|
||||
sed -i "s|$ENTRY_POINT \(.*\)|$ENTRY_POINT \1 L4-${line2[4]}|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
SKIP_REPAIR=1
|
||||
sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
else
|
||||
line2[4]=${line2[4]//L4-/}
|
||||
NUMBER_OF_STARTS=$(( line2[4] + 1 ))
|
||||
sed -i "s|$ENTRY_POINT \(.*\) L4-${line2[4]}|$ENTRY_POINT \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
# ремонт, если L4 по каким-то причинам сломался
|
||||
if [[ ${line2[4]} =~ ^L4 ]] ; then
|
||||
local NUMBER_OF_STARTS=$(( ${line2[4]//L4-/} + 1 ))
|
||||
else
|
||||
SKIP_REPAIR=1
|
||||
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
fi
|
||||
fi
|
||||
# Ремонтирует путь на новый, если вдруг путь до .exe файла битый или изменился, но .exe файл он опознал
|
||||
if [[ -n ${line2[1]} ]] && [[ ${line2[0]} != "${portwine_exe// /#@_@#}" ]] ; then
|
||||
[[ -z $TIME_TOTAL ]] && TIME_TOTAL=$TIME_CURRENT
|
||||
sed -i "s|${line2[0]} $ENTRY_POINT $TIME_CURRENT|${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
(( count_line ++ ))
|
||||
|
||||
# Пример для L5
|
||||
# if [[ -z ${line2[5]} ]] ; then
|
||||
# SKIP_REPAIR=1
|
||||
# sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L5-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
# else
|
||||
# if [[ ${line2[5]} =~ ^L5 ]] ; then
|
||||
# local ЗДЕСЬ_НОВАЯ_ПЕРЕМЕННАЯ=$(( ${line2[5]//L5-/} + 1 ))
|
||||
# else
|
||||
# SKIP_REPAIR=1
|
||||
# sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[5]}|$FILE_SHA256SUM \1 L5-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
# fi
|
||||
# fi
|
||||
# (( count_line ++ ))
|
||||
|
||||
if [[ $SKIP_REPAIR != 1 ]] ; then
|
||||
# Ремонт, если количество элементов массива по каким-то причина больше, чем должно быть
|
||||
if [[ -n ${line2["$count_line"]} ]] ; then
|
||||
for i in $(seq $count_line ${#line2[@]}) ; do
|
||||
unset 'line2[$i]'
|
||||
done
|
||||
sed -i "s|${portwine_exe// /#@_@#} $FILE_SHA256SUM \(.*\)|${line2[*]}|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
fi
|
||||
# Сюда все sedы от L4, L5 и т.д. (после всех ремонтов)
|
||||
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
# sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[5]}|$FILE_SHA256SUM \1 L5-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [[ -n $PW_TIME_IN_GAME ]]
|
||||
then return 2
|
||||
else return 0
|
||||
fi
|
||||
}
|
||||
|
||||
create_name_desktop () {
|
||||
while true ; do
|
||||
search_desktop_file
|
||||
local exit_code=$?
|
||||
case $exit_code in
|
||||
0) break ;;
|
||||
1) continue ;;
|
||||
2) return 0 ;;
|
||||
*) print_error "Broken search_desktop_file func. No exit_code." ;;
|
||||
esac
|
||||
done
|
||||
if [[ -n $DESKTOP_NAME_FILE ]] ; then
|
||||
DESKTOP_NAME_FILE_OLD=$DESKTOP_NAME_FILE
|
||||
unset DESKTOP_NAME_FILE
|
||||
@ -935,11 +1087,8 @@ create_name_desktop () {
|
||||
DESKTOP_NAME_FILE="${DESKTOP_NAME_FILE//.desktop/}"
|
||||
fi
|
||||
|
||||
if [[ -z $PORTWINE_DB ]] ; then
|
||||
PORTWINE_DB_DESKTOP="$(basename "${portwine_exe%.[Ee][Xx][Ee]}")"
|
||||
else
|
||||
PORTWINE_DB_DESKTOP="$PORTWINE_DB"
|
||||
fi
|
||||
|
||||
if [[ -n $PORTPROTON_NAME ]] ; then
|
||||
PORTPROTON_NAME_ABBR=$(make_abbreviation "$PORTPROTON_NAME")
|
||||
PORTPROTON_NAME_ACRO=$(make_acronym "$PORTPROTON_NAME")
|
||||
@ -949,7 +1098,9 @@ create_name_desktop () {
|
||||
FILE_DESCRIPTION_ACRO=$(make_acronym "$FILE_DESCRIPTION")
|
||||
fi
|
||||
|
||||
if [[ -n $DESKTOP_NAME_FILE ]] ; then
|
||||
if [[ -n $PORTWINE_CREATE_SHORTCUT_NAME ]] ; then
|
||||
PW_NAME_DESKTOP_PROXY="$PORTWINE_CREATE_SHORTCUT_NAME"
|
||||
elif [[ -n $DESKTOP_NAME_FILE ]] ; then
|
||||
PW_NAME_DESKTOP_PROXY="$DESKTOP_NAME_FILE"
|
||||
elif [[ -n $DESKTOP_NAME_FILE_OLD && ${PORTWINE_DB_DESKTOP^^} =~ ${DESKTOP_NAME_FILE_OLD^^} ]] ; then
|
||||
PW_NAME_DESKTOP_PROXY="$DESKTOP_NAME_FILE_OLD"
|
||||
@ -1283,12 +1434,12 @@ init_wine_ver () {
|
||||
if check_symlink "${WINEDIR}/share/wine/${mono_gecko_chk}" ; then
|
||||
print_info "${WINEDIR}/share/wine/${mono_gecko_chk} is symlink. OK."
|
||||
elif [[ -d "${WINEDIR}/share/wine/${mono_gecko_chk}" ]] ; then
|
||||
pw_start_progress_bar_cover_block "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif"
|
||||
pw_start_progress_bar_cover "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif" --block
|
||||
try_copy_dir "${WINEDIR}/share/wine/${mono_gecko_chk}" "${PORT_WINE_TMP_PATH}"
|
||||
try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
|
||||
try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine/
|
||||
print_info "Copy ${WINEDIR}/share/wine/${mono_gecko_chk} to tmp and create symlink to ${WINEDIR}/share/wine/. OK."
|
||||
pw_stop_progress_bar_cover_block
|
||||
pw_stop_progress_bar
|
||||
else
|
||||
try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
|
||||
try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine
|
||||
@ -1613,10 +1764,10 @@ stop_portwine () {
|
||||
pw_auto_create_shortcut
|
||||
add_in_stop_portwine
|
||||
|
||||
if [[ $PW_LOG != 1 ]] ; then
|
||||
if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
|
||||
debug_timer --end -s "PW_TIME_IN_GAME"
|
||||
PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
|
||||
search_desktop_file
|
||||
create_name_desktop
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
@ -2474,7 +2625,6 @@ pw_create_gui_png () {
|
||||
fi
|
||||
if [[ -z "$PORTPROTON_NAME" ]] \
|
||||
|| [[ -z "$FILE_DESCRIPTION" ]] \
|
||||
|| [[ -z "$ENTRY_POINT" ]] \
|
||||
|| [[ "$PW_NO_RESTART_PPDB" == "1" ]]
|
||||
then
|
||||
if [[ -n "${PORTWINE_CREATE_SHORTCUT_NAME}" ]] ; then
|
||||
@ -2484,7 +2634,6 @@ pw_create_gui_png () {
|
||||
if timeout 3 exiftool "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then
|
||||
PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||
FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||
ENTRY_POINT=$(sed -n 's/^Entry Point\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||
else
|
||||
print_error "exiftool - broken!"
|
||||
fi
|
||||
@ -2493,7 +2642,6 @@ pw_create_gui_png () {
|
||||
env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp"
|
||||
PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||
FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||
ENTRY_POINT=$(sed -n 's/^Entry Point\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||
fi
|
||||
|
||||
if [[ "$PW_PRODUCTNAME" =~ (Launcher|RU) ]]
|
||||
@ -2512,7 +2660,7 @@ pw_create_gui_png () {
|
||||
|
||||
PORTPROTON_NAME="$(echo "${PORTPROTON_NAME}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g")"
|
||||
export PORTPROTON_NAME
|
||||
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION ENTRY_POINT
|
||||
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION
|
||||
fi
|
||||
|
||||
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
|
||||
@ -2602,7 +2750,6 @@ start_portwine () {
|
||||
|
||||
pw_get_pfx () {
|
||||
case "${PW_PREFIX_NAME}" in
|
||||
PROGRAMS) local FILE_NAME_PFX="progpfx${PROGPFX_VER}" ;;
|
||||
DOTNET) local FILE_NAME_PFX="dotpfx${DOTPFX_VER}" ;;
|
||||
*) return 0 ;;
|
||||
esac
|
||||
@ -2741,6 +2888,7 @@ start_portwine () {
|
||||
unpack "${PW_PLUGINS_PATH}/blank_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
|
||||
pw_wineboot -i
|
||||
fi
|
||||
pw_stop_progress_bar
|
||||
else
|
||||
check_dirs_and_files_in_pfx
|
||||
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" ]] \
|
||||
@ -2749,6 +2897,7 @@ start_portwine () {
|
||||
then
|
||||
pw_update_pfx_cover_gui
|
||||
pw_wineboot -r
|
||||
pw_stop_progress_bar
|
||||
fi
|
||||
fi
|
||||
rm -f "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk
|
||||
@ -3615,7 +3764,7 @@ start_portwine () {
|
||||
sed -i "/\"Audio\"=/d" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/user.reg" &>/dev/null
|
||||
fi
|
||||
|
||||
pw_stop_progress_bar &&
|
||||
pw_stop_progress_bar
|
||||
if ! check_start_from_steam ; then
|
||||
pw_tray_icon
|
||||
sleep 0.5
|
||||
@ -3780,7 +3929,6 @@ pw_run () {
|
||||
print_var "WINEDIR" "WINEPREFIX" "WINEDLLOVERRIDES" "PATH_TO_GAME" "PW_WINE_USE" "PW_VULKAN_USE" "VULKAN_DRIVER_NAME"
|
||||
print_var "VKD3D_CONFIG" "PW_LD_LIBRARY_PATH" "PATH" "WINEESYNC" "WINEFSYNC" "WINEFSYNC_FUTEX2"
|
||||
print_var "WINEDLLPATH" "WINE_CPU_TOPOLOGY" "PW_RUN_GAMESCOPE" "LD_LIBRARY_PATH"
|
||||
kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null
|
||||
if [[ "$PW_USE_RUNTIME" == 1 ]] \
|
||||
&& [[ "$PW_WINE_USE" != "USE_SYSTEM_WINE" ]]
|
||||
then
|
||||
@ -3916,18 +4064,18 @@ portwine_launch () {
|
||||
fi
|
||||
|
||||
[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
|
||||
case "$portwine_exe" in
|
||||
*.[Ee][Xx][Ee])
|
||||
case "${portwine_exe,,}" in
|
||||
*.exe)
|
||||
pw_run ${PW_VD_TMP[@]} ${WINE_WIN_START} "$portwine_exe"
|
||||
;;
|
||||
*.[Bb][Aa][Tt])
|
||||
*.bat)
|
||||
PW_USE_TERMINAL=1
|
||||
pw_run ${PW_VD_TMP[@]} "$portwine_exe"
|
||||
;;
|
||||
*.[Mm][Ss][Ii])
|
||||
*.msi)
|
||||
pw_run ${PW_VD_TMP[@]} msiexec /i "$portwine_exe"
|
||||
;;
|
||||
*.[Rr][Ee][Gg])
|
||||
*.reg)
|
||||
pw_run ${PW_VD_TMP[@]} regedit "$portwine_exe"
|
||||
;;
|
||||
*)
|
||||
@ -4043,34 +4191,22 @@ yad_question () {
|
||||
}
|
||||
|
||||
pw_start_progress_bar_cover () {
|
||||
[[ "$2" != "--block" ]] && local AUTOCLOUSE="--close-on-unfocus"
|
||||
if check_gamescope_session ; then
|
||||
PW_GIF_FILE="${COVERS_PATH}/loading_deck.gif"
|
||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --fullscreen --skip-taskbar > /dev/null 2>&1 &
|
||||
export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
|
||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" $AUTOCLOUSE --no-buttons --undecorated --fullscreen --skip-taskbar > /dev/null 2>&1 &
|
||||
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||
elif ! check_start_from_steam ; then
|
||||
PW_GIF_FILE="$1"
|
||||
PW_GIF_SIZE_X=$(file "${PW_GIF_FILE}" | awk '{print $7 + 8}')
|
||||
PW_GIF_SIZE_Y=$(file "${PW_GIF_FILE}" | awk '{print $9 + 15}')
|
||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated \
|
||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" $AUTOCLOUSE --no-buttons --undecorated \
|
||||
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
|
||||
export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
|
||||
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
pw_start_progress_bar_cover_block () {
|
||||
if ! check_start_from_steam ; then
|
||||
[[ ! -f "${pw_yad}" ]] && local pw_yad="yad"
|
||||
PW_GIF_FILE="$1"
|
||||
PW_GIF_SIZE_X=$(file "${PW_GIF_FILE}" | awk '{print $7 + 8}')
|
||||
PW_GIF_SIZE_Y=$(file "${PW_GIF_FILE}" | awk '{print $9 + 15}')
|
||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated \
|
||||
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
|
||||
export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
pw_update_pfx_cover_gui () {
|
||||
if check_gamescope_session ; then
|
||||
pw_start_progress_bar_cover
|
||||
@ -4111,7 +4247,7 @@ pw_update_pfx_cover_gui () {
|
||||
"${pw_yad}" --notebook --key="$PW_KEY_PROGRESS_BAR_UP" $TAB_PLACE --no-buttons \
|
||||
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" $YAD_UNDECORATED \
|
||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "PortProton" --tab-pos="bottom" --expand 2>/dev/null &
|
||||
export PW_YAD_PID_PFX_COVER_UI="$!"
|
||||
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
@ -4124,7 +4260,7 @@ pw_start_progress_bar_cs () {
|
||||
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
||||
export PW_YAD_PID_PROGRESS_BAR_CS="$!"
|
||||
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
@ -4138,7 +4274,7 @@ pw_start_progress_bar_block () {
|
||||
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
||||
export PW_YAD_PID_PROGRESS_BAR_BLOCK="$!"
|
||||
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
@ -4152,26 +4288,26 @@ pw_start_progress_bar_install_game () {
|
||||
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
||||
export PW_YAD_PID_PROGRESS_BAR_BLOCK="$!"
|
||||
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
pw_stop_progress_bar () {
|
||||
[[ -n $PW_YAD_PID_PROGRESS_BAR_BLOCK ]] && kill -s SIGUSR1 "$PW_YAD_PID_PROGRESS_BAR_BLOCK" &>/dev/null
|
||||
[[ -n $PW_YAD_PID_PROGRESS_BAR_CS ]] && kill -s SIGUSR1 "$PW_YAD_PID_PROGRESS_BAR_CS" &>/dev/null
|
||||
[[ -n $PW_YAD_PID_PFX_COVER_UI ]] && kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null
|
||||
[[ -n $PW_YAD_PID_PROGRESS_BAR_COVER ]] && kill -s SIGUSR1 "$PW_YAD_PID_PROGRESS_BAR_COVER" &>/dev/null
|
||||
unset PW_YAD_PID_PROGRESS_BAR_BLOCK PW_YAD_PID_PROGRESS_BAR_CS
|
||||
unset PW_YAD_PID_PFX_COVER_UI PW_YAD_PID_PROGRESS_BAR_COVER
|
||||
if [[ -n ${PW_YAD_PID_PROGRESS_BAR[0]} ]] ; then
|
||||
local pid
|
||||
for pid in ${PW_YAD_PID_PROGRESS_BAR[@]} ; do
|
||||
# Здесь sleep нужен, потому что pid может уже быть, но kill его не убьет
|
||||
# со sleep 0.01 он делает 2 kill, c 0.02 нормально один
|
||||
while $(sleep 0.02) && [[ -f /proc/$pid/exe ]] ; do
|
||||
kill -s SIGUSR1 "$pid" &>/dev/null
|
||||
done
|
||||
done
|
||||
unset PW_YAD_PID_PROGRESS_BAR
|
||||
fi
|
||||
}
|
||||
export -f pw_stop_progress_bar
|
||||
|
||||
pw_stop_progress_bar_cover_block () {
|
||||
kill -s KILL "$PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK" &>/dev/null
|
||||
}
|
||||
export -f pw_stop_progress_bar_cover_block
|
||||
|
||||
open_changelog () {
|
||||
[[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en"
|
||||
"${pw_yad}" --title="${translations[CHANGELOG]}" --no-buttons \
|
||||
@ -4681,7 +4817,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.]
|
||||
PW_LOCALE_SELECT="${PW_ADD_SETTINGS[9]}"
|
||||
PW_MESA_VK_WSI_PRESENT_MODE="${PW_ADD_SETTINGS[10]}"
|
||||
|
||||
if [[ "${CPU_LIMIT}" =~ [0-9]+ ]] ; then
|
||||
if [[ "${CPU_LIMIT}" =~ ^[0-9]+$ ]] ; then
|
||||
PW_WINE_CPU_TOPOLOGY="${CPU_LIMIT}:$(seq -s, 0 $(( CPU_LIMIT - 1 )))"
|
||||
else
|
||||
PW_WINE_CPU_TOPOLOGY="disabled"
|
||||
@ -5684,7 +5820,8 @@ portwine_output_yad_shortcut () {
|
||||
|
||||
export PW_NEW_DESKTOP="1"
|
||||
|
||||
if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then
|
||||
if [[ "$PW_NO_RESTART_PPDB" != "1" ]] \
|
||||
|| [[ -z ${LINKS[1]} ]] ; then
|
||||
print_info "Restarting PP..."
|
||||
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
|
||||
restart_pp
|
||||
@ -5693,7 +5830,7 @@ portwine_output_yad_shortcut () {
|
||||
print_info "Restarting PP..."
|
||||
[[ -n $KEY_MENU ]] && unset portwine_exe
|
||||
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
|
||||
[[ -z $LINKS ]] && restart_pp
|
||||
[[ -z ${LINKS[0]} ]] && restart_pp
|
||||
fi
|
||||
}
|
||||
|
||||
|
26
data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE
Executable file
26
data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE
Executable file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: chal55rus
|
||||
# type: games
|
||||
# name: Chicken Invaders Universe
|
||||
# image: chickeninvadersuniverse
|
||||
# info_en:
|
||||
# info_ru:
|
||||
########################################################################
|
||||
export PW_PREFIX_NAME="CHICKEN_INVADERS_UNIVERSE"
|
||||
export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-")
|
||||
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/ChickenInvadersUniverseInstaller.exe"
|
||||
export PORTWINE_CREATE_SHORTCUT_NAME="Chicken Invaders Universe"
|
||||
|
||||
start_portwine
|
||||
if try_download "https://universe.chickeninvaders.com/files/ChickenInvadersUniverseInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||
then
|
||||
pw_start_progress_bar_install_game "Chicken Invaders Universe."
|
||||
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||
portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/ChickenInvadersUniverse/CIU.exe"
|
||||
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||
try_remove_file "${portwine_exe}.ppdb"
|
||||
kill_portwine
|
||||
pw_stop_progress_bar
|
||||
portwine_create_shortcut
|
||||
fi
|
||||
stop_portwine
|
26
data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN
Executable file
26
data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN
Executable file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: chal55rus
|
||||
# type: games
|
||||
# name: Eldevin (ENG)
|
||||
# image: eldevin
|
||||
# info_en:
|
||||
# info_ru:
|
||||
########################################################################
|
||||
export PW_PREFIX_NAME="ELDEVIN"
|
||||
export LAUNCH_PARAMETERS=("/S")
|
||||
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/eldevin_win64.exe"
|
||||
export PORTWINE_CREATE_SHORTCUT_NAME="Eldevin"
|
||||
|
||||
start_portwine
|
||||
if try_download "https://www.eldevin.com/cdn/files/eldevin_win64.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||
then
|
||||
pw_start_progress_bar_install_game "Eldevin."
|
||||
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||
portwine_exe="$WINEPREFIX/drive_c/Program Files/Eldevin/Eldevin.exe"
|
||||
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||
try_remove_file "${portwine_exe}.ppdb"
|
||||
kill_portwine
|
||||
pw_stop_progress_bar
|
||||
portwine_create_shortcut
|
||||
fi
|
||||
stop_portwine
|
27
data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT
Executable file
27
data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT
Executable file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: chal55rus
|
||||
# type: games
|
||||
# name: The World of Nifty Craft (ENG)
|
||||
# image: theworldofniftycraft
|
||||
# info_en:
|
||||
# info_ru:
|
||||
########################################################################
|
||||
export PW_PREFIX_NAME="THE_WORLD_NIFTY_CRAFT"
|
||||
export LAUNCH_PARAMETERS=("/S")
|
||||
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/web_installer.exe"
|
||||
export PORTWINE_CREATE_SHORTCUT_NAME="The World of Nifty Craft"
|
||||
|
||||
start_portwine
|
||||
if try_download "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/9969/bin/web_installer.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||
then
|
||||
pw_start_progress_bar_install_game "The World of Nifty Craft."
|
||||
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||
portwine_exe="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/The World of Nifty Craft/launcher.exe"
|
||||
pw_create_unique_exe "Nifty_Craft_launcher"
|
||||
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||
try_remove_file "${portwine_exe}.ppdb"
|
||||
kill_portwine
|
||||
pw_stop_progress_bar
|
||||
portwine_create_shortcut
|
||||
fi
|
||||
stop_portwine
|
30
data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH
Executable file
30
data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH
Executable file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: chal55rus
|
||||
# type: games
|
||||
# name: Toribash
|
||||
# image: toribash
|
||||
# info_en:
|
||||
# info_ru:
|
||||
########################################################################
|
||||
URL_VER=$(curl https://www.toribash.com/downloads.php \
|
||||
| awk -F"https://cache.toribash.com/Toribash-" '{print $2}' \
|
||||
| awk -F"-Setup.exe" '{print $1}' | grep "5" | head -n1)
|
||||
|
||||
export PW_PREFIX_NAME="TORIBASH"
|
||||
export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-")
|
||||
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Toribash-${URL_VER}-Setup.exe"
|
||||
export PORTWINE_CREATE_SHORTCUT_NAME="Toribash"
|
||||
|
||||
start_portwine
|
||||
if try_download "https://cache.toribash.com/Toribash-${URL_VER}-Setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||
then
|
||||
pw_start_progress_bar_install_game "Toribash."
|
||||
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||
portwine_exe="$WINEPREFIX/drive_c/Games/Toribash/toribash.exe"
|
||||
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||
try_remove_file "${portwine_exe}.ppdb"
|
||||
kill_portwine
|
||||
pw_stop_progress_bar
|
||||
portwine_create_shortcut
|
||||
fi
|
||||
stop_portwine
|
@ -49,26 +49,26 @@ MISSING_DESKTOP_FILE="0"
|
||||
|
||||
unset PW_NO_RESTART_PPDB PW_DISABLED_CREATE_DB
|
||||
|
||||
if [[ "$1" == *.[Pp][Pp][Aa][Cc][Kk] ]] ; then
|
||||
if [[ "${1,,}" =~ .ppack$ ]] ; then
|
||||
export PW_NO_RESTART_PPDB="1"
|
||||
export PW_DISABLED_CREATE_DB="1"
|
||||
portwine_exe="$1"
|
||||
elif [[ -f "$1" ]] ; then
|
||||
portwine_exe="$(realpath -s "$1")"
|
||||
elif [[ -f "$OLDPWD/$1" ]] \
|
||||
&& [[ "$1" == *.[Ee][Xx][Ee] || "$1" == *.[Bb][Aa][Tt] || "$1" == *.[Rr][Ee][Gg] || "$1" == *.[Mm][Ss][Ii] ]]
|
||||
&& [[ "${1,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]]
|
||||
then
|
||||
portwine_exe="$(realpath -s "$OLDPWD/$1")"
|
||||
elif [[ "$1" == "--debug" ]] \
|
||||
elif [[ "$1" =~ (^--debug$|^--launch$|^--edit-db$) ]] \
|
||||
&& [[ -f "$2" ]]
|
||||
then
|
||||
portwine_exe="$(realpath -s "$2")"
|
||||
elif [[ "$1" == "--debug" ]] \
|
||||
elif [[ "$1" =~ (^--debug$|^--launch$|^--edit-db$) ]] \
|
||||
&& [[ -f "$OLDPWD/$2" ]] \
|
||||
&& [[ "$2" == *.[Ee][Xx][Ee] || "$2" == *.[Bb][Aa][Tt] || "$2" == *.[Rr][Ee][Gg] || "$2" == *.[Mm][Ss][Ii] ]]
|
||||
&& [[ "${2,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]]
|
||||
then
|
||||
portwine_exe="$(realpath -s "$OLDPWD/$2")"
|
||||
elif [[ "$1" == *.[Ee][Xx][Ee] || "$1" == *.[Bb][Aa][Tt] || "$1" == *.[Mm][Ss][Ii] || "$1" == *.[Rr][Ee][Gg] ]]
|
||||
elif [[ "${1,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]]
|
||||
then
|
||||
portwine_exe="$1"
|
||||
MISSING_DESKTOP_FILE="1"
|
||||
@ -128,7 +128,6 @@ popd 1>/dev/null || fatal
|
||||
|
||||
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DEFAULT"
|
||||
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DOTNET"
|
||||
create_new_dir "${PORT_WINE_PATH}/data/prefixes/PROGRAMS"
|
||||
try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${PORT_WINE_PATH}"
|
||||
|
||||
pushd "${PORT_WINE_PATH}/data/prefixes/" 1>/dev/null || fatal
|
||||
@ -324,17 +323,23 @@ export SKIP_CHECK_UPDATES="1"
|
||||
|
||||
[[ "$MISSING_DESKTOP_FILE" == "1" ]] && portwine_missing_shortcut
|
||||
|
||||
if [[ $(basename "${portwine_exe}") =~ .[Pp][Pp][Aa][Cc][Kk]$ ]] ; then
|
||||
if [[ $(basename "${portwine_exe,,}") =~ .ppack$ ]] ; then
|
||||
unset PW_SANDBOX_HOME_PATH
|
||||
pw_init_runtime
|
||||
if check_flatpak
|
||||
then TMP_ALL_PATH=""
|
||||
else TMP_ALL_PATH="LD_LIBRARY_PATH=\"${PW_LD_LIBRARY_PATH}\""
|
||||
fi
|
||||
PW_PREFIX_NAME=$(basename "$1" | awk -F'.' '{print $1}')
|
||||
if check_selinux
|
||||
then NO_XATTRS_NEED="-no-xattrs"
|
||||
else NO_XATTRS_NEED=""
|
||||
fi
|
||||
PW_PREFIX_NAME=$(basename "${1,,}" .ppack)
|
||||
PW_PREFIX_NAME="${PW_PREFIX_NAME^^}"
|
||||
cat << EOF > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh
|
||||
#!/usr/bin/env bash
|
||||
${TMP_ALL_PATH} unsquashfs -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \
|
||||
${TMP_ALL_PATH} unsquashfs $NO_XATTRS_NEED -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \
|
||||
|| echo "ERROR" > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack_error
|
||||
EOF
|
||||
chmod u+x "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh
|
||||
@ -360,7 +365,7 @@ fi
|
||||
|
||||
### CLI ###
|
||||
|
||||
case "${1}" in
|
||||
case "$1" in
|
||||
'--help' )
|
||||
files_from_autoinstall=$(ls "${PORT_SCRIPTS_PATH}/pw_autoinstall")
|
||||
echo -e "
|
||||
@ -413,6 +418,16 @@ use: [--repair] [--reinstall] [--autoinstall]
|
||||
|
||||
'--update' )
|
||||
gui_pw_update ;;
|
||||
|
||||
'--launch' )
|
||||
portwine_launch
|
||||
stop_portwine ;;
|
||||
|
||||
'--edit-db' )
|
||||
# --edit-db /полный/путь/до/файла.exe PW_MANGOHUD=1 PW_VKBASALT=0 (и т.д) для примера
|
||||
set_several_variables ${@:3}
|
||||
edit_db_from_gui $keys_all
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
### GUI ###
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Castro-Fidel (linux-gaming.ru)
|
||||
#SCRIPTS_NEXT_VERSION=2368
|
||||
#SCRIPTS_NEXT_VERSION=2369
|
||||
#SCRIPTS_STABLE_VERSION=2360
|
||||
########################################################################
|
||||
export AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET PW_WORLD_OF_SEA_BATTLE PW_RUSSIAN_FISHING PW_HO_YO_PLAY PW_FARLIGHT84 PW_WARFRAME PW_WGC PW_UBISOFT"
|
||||
@ -134,7 +134,6 @@ export PW_GS_MANGOAPP="0"
|
||||
###PREFIX_VERSION###
|
||||
export DOTPFX_VER="48v7"
|
||||
export DEFPFX_VER="v1"
|
||||
export PROGPFX_VER="v1"
|
||||
export PW_MUST_WINEDLLOVERRIDES="steam_api,steam_api64,steamclient,steamclient64=n;dotnetfx35.exe,dotnetfx35setup.exe=b;winemenubuilder.exe="
|
||||
#################################################################
|
||||
# Get our APi on https://www.steamgriddb.com/profile/preferences/api/
|
||||
@ -148,7 +147,6 @@ pw_list_install_dll_in_prefix ()
|
||||
case $PW_PREFIX_NAME in
|
||||
DEFAULT) export PW_MUST_HAVE_DLL="$STANDART_DLL" ;;
|
||||
DOTNET) export PW_MUST_HAVE_DLL="dotnet48" ;;
|
||||
PROGRAMS) export PW_MUST_HAVE_DLL="riched20 msxml3 msxml4 msxml6" ;;
|
||||
*) export PW_MUST_HAVE_DLL="sandbox" ;;
|
||||
esac
|
||||
}
|
||||
|
Reference in New Issue
Block a user