Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Epic War 4

EpicWar4 (51.74КиБ)

Подсел на флеш-игрушку Epic War 4.

Но медленно наращивать мощность очень уж скучно, сделал патч, который увеличивает количество денег до двух миллионов, применив его 2-3 раза, можно купить всё что только есть в игре.

Для того, чтобы применить патч, найдите SOL-файл игры (где такие файлы обычно лежат в разных операционных системах можно посмотреть в «Википедии») — там содержится её сохранённое состояние. И укажите программе при запуске полный путь и имя этого файла.

Программа написана сразу на трёх языках — PowerShell (для Windows) и PHP с Python (для всех), запускайте любым из этих трёх интерпретаторов:

#!/usr/bin/env python
########################################################
# Written by Evgeny Stepanischev (//bolknote.ru)  #
# Epic War 4 money patch (for PowerShell, Python, PHP)  #
#<?/*
"""*/
echo str_repeat('#', 55), chr(10);

if ($_SERVER['argc'] > 1) {
    
    $fp = @fopen($_SERVER['argv'][1], 'r+b');
    if ($fp) {
        $content = fread($fp, 655350);
        $content = preg_replace('/(?<=stat_money).{5}/s', pack('H*', '0480C584B4'), $content);

        rewind($fp);
        fwrite($fp, $content);
        echo 'Done.';
    } else {
        echo 'Invalid file.';
    } 

    fclose($fp);
} else {
    echo 'Usage: ', $_SERVER['argv'][0], '<filename>';
}

__halt_compiler();

""" + """ " | out-null

If ($args) {
    [char[]] $binary = Get-Content -encoding byte $args[0]

    $binary = [string]::join('', $binary) -replace`
              'stat_money.{5}', `
              "stat_money$([char]0x4)$([char]0x80)$([char]0xC5)$([char]0x84)$([char]0xB4)"

    Set-Content $args[0] ([byte[]][char[]] $binary) -encoding byte

    "Done."

} Else {
    "Usage: " + $MyInvocation.MyCommand.Name +" <filename>"
}

"""
from sys import argv
from os.path import basename

if len(argv) > 1:
    name = 'stat_money'

    f = open(argv[1], 'r+b')
    binary = bytearray(f.read())

    try:
        index = binary.index(name) + 1 + len(name)
        binary[index:index+4] = '\x80\xc5\x84\xb4'

        f.seek(0)
        f.write(binary)
        f.close()
        print('Done.')
    except:
        print('Invalid file.')
else:
    print('Usage: %s <filename>' % basename(argv[0]))

# " | out-null

python patch.ps1 DEF4_SAVE.sol или powershell -Command .\patch.ps1 DEF4_SAVE.sol или php patch.ps1 DEF4_SAVE.sol

Жаль расцветить три языка в одном файле можно только вручную.

10 комментариев
Евгений Степанищев (bolknote.ru) 2010

Поторопился — в варианте для Python надо иначе исключение обрабатывать. Приеду домой, исправлю.

Евгений Степанищев (bolknote.ru) 2010

Исправил

CTAPbIu_MABP (ctapbiu.mabp.myopenid.com) 2010

Там есть уровень «орды гоблинов». Запускаешь его на эпик сложности, только не забудь взять дракона, и идешь на обед, через час 1кк в кармане. И все по честному.
Я смотрю ты большого белого друга еще не убил ;)

Евгений Степанищев (bolknote.ru) 2010

Комментарий для ctapbiu.mabp.myopenid.com:

Я ещё недавно играю :)

Евгений Степанищев (bolknote.ru) 2010

Комментарий для ctapbiu.mabp.myopenid.com:

А что за белый друг? Кстати, у меня сейчас всё зелёное, но IX, X, XI не открылись. Так должно быть или у меня что-то сглючило?

Евгений Степанищев (bolknote.ru) 2010

Комментарий для ctapbiu.mabp.myopenid.com:

Белого друга нашёл :) Только замок раньше пал, чем он помер.

zg 2010

читы убивают геймплей.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для zg:

Я как-то не ценитель такого геймплея. Да и, в общем-то, вообще не ценитель. Не играю я. Просто иногда что-то находит.

CTAPbIu_MABP (ctapbiu.mabp.myopenid.com) 2010

паздравляю с победой ;)

Евгений Степанищев (bolknote.ru) 2010

Комментарий для ctapbiu.mabp.myopenid.com:

Спасибо :)