Всем привет. Написал простенький скрипт на Python, который массово меняет рейты для талисманов на опыт, деньги, дроп.
Использование:
Запустить, указать пути к файлу buff_proto.xml (по умолчанию возьмёт тот, что написан) и рейты.
Программа пройдётся по всей xmlке и умножит все бафы, влияющие на рейты, на ваш множитель.
Также, программа создаёт бэкап файла.
Необходимые пакеты:
Специально для dyndev.ru
Использование:
Запустить, указать пути к файлу buff_proto.xml (по умолчанию возьмёт тот, что написан) и рейты.
Программа пройдётся по всей xmlке и умножит все бафы, влияющие на рейты, на ваш множитель.
Также, программа создаёт бэкап файла.
Необходимые пакеты:
- lxml
Код:
# -*- coding: utf-8 -*-
from lxml import etree, objectify
import sys
xmlfile = input("Full path to buff_proto.xml file (C:\game\data\system\\attdata\\buff_proto.xml): ")
exp_rate_multiplier = input("Exp multiplier (1): ")
money_rate_multiplier = input("Money multiplier (1): ")
loot_rate_multiplier = input("Loot multiplier (1): ")
if xmlfile == "":
xmlfile = "C:\\game\\data\\system\\attdata\\buff_proto.xml"
if exp_rate_multiplier == "":
exp_rate_multiplier = 1.0
else:
exp_rate_multiplier = float(exp_rate_multiplier)
if money_rate_multiplier == "":
money_rate_multiplier = 1.0
else:
money_rate_multiplier = float(money_rate_multiplier)
if loot_rate_multiplier == "":
loot_rate_multiplier = 1.0
else:
loot_rate_multiplier = float(loot_rate_multiplier)
with open(xmlfile, 'r') as f:
xml = f.read().encode("ascii")
backup_file = open(xmlfile+'.bak', 'wb')
backup_file.write(xml)
backup_file.close()
root = objectify.fromstring(xml)
exp_count = 0
money_count = 0
loot_count = 0
for item in root.getchildren():
try:
exp_rate = int(item.attrib['ERA_Exp_Add_Rate'])
except KeyError:
pass
else:
exp_rate = str(int(float(exp_rate*exp_rate_multiplier)))
item.attrib['ERA_Exp_Add_Rate'] = exp_rate
exp_count += 1
try:
money_rate = int(item.attrib['ERA_Money_Add_Rate'])
except KeyError:
pass
else:
money_rate = str(int(float(money_rate*money_rate_multiplier)))
item.attrib['ERA_Money_Add_Rate'] = money_rate
money_count += 1
try:
loot_rate = int(item.attrib['ERA_Loot_Add_Rate'])
except KeyError:
pass
else:
loot_rate = str(int(float(loot_rate*loot_rate_multiplier)))
item.attrib['ERA_Loot_Add_Rate'] = loot_rate
loot_count += 1
print("Processing complete. \n Exp fields multiplied: {} \n Money fields multiplied: {} \n Loot fields multiplied: {} \n".format(exp_count, money_count, loot_count))
f.close()
while True:
choice = input("Save? (Y/n): ")
if choice == "Y":
etree.cleanup_namespaces(root)
obj_xml = etree.tostring(root, pretty_print=True)
file_to_write = open(xmlfile, 'wb')
file_to_write.write(obj_xml)
file_to_write.close()
print("File saved.")
sys.exit(0)
elif choice == "n":
sys.exit(0)
else:
print("Please type Y or n.")
Специально для dyndev.ru