among us私服搭建与GMH胜场分析

本文详细指导如何通过Docker搭建私人Among Us服务器,包括安装screen以保持后台运行、修改反作弊配置、导入配置文件、处理mod问题及GMH汉化日志分析,使用Python脚本解析游戏胜利情况。
该文章已生成可运行项目,


amongus私人服务器搭建
项目地址: https://github.com/Impostor/Impostor

Im的更新还是挺快的,621版本出了就马上更了。
为了搭建方便,于是用docker进行操作。如果直接运行docker的话,里面会有抽风的反作弊系统,私服的话建议关掉反作弊,因此整个流程如下(全程root

首先需要有一个国内的服务器

安装screen

为了保证关掉与服务器交互的窗口后仍然在运行,因此需要安装screen,直接运行

apt install screen

拉取镜像并关闭反作弊

pull镜像

docker pull aeonlucid/impostor

反作弊配置文件在app/config.json中,因此执行

find /var/lib/docker -name "config.json"

在这里插入图片描述
直接用vim修改config.json(每个人的那串id是不一样的)

vim /var/lib/docker/overlay2/7c6397c1e7d2fa13e0a65add69f7401576512b2a523b1a0ecaf9f61f4f970c2b/diff/app/config.json

将两处的true都改成false,如图
在这里插入图片描述
然后按下esc,:wq保存退出

运行docker

首先创建一个新的窗口,命名为au

screen -S au

接下来看一下刚刚pull的docker

docker images

在这里插入图片描述
然后开放指定端口,执行该命令

docker run -p 22023:22023/udp b96

在这里插入图片描述

导入配置文件

打开https://impostor.github.io/Impostor/
在server address里输入自己的服务器ip,在server name处输入你想命的名字
在这里插入图片描述
然后下载文件,将如果命名后有(1)等字样,请去掉,保证文件名为"regionInfo.json",不能错字 少字。
如果打不开上面的网站去下载文件,请将最后一行的xxx改成自己的IP与名字,完事后保存为regionInfo.json
{"CurrentRegionIdx":3,"Regions":[{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"na.mm.among.us","DefaultIp":"50.116.1.42","Port":22023,"Name":"North America","TranslateName":289,"UseDtls":true},{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"eu.mm.among.us","DefaultIp":"172.105.251.170","Port":22023,"Name":"Europe","TranslateName":290,"UseDtls":true},{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"as.mm.among.us","DefaultIp":"139.162.111.196","Port":22023,"Name":"Asia","TranslateName":291,"UseDtls":true},{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"xxx.xxx.xxx.xxx(IP)","DefaultIp":"xxx.xxx.xxx.xxx(IP)","Port":22023,"Name":"xxxxxxx(name)","TranslateName":1003,"UseDtls":false}]}

然后按下win+r,输入%APPDATA%\..\LocalLow\Innersloth\Among Us后按下enter
直接替换掉下面的regionInfo.json

接下来即可关掉与服务器交互的窗口,并打开游戏选择自己的服务器。
如果要回到之前的au窗口,只需要输入

screen -R au

在这里插入图片描述

在这里插入图片描述

mod问题

在玩mod的时候(如LMv),可能会在创建房间时出现下面这个问题
在这里插入图片描述
服务器没有响应握手。
解决方法是修改游戏目录下的BepInEx\config\gg.reactor.api.cfg文件,将Allow vanilla servers = false改成Allow vanilla servers = ture(允许普通服务器)

如果是玩多模,还是推荐GM(

顺便发现GMHv2.1.58里面,在BepInEx下有个日志(LogOutput.log)
测试了一下是实时更新的,草
在这里插入图片描述

游戏内语音(BetterCrewLink)

可在github官网进行下载https://github.com/OhMyGuus/BetterCrewLink/releases
但是官网的会强制更新,所以推荐到四个HP汉化组去下载2.9.7汉化去更新版本
https://amonguscn.club/近距离语音模组better-crewlink汉化/

下载安装到任意盘后直接打开
在这里插入图片描述
当游戏启动后则进入等待页面,此时大家都进入同一房间后将会自动连上语音软件。可在主界面对不同的玩家音量进行调整,在设置里面也能对总音量进行调整。

对于语音软件的设置,每次开房间的房主可进行设置,其他玩家的设置将会失效并跟随房主的设置。

默认使用的是一个国外服务器,如果要使用自己的服务器。可执行如下命令
创建窗口

screen -R au2

拉取docker镜像(其中第一个9736可修改为其他端口)

docker run -d -p 9736:9736 ohmyguus/bettercrewlink-server:latest

在软件中找到高级设置,修改语音服务器,修改为http://你的ip:你的端口
然后打开NAT修复即可
有时候会出现有些人能用 有些不能用的情况,暂时还没搞明白为什么。

GMH汉化日志分析-Python

没事干写的,还有点问题,可以先测试用,没有优化过,脚本存在奇怪问题概率感觉比较大(因为手里中立获胜日志太少只能凭感觉写没法验证)
然后对于船员、狐妖、豺狼和内鬼的判定,都可以写成如同中立的判定改为循环
但是脚本里的阵营判定是一个个写的暂时不是很想改(能实现功能就是成功!)
想修改的可以自行修改
日志文件在Among Us GMHv2.1.58\BepInEx\LogOutput.log
(对于空数组没有做try-except,即如果有人没有赢过就会报错,这个问题 还没修)
2022/9/1修复起诉人重复胜利问题
2022/9/5修复律师代替胜利但不增加获胜次数问题
2022/9/19增加职业每把显示与获胜显示(在游戏开始时不能退出否则从那把开始后面数据混乱,这个问题暂时不想修)
2023/2/4修改新版起诉人问题,新增总被刀次数与总投票次数,未增加魅魔、丘比特职业判定,增加福尔摩斯职业判定
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

(括号内为前职业)

# -*- codeing = utf-8 -*-
# @Time : 2022/9/19 11:38
# @Author : Mumuzi
# @File : win_pro.py
# @Software : PyCharm
import re
from collections import Counter
from tabulate import tabulate
Impostor = ['内鬼','黑手党','化形者','隐蔽者','邪恶的黑客','吸血鬼','抹除者','骗术师','清理者','术士','赏金猎人','女巫','刺客','忍者','嗜血杀手','设陷者','双子爆破者','邪恶的追踪者','模仿者','复仇者','邪恶的赌怪','邪恶的换票师','背叛的','骇客']
Crewmate = ['船员','占卜师','市长','工程师','警长','执灯人','侦探','时间之主','医生','灵媒','黑客','追踪者','告密者','卧底','保安','诱饵','通灵师','正义的赌怪','正义的换票师','福尔摩斯']
Neutral_Win = ['黑死病','夜晚的黑暗是那么惹人怜爱','你们都是我的傀儡','小丑竟是我自己','用火焰净化一切','多谢款待','打赢官司']
Neutral_Name = ['疫医','化身博士','傀儡','小丑','纵火犯','秃鹫','律师','连环交换师','薛定谔的猫','豺狼','跟班','狐妖','背德者']


def Collect_Winner():
    ind = []
    for i in range(len(f)):
        if('Game Result' in f[i]):
           ind.append(i)
    return ind

def Collect_Role():
    ind = []
    for i in range(len(f)):
        if('Role Assign' in f[i]):
           ind.append(i)
    return ind

def Check_Main_User():
    for i in range(len(f)):
        if('[Settings][*]' in f[i]):
            name = re.search(':(.*):', f[i][40:]).group(0)[1:-1].strip()
            return name

def Get_ind_AND_NS(Name,Win_Times,ind,HuaiBi):
    ind2 = ind
    while True:
        if ('--------------------------------' not in f[ind2]):
            ind2 += 1
        else:
            break
    for i in range(ind + 1, ind2):
        try:
            name = re.search('\[Result\](.*?)<{1}', f[i]).group(0)[8:-1]
        except:
            pass
        if (name not in Name):
            Name.append(name)
            Win_Times.append(0)
            HuaiBi.append([])
    return Name,Win_Times,ind2,HuaiBi

def Check_Winner(Name,Win_Times,ind,Muser,HuaiBi,FTWIN):
    Follow = True #已经忘了为啥要写Follow=True,但是不想进行修改
    Lawyer,Lawyer_Muser = False,False
    inds = ind-1
    while True:
        if('[Result]' in f[inds]):
            role_win = f[inds]
            break
        else:
            inds -= 1
    if(('律师取代客户获得胜利' in f[ind-1]) or ('律师随客户一同胜利' in f[ind-1])):
        Lawyer,Lawyer_Muser = True,True #主机作为客户时无§标志
    # print(role_win)
    Name, Win_Times, ind2,HuaiBi = Get_ind_AND_NS(Name, Win_Times, ind,HuaiBi)
    FTWin = [False] * len(Name)
    for _ in range(ind+1,ind2):
        if('律师' in f[_]):
            rep_name = re.search('\[Result\](.*?)<{1}', f[_]).group(0)[8:-1]
            break
    if('豺狼' in role_win):
        for i in range(ind + 1, ind2):
            if(('豺狼' in f[i]) or ('跟班' in f[i]))
本文章已经生成可运行项目
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值