2013-08-06 3 views
1

Я создал файл символов, в котором моя игра извлекает данные и переменные из. Понравилось так:Что касается пакетных игр, найдите и замените строку

playerName= Marche 
playerRace= Elf 
playerHP= 100 
playerSPD= 200 
playerATK= 120 
playerDEF= 70 

Final Fantasy ссылка кому-нибудь ...? В любом случае, когда уровень символов увеличивается, мне нужен пакетный скрипт, чтобы найти строку «playerHP = 100». playerHP задан как переменная внутри скрипта. В основном, он принимает текущее состояние здоровья и умножает его на 120%, увеличивая число. Как я могу отменить результат этой математики, чтобы заменить текущий номер?

Например, если это не имеет никакого смысла, у меня 100 здоровья. Я повышаю уровень, увеличивая свой показатель здоровья на 120%, так что теперь у меня 120 здоровья. Я бы хотел найти строку «playerHP = 100» и заменить ее на «playerHP = 120».

Если этого можно избежать, я не хочу скачивать какие-либо другие команды (я видел несколько раз несколько раз). Спасибо большое

EDIT: Вместо поиска строки и замены я взял совет jeb и просто удалил файл и повторно отозвал все данные. Кончилось выглядеть так:

set /a LeveledUpPlayerHP=(%ppHP%* 12)/(10) 
set /a LeveledUpPlayerSPD=(%ppSPD%* 12)/(10) 
set /a LeveledUpPlayerATK=(%ppATK%* 12)/(10) 
set /a LeveledUpPlayerDEF=(%ppDEF%* 12)/(10) 
echo Updating stats... 
del "C:\Users\%USERNAME%\Desktop\CMDRPG\player\playerData.dll 
ping 1.1.1.1 -n 1 -w 500 > nul 
echo playerName= %playerName%>playerData.dll 
echo playerRace= %playerRace%>>playerData.dll 
echo playerHP= %LeveledUpPlayerHP%>>playerData.dll 
echo playerSPD= %LeveledUpPlayerSPD%>>playerData.dll 
echo playerATK= %LeveledUpPlayerATK%>>playerData.dll 
echo playerDEF= %LeveledUpPlayerDEF%>>playerData.dll 

Playername и playerRace все загружены в перед этим участком кода. Ping используется как функция ожидания, чтобы позволить удалять файл перед повторением новых данных. Кажется, все в порядке. Спасибо всем

+0

возможно дубликат [Batch Script заменить строку в .ini] (http://stackoverflow.com/questions/17800581/batch -script-to-replace-line-in-ani) – jeb

+0

Также попробуйте посмотреть [SO: Как вы делаете save/load cmd для пакетной rpg?] (http://stackoverflow.com/q/ 17081050/463115) – jeb

+0

Я посмотрел на них, все еще немного смущенный. Я МОГУТ просто удалить файл и вывести новую информацию вместо поиска и замены. Я не был уверен, была ли простая команда, которая позволяет мне это делать. Есть ли способ заменить определенную строку в текстовом файле новой информацией? Это действительно все, что мне нужно – user2654489

ответ

2

попробовать это (выход в %inifile%.new):

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION 
SET "inifile=file" 

FOR /f %%a IN ('^<"%inifile%" find /c /v ""') DO SET /a lines=%%a 
< "%inifile%" (
FOR /l %%a IN (1,1,%lines%) DO (
    SET "line=" 
    SET /p "line=" 
    IF NOT "!line:playerHP=!"=="!line!" (
     FOR /f "tokens=2delims= " %%b IN ("!line!") DO SET /a HP=%%b*12/10 
     SET "line=playerHP= !HP!" 
    ) 
    ECHO(!line! 
))>"%inifile%.new" 

ввода/вывода:

 
>type file 
playerName= Marche 
playerRace= Elf 
playerHP= 100 
playerSPD= 200 
playerATK= 120 
playerDEF= 70 

>test.bat 

>type file.new 
playerName= Marche 
playerRace= Elf 
playerHP= 120 
playerSPD= 200 
playerATK= 120 
playerDEF= 70 
1

Чтобы сохранить данные в файл, вы можете использовать блок, как

(
    echo playerName=%playerName% 
    echo playerRace=%playerRace% 
    echo playerHP=%playerHP% 
) > player.ini 

A nd для загрузки вы можете использовать

for /F "delims=" %%L in (player.ini) do set "%%L" 
2

Допустимо не имеет значения, в каком порядке значения отображаются в вашем файле. Если это так, то следующее будет эффективно «редактировать» ваш файл.

Сначала он использует FINDSTR, чтобы изолировать текущее значение playerPH, и FOR/F для разбора значения из строки. SET/A увеличивает значение playerHP. Затем с помощью FINDSTR создается новый файл для записи всех текущих значений за исключением для playerHP, а затем добавляется новая информация о игроке hp до конца.

@echo off 
set "file=gameData.txt" 
for /f "tokens=2 delims==" %%N in ('findstr /bl "playerHP=" "%file%"') do set /a "newHP=%%N*120/100" 
>"%file%.mod" (
    findstr /blv "playerHP=" "%file%" 
    echo playerHP=%newHP% 
) 
move /y "%file%.mod" "%file%" >nul 

Но зачем идти на все эти неприятности. Я думаю, что у вас уже есть все ваши значения в памяти как переменные среды. Просто убедитесь, что все переменные, которые должны быть сохранены в файле, начинаются с общего уникального префикса. В вашем примере все они начинаются с «игрока», но вы, вероятно, хотите что-то более общее - возможно, такой символ, как #. Таким образом, у вас может быть #playerName, #playerRace и т. Д.

Просто обновите значения в памяти по мере необходимости.Когда приходит время, чтобы сохранить текущее состояние игры в файл, то все, что вам нужно сделать, это

>"gameData.txt" set # 

Новый файл будет создаваться каждый раз, содержащий все текущие значения.

Чтобы загрузить значения, вы делаете именно то, что предложил Джеб:

for /f "usebackq delims=" %%A in ("gameData.txt") do set %%A 
Смежные вопросы