方舟生存进化泰坦龙代码:寻找一般的反馈 以提高(Python)编程技能:脚本生成资源拉列表的方舟生存进化的MOD(S+ )

我对编程有点陌生。我没有去学校学习它,而是在网上阅读了很多关于编码的知识。

一般来说,如果我知道一个概念,那么我通常可以用谷歌弄清楚。

从帖子中可以明显看出,我喜欢玩游戏,所以我想有一天在为 mod 配置一些设置时,我意识到这些信息非常难以挖掘。我认为我可以尝试通过编写 python 脚本来解决它(在这一点之前编写脚本没有真正的成功)。

以下是我在 python 中处理它之前编写的一般工作流程:

将“Mods”之前的基本路径替换为“/ Game / Mods”

在 Mods 文件夹中查找文件的所有路径

重命名以 uet 结尾的所有 mod 文件。例如 filname.uet-& gt;filename.filename

从 Mod 子目录中的二进制文件解析 Mod 的名称,将所有相关路径的整数名称替换为文本名称。例如,mod 名称 899987403-& gt;Primal_Fear_Bosses

之前的示例(ubuntu 路径):/ mnt / c / 程序文件(x86)/ Steam / steamapps / common / ARK / ShooterGame / Content / Mods / 899987403 / 香草 / 弹丸 / Manticore / Proj / PFBProjManticoreQuill.uet

& amp;在脚本之后:/ 游戏 / Mods / Primal_Fear_Bosses / 香草 / 弹丸 / Manticore / Proj / PFBProjManticoreQuill.PFBProjManticoreQuill,

* 注意:对齐两行的“/ Mods /”部分以查看关键差异。

无论如何,我熟悉了很多的概念,在这一点上,所以我做了很多谷歌搜索,写了下面的脚本(第一次),“Generate_Resource_Pulling_List_for_S +.py”:

import os
import sys
from fnmatch import fnmatch
import re
# define the directory that mods are installed in
# ubuntu path
# modDir = "C:/Program Files (x86)/Steam/steamapps/common/ARK/ShooterGame/Content/Mods"
# windows path
modDir = "C:\Program Files (x86)\Steam\steamapps\common\ARK\ShooterGame\Content\Mods\\"
stringPattern = r"\w+(.mod)"
regexPattern = re.compile(stringPattern)
modFolders = [mod for mod in os.listdir(modDir) if not regexPattern.match(mod)]
# loop through mod list and append directory to mod installation path
for items in modFolders:
    modPath = "%s%s" % (modDir, items)
    # p mod name from meta file, store for later
    modMetaFilePath = "%s\%s" % (modPath, "modmeta.info")
    validPath = os.path.exists(modMetaFilePath)
    if not validPath:
        print('x is:', validPath)
        p
    try:
        modFile = open(modMetaFilePath, "rb")
        binaryContent = modFile.read(-1)
        modFile.close()
        # if len == 0:
        #     print('length:', len(binaryContent))
        #     break
        # print(type(binaryContent))
        text = binaryContent.decode('UTF-8')
        try:
            pdModName = text.split('Mods/')[1].split('/')[0]
            if not pdModName:
                break
        except ValueError as e:
            p
    except Exception as e:
        p
    for path, subdirs, files in os.walk(modPath):
        # for i in range(len(subdirs)):
        #     print('Number of Sub Directories: ', len(subdirs))
        #     print('Current Directory Number in ', path, ': ', subdirs[i])
        for name in files:
            pattern = "*.uet"
            if fnmatch(name, pattern):
                try:
                    path = os.path.normpath(path) + '\\'
                    if not path:
                        continue
                    try:
                        basePath = os.path.join('\\Game\\Mods\\', pdModName)
                    except Exception as e:
                        p
                        print('failed here:', str(e))
                    strippedBasePath = os.path.dirname(path).split(items)[1]
                    if not strippedBasePath:
                        print('failed at this point stripped path', strippedBasePath, '\n\t', 'path', path)
                        continue
                    revisedFileName = os.path.join(
                        os.path.basename(name).split('.')[0] + '.' + os.path.basename(name).split('.')[0] + ',')
                    finalPath = "%s%s\%s" % (basePath, strippedBasePath, revisedFileName)
                    flippedSlashFinalPath = finalPath.replace("\\", "/")
                    print(flippedSlashFinalPath)
                    with open("out.txt", "a") as external_file:
                        add_text = flippedSlashFinalPath
                        external_file.write(add_text)
                        external_file.close()
                except Exception as e:
                    print('Something happened', str(e))

我最初在 Windows 上安装了一个 Ubuntu 环境,因为我不熟悉 Windows 中的命令行 / bash / 脚本,如 mod 路径所示(斜杠颠倒,命令不同)。

我认为这个脚本将由其他人使用一点编程知识,但它不是最用户友好的。

无论如何,这是我第一次尝试写东西并尝试使用良好的做法。

作为练习更多编码的另一个侧面项目,我重写了它并实现了更复杂的概念。

这里是重构版本:

import os
import sys
from fnmatch import fnmatch
import re
import winreg
stringPattern = r"\w+(.mod)"
regexPattern = re.compile(stringPattern)
cl Mod(object):
    def __init__(self):
        p
        self.steam_path = None
        self.mod_folders = []
        self.mod_path = None
        self.mod_path_list = []
        self.mod_meta_path_list = []
        self.full_mod_path = None
        self.mod_meta = None
        self.resource_path = None
    @property
    def GetSteamPath(self):
        try:
            steam_key = "SOFTWARE\WOW6432Node\Valve\Steam"
            hkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, steam_key)
        except ValueError as e:
            hkey = None
            print(e.sys.exc_info())
        try:
            steam_path = winreg.QueryValueEx(hkey, "InstallPath")
        except ValueError as e:
            steam_path = None
            print(e.sys.exc_info())
        winreg.CloseKey(hkey)
        self.steam_path = steam_path[0]
        return self.steam_path
    def GetArkModPath(self):
        mod_dir = self.GetSteamPath[:] + "\steamapps\common\ARK\ShooterGame\Content\Mods\\"
        self.mod_folders = [mod for mod in os.listdir(mod_dir) if not regexPattern.match(mod)]
        mod_path_list = []
        count = 1
        while count < len(self.mod_folders):
            for mod in self.mod_folders:
                self.full_mod_path = ("%s%s\\" % (mod_dir, mod))
                mod_path_list.append(self.full_mod_path)
                self.mod_path_list = mod_path_list
                if not mod:
                    break
                # else:
                #     print('Test1', format(mod_path_list))
            return self.mod_path_list
            count += 1
    def GetModResourceList(self, mod_path_list):
        mod_folder_index = 0
        for mod_path in mod_path_list:
            mod_meta_path = "%s%s" % (mod_path, "modmeta.info")
            self.mod_meta_path_list.append(mod_meta_path)
            validPath = os.path.exists(mod_meta_path)
            if not validPath:
                # print('No Mod Meta File found at: ', mod_meta_path)
                continue
            try:
                mod_file = open(mod_meta_path, "rb")
                binary_content = mod_file.read(-1)
                mod_file.close()
                text = binary_content.decode('UTF-8')
                try:
                    pd_mod_name = text.split('Mods/')[1].split('/')[0]
                    if not pd_mod_name:
                        break
                except ValueError as e:
                    p
            except Exception as e:
                p
            for path, subdirs, files in os.walk(mod_path):
                # for i in range(len(subdirs)):
                    # print('Number of Sub Directories: ', len(subdirs))
                    # print('Current Directory Number in ', path, ': ', subdirs[i])
                for uet_file in files:
                    pattern = "*.uet"
                    if fnmatch(uet_file, pattern):
                        try:
                            path = os.path.normpath(path) + '\\'
                            if not path:
                                continue
                            try:
                                base_path = os.path.join('\\Game\\Mods\\', pd_mod_name)
                            except Exception as e:
                                p
                                print('failed here:', str(e))
                            stripped_base_path = os.path.dirname(path).split(self.mod_folders[mod_folder_index])[1]
                            resource_name = os.path.join(
                                os.path.basename(uet_file).split('.')[0] + '.' + os.path.basename(uet_file).split('.')[0] + ',')
                            full_path = "%s%s\%s" % (base_path, stripped_base_path, resource_name)
                            resource_path = full_path.replace("\\", "/")
                            self.resource_path = resource_path
                            # to see what text is written to the file, uncomment print here
                            print(self.resource_path)
                            with open("test_out.txt", "a") as external_file:
                                add_text = self.resource_path
                                external_file.write(add_text)
                                external_file.close()
                        except Exception as e:
                            print('Error: ', str(e))
                            # return self.resource_path[]
            mod_folder_index += 1
ark = Mod()
ark_mods = ark.GetArkModPath()
ark.GetModResourceList(ark_mods)

这个修订后的版本更加用户友好,不一定需要输入或修改变量。我试图避免要求在方法调用中传递参数,因为我想在没有用户任何输入的情况下根据需要自动执行脚本。

如果你有方舟安装了一些 mod,那么你可能能够实际使用或测试脚本。我很好奇他们是否为他人工作。仅供参考,并非所有路径都可用。最好删除 / 删除一些或只是挑出你想要的。无法真正找出识别这一点的最佳方法。

我努力创建我的类的实例,设置什么属性,设置什么属性,为我的类的属性设置(?)值,调用这些存储值,以及几乎所有你能想象的东西。

有些事情对我来说是显而易见的,比如在一个不一定被重用的脚本中创建类和方法是毫无意义的。它仍然很有趣,重点是学习和实践。

在任何情况下,我对任何反馈都持开放态度,因为我不知道什么是一切的常识或其他人已经看到的最佳实践。作为旁注,我使用本地 repos 进行版本控制。我以前使用过 git 和 bitbucket。

首选主题,如果不确定:防御性编程适当的异常处理 SOLID(我在这里缺乏)类(我几乎没有得到我的工作,如果它不是 apparrent)方法(似乎直截了当-如果代码要被复制,把它放在一个方法)首选的命名法的一切,类,方法,变量(我用谷歌搜索了它,但仍然不喜欢它的样子,特别是当它们变长时)

欢迎链接到资源!我非常感谢任何反馈,并期待所有评论。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(216)
超凡先锋怎么选服务器:亚行服务器怎么启动(adb start server)
上一篇
琪亚娜的cv:没有名为 'cv2.cv2' 的模块(no module named cv2.cv2)
下一篇

相关推荐

  • python界面开发构建一个简单、可靠的用户界面

    Python界面开发是指使用Python语言来创建图形用户界面(GUI)的过程。它可以帮助你创建可视化的应用程序,使用户能够与你的程序交互。…

    2023-03-18 10:39:36
    0 77 87
  • python 创建列表:使用Python创建一个强大的列表

    示例示例Python创建列表的方法有多种,下面介绍其中几种常用的方法。使用 [] 创建空列表…

    2023-03-03 12:56:32
    0 67 10
  • python的列表排序轻松实现有序数据

    示例示例Python列表排序是指对列表中的元素进行排序。Python内置的sorted()函数可以对list进行排序:示例代码:…

    2023-03-03 12:45:31
    0 62 13
  • python中的变量名:如何使用Python中的变量名

    Python中的变量名是用户定义的标识符,用于指代某个值。变量名可以由字母、数字、下划线组成,但不能以数字开头,也不能使用关键字。…

    2023-02-15 14:41:46
    0 28 57
  • python菜鸟教程:Python 基础教程

    Python菜鸟教程是一个免费的Python学习网站,旨在帮助Python初学者快速入门。它提供了大量的Python教程,包括基础语法、控制流、函数、模块、文件I/O、错误处理、类、正则表达式、GUI编程、网络编程、CGI编程等等。…

    2023-02-23 05:58:40
    0 45 91
  • python setdefault函数 None}

    示例示例Python 函数用于在字典中查找指定键,如果该键不存在,则将其设置为指定的默认值。语法:…

    2023-01-20 14:28:09
    0 91 79
  • python 闭包函数:如何利用Python闭包函数实现更复杂的功能

    Python闭包函数是一种特殊的函数,它可以访问其他函数作用域中的变量。闭包函数有助于将函数与其上下文环境中的变量绑定在一起,因此可以在函数外部使用这些变量。…

    2023-02-15 10:32:25
    0 22 81
  • python屏幕抓取挖掘数据的新方法

    Python屏幕抓取是一种使用Python编写的程序,用于从计算机屏幕上抓取图像、文字或其他数据。它可以用来从游戏中抓取图像,从网页中抓取文本,从文档中抓取图像,或者从视频中抓取帧。…

    2023-01-19 10:51:32
    0 81 19

发表评论

登录 后才能评论

评论列表(65条)