Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2018 09:53:11

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Редактор оружия для GTA vice city

Здравствуйте всем. Я являюсь фанатом в GTA Vice City. В директории игры есть файл Weapon.dat, он отвечает за характеристики оружия.
Они представлены там в виде строк. Начинается с названия оружия. скопировал одну строку и поместил в текстовый файл wea.txt
Вот эта строка Colt45 INSTANT_HIT 30.0 250 450 17 25 -1.0 -1.0 -1.0 -1.0 0.30 0.0 0.09 colt45 11 18 14 11 18 12 99 274 -1 680C0 3

Как видите вы тут много значений, легко запутаться в них. Для этого прочитал строку и добавил все элементы в список. элементы списка стали значением словаря. звучит ужасно, На деле все понятнее стало. Вот скрин http://pixs.ru/showimage/skrinPNG_3583697_29845475.png Как видите идёт ключ словаря, в данном случае название оружия и 1 элемент списка. Стало понятно что за что отвечает.
Теперь с помощью input запрашивается название элемента и его значение, на которое мы его меняем. Всё это записывается в файл wea.txt. Потом он открывается, копирую строку и вставим заменяя эту строку в файл Weapon.dat. Но есть одно но, из-за которого к вам обратился. Дел в том, что после ввода данных, нужно, что они записались с теми же пробелами, что изначально, иначе игра вылетает.
Подскажите, пожалуйста, как это правильно сделать?
Вот код

 c = "d:\\wea.txt"
a = open(c,'r')
d = a.read()
e = d.split()
sol = {str("Название оружия"): e[0], str("Тип огня"): e[1],
       str("Диапазон"): e[2], str("Скорость стрельбы"): e[3],
       str("время перезарядка"): e[4], str("Количество боеприпасов"): e[5],
       str("урон"): e[6], str("скорость, с которой летит снаряд"): e[7],
       str("радиус действия оружия"): e[8],
       str("максимальное время, за которое может продержаться в воздухе снаряд"): e[9],
       str("вектор смещение огня x"): e[10], str("вектор смещение огня y"): e[11],
       str("вектор смещение огня z"): e[12], str("проигрывание анимации"): e[13],
       str("начало цикла анимации"): e[14], str("конец цикла анимации"): e[15],
       str("точки в анимации, где оружие стреляет"): e[16],
       str("точки в анимации, где оружие стреляет2"): e[17],
       str("точка в аним, где мы можем прорыв аним / атаки и убежать"): e[18],
       str("id модели оружия"): e[19], str("2 id модели оружия"): e[20],
       str("x"): e[21], str("x"): e[22], str("z"): e[23],
       str("a"): e[24], str("b"): e[25]}
print(sol)
b = input(str('имя параметр '))
h = input(str('параметр '))
sol[b] = h
a.close()
a = open(c,'w')
for key, value in sol.items():
    a.writelines(value)

Офлайн

#2 Апрель 6, 2018 11:25:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Редактор оружия для GTA vice city

У тебя тут всё неправильно, долго рассказывать. Читай книжки по питону, прежде чем начинать писать на нём. Там просто множество правильных примеров, которые ты явно не видел. Зачем ты str() везде ставишь? Каждая строка уже сама по себе является объектом класса str. То есть ты пишешь масло масляное, потому что ни одной книги не открывал.

Алгоритмически ты должен сначала подготовить строку для вывода, а потом один раз её вывести целиком. А чтобы подготовить, надо использовать метод .join(). И словарь не имеет порядка, потому что это такая структура данных, которая гарантирует только быстрый доступ к элементам. Поэтому sol.items() может возвращать пары в любом непредсказуемом порядке. Если бы ты читал книжки, ты бы это знал.

В общем, не так уж у тебя достаточно опыта в программировании на любых языках, чтобы пытаться на питоне писать методом проб и ошибок. Получается лажа какая-то, которую тебе всё равно придётся писать заново. Так что ставь задачу, а код тебе будут писать уже готовый и правильный. А сам иди читать первую книжку, где хотя бы азы узнаешь, чтобы не писать ерунду.

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

Во

EgorSrche
  
str("x"): e[21], str("x"): e[22]
Да даже новичок в питоне такое не напишет. В словаре не может быть двух одинаковых ключей.



Отредактировано py.user.next (Апрель 6, 2018 11:30:33)

Офлайн

#3 Апрель 6, 2018 16:10:15

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Редактор оружия для GTA vice city

py.user.next
Здравствуйте, уважаемый py.user.nex. Спасибо большое,что нашли время мне ответит. Благодарю за внимание к моему вопросу.
Очень рад тому, чтобы сказали всё как есть. Согласен с Вами буду, продолжать читать книги по питону. Чувствуется ваш большой опыт в языке Python. Спасибо, что сказали мне в каком направлении двигаться. Буду теперь учимся готовить строку. Опыт приходит со временем буду читать, изучать. Питон дают многие новые возможности, этим он мне привыкает. Я хотел написать вводишь например, урон 20. И он меняет цифру которая отвечает за урон на 20. Ещё раз благодарю Вас за уделенное мне время.

Офлайн

#4 Апрель 19, 2018 15:10:38

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Редактор оружия для GTA vice city

Здравствуйте всем.
Я наконец-то сделал редактор оружие для GTA Vice City.
Вот видео демонстрация https://www.youtube.com/watch?v=vsKQKCgHQbQ&feature=youtu.be
Всем спасибо, всё работает как надо. Благодарю за вашу помощь.

 b = input(str("введите директорию gta vice city "))  # Имя которое ищем
b = str(b + "\data\weapon.dat")  # файл записи
a = input(str("введите имя оружие ")).title()  # Имя которое ищем
with open(b, 'r') as g:  # открыть файл оригинала
    for i in g.readlines():  # читать построчно
        if a in i:  # искать слово
            old = i
            e = i
e = e.split()
sol = {str("название оружия"): e[0], str("тип огня"): e[1],
       str("диапазон"): e[2], str("скорость стрельбы"): e[3],
       str("время перезарядка"): e[4], str("количество боеприпасов"): e[5],
       str("урон"): e[6], str("скорость, с которой летит снаряд"): e[7],
       str("радиус действия оружия"): e[8],
       str("максимальное время, за которое может продержаться в воздухе снаряд"): e[9],
       str("вектор смещение огня x"): e[10], str("вектор смещение огня y"): e[11],
       str("вектор смещение огня z"): e[12], str("проигрывание анимации"): e[13],
       str("начало цикла анимации"): e[14], str("конец цикла анимации"): e[15],
       str("точки в анимации, где оружие стреляет"): e[16],
       str("точки в анимации, где оружие стреляет2"): e[17],
       str("точка в аним, где мы можем прорыв аним / атаки и убежать"): e[18],
       str("id модели оружия"): e[19], str("2 id модели оружия"): e[20],
       str("x"): e[21], str("y"): e[22], str("z"): e[23],
       str("a"): e[24], str("номер слота оружие"): e[25]}
print(sol)  # Вывести параметры заданного оружие
d = input(str('имя параметр '))
h = input(str('параметр '))
sol[d] = h
e.clear()
u = sol.values()
for i in u:
    e.append(i)
l = (str(e[0]) + "             " + str(e[1]) + ' ' + str(e[2]) + '  ' + str(e[3]) + '  ' + str(e[4]) + '  ' + str(
    e[5]) + '   ' + str(e[6])
     + '  ' + str(e[7]) + ' ' + str(e[8]) + '  ' + str(e[9]) + '   ' + str(e[10]) + ' ' + str(e[11]) + '  ' + str(
            e[12]) + '  ' + str(e[13])
     + '  ' + str(e[14]) + '               ' + (e[15]) + ' ' + str(e[16]) + ' ' + str(e[17]) + '   ' + str(
            e[18]) + ' ' + str(e[19]) + ' '
     + str(e[20]) + '    ' + str(e[21]) + '          ' + str(e[22]) + ' ' + str(e[23]) + '        ' + str(
            e[24]) + '          ' + str(e[25]) + ' ')
l = l + '\n'
with open(b, 'r') as f:
    old_data = f.read()
new_data = old_data.replace(old, l)
with open(b, 'w') as f:
    f.write(new_data)
print(("Изменен параметр {} теперь он = {} у {}").format(d, h, a))
input()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version