Skip to content

Commit

Permalink
Merge pull request #3 from Bidgecfah/Bidgecfah-patch-1
Browse files Browse the repository at this point in the history
新增自动当期活动商店性价比
  • Loading branch information
Bidgecfah authored Apr 17, 2024
2 parents b3aaf28 + 45bbf50 commit 57f687b
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 17 deletions.
77 changes: 74 additions & 3 deletions 物价局计算.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# -*- mode: python ; coding: utf-8 -*-
import json
import numpy
import re
import requests
import time
from bs4 import BeautifulSoup


def 材料定价计算(输入, 精英材料编号列表, 精英材料名列表, 精英材料图片列表, 其他物品信息列表):
Expand Down Expand Up @@ -31,6 +34,22 @@ def 材料定价计算(输入, 精英材料编号列表, 精英材料名列表,
游戏关卡数据 = json.load(open('游戏关卡数据.json'))
采购价格数据 = json.load(open('采购价格.json', encoding="utf-8"))
企鹅物流自动掉落数据 = json.load(open('企鹅物流自动掉落数据.json'))
PRTS首页 = "https://prts.wiki/w/首页"
B = BeautifulSoup(requests.get(PRTS首页).text, "html.parser").find_all("b")
活动名称 = "当前无活动"
for b in B:
if "「" in b.text:
活动名称 = re.findall(r'\「(.*?)\」', b.text)[0]
break
PRTS活动网址 = "https://prts.wiki/w/" + 活动名称

# 找到含有指定字符串的表格
商店表格 = None
全部表格 = BeautifulSoup(requests.get(PRTS活动网址).text, "html.parser").find_all("table")
for 表格 in 全部表格:
if "可兑换道具" in 表格.text:
商店表格 = 表格
break

# 按照配方构筑加工矩阵
# 加工T5获得T5精英材料矩阵 = numpy.eye(len(精英材料编号列表[4]))
Expand Down Expand Up @@ -140,11 +159,17 @@ def 材料定价计算(输入, 精英材料编号列表, 精英材料名列表,
and not 游戏关卡数据['stages'][关卡]['apCost'] == 0):
主线关卡信息列表[0].append(关卡)
主线关卡信息列表[1].append(游戏关卡数据['stages'][关卡]['apCost'])
主线关卡信息列表[2].append(游戏关卡数据['stages'][关卡]['goldGain'] * 1.2)
# 主线关卡信息列表[2].append(游戏关卡数据['stages'][关卡]['goldGain'] * 1.2)
折算产出龙门币 = 游戏关卡数据['stages'][关卡]['goldGain'] * 1.2
if 换算活动代币: 折算产出龙门币 += 游戏关卡数据['stages'][关卡]['apCost'] * 10
主线关卡信息列表[2].append(折算产出龙门币)
if 游戏关卡数据['stages'][关卡]['zoneId'] == 'weekly_6':
技巧概要关卡信息列表[0].append(关卡)
技巧概要关卡信息列表[1].append(游戏关卡数据['stages'][关卡]['apCost'])
技巧概要关卡信息列表[2].append(游戏关卡数据['stages'][关卡]['goldGain'] * 1.2)
# 技巧概要关卡信息列表[2].append(游戏关卡数据['stages'][关卡]['goldGain'] * 1.2)
折算产出龙门币 = 游戏关卡数据['stages'][关卡]['goldGain'] * 1.2
if 换算活动代币: 折算产出龙门币 += 游戏关卡数据['stages'][关卡]['apCost'] * 10
技巧概要关卡信息列表[2].append(折算产出龙门币)
技巧概要关卡信息列表[3].append(0)
技巧概要关卡信息列表[4].append(0)
技巧概要关卡信息列表[5].append(0)
Expand Down Expand Up @@ -506,4 +531,50 @@ def 材料定价计算(输入, 精英材料编号列表, 精英材料名列表,
情报凭证性价比表[3].append(numpy.hstack((T4精英材料价值向量, 其他物品信息列表[3]))[序号] / eval(采购价格数据["情报凭证"][材料名]) + 序号 * 1e-8) # 性价比
情报凭证性价比表[4] = [{序号: i+1 for i, 序号 in enumerate(sorted(情报凭证性价比表[3], reverse=True))}[序号] for 序号 in 情报凭证性价比表[3]] # 性价比排名

return 定价关卡列表, 精英材料价值排序表, 精英材料价值向量, 信用性价比表, 资质凭证性价比表, 高级凭证性价比表, 寻访参数模型性价比表, 情报凭证性价比表
# 如果找到目标表格
活动商店 = {}
if 商店表格:
# 提取表头
表头 = [header.text.strip() for header in 商店表格.find_all("th")]
阶段 = ""
# 提取表格数据
for in 商店表格.find_all("tr"):
行数据 = {}
格数据 = .find_all(["th", "td"])
for i in range(len(表头)):
行数据[表头[i]] = 格数据[i].text.strip() if i < len(格数据) else ""
if 行数据:
if 行数据[""] == "金色阶段":
阶段 = "金色阶段"
活动商店[阶段] = {}
elif 行数据[""] == "紫色阶段":
阶段 = "紫色阶段"
活动商店[阶段] = {}
elif 行数据[""] == "灰色阶段":
阶段 = "灰色阶段"
活动商店[阶段] = {}
可兑换道具分割 = 行数据["可兑换道具"].split("×")
if 可兑换道具分割[0] in 精英材料名列表[1]+精英材料名列表[2]+精英材料名列表[3]+精英材料名列表[4]+其他物品信息列表[1]:
if len(可兑换道具分割) == 1:
活动商店[阶段][行数据["可兑换道具"]] = str(行数据["单价"])
elif len(可兑换道具分割) == 2:
活动商店[阶段][可兑换道具分割[0]] = str(行数据["单价"]) + "/" + 可兑换道具分割[1]
with open("活动商店数据.json", "w", encoding="utf-8") as jsonfile:
json.dump(活动商店, jsonfile, ensure_ascii=False, indent=4)

活动代币性价比表 = []
for 阶段序号, 活动商店阶段 in enumerate(活动商店.keys()):
活动代币性价比表.append([[], [], [], [], []])
for 材料序号, 材料名 in enumerate(精英材料名列表[1]+精英材料名列表[2]+精英材料名列表[3]+精英材料名列表[4]+其他物品信息列表[1]):
if 材料名 in 活动商店[活动商店阶段].keys():
活动代币性价比表[阶段序号][0].append((精英材料图片列表[1]+精英材料图片列表[2]+精英材料图片列表[3]+精英材料图片列表[4]+其他物品信息列表[0])[材料序号]) # 图片
活动代币性价比表[阶段序号][1].append(材料名) # 材料名
if 材料名 in 精英材料名列表[1]: 活动代币性价比表[阶段序号][2].append(1) # 材料等级
elif 材料名 in 精英材料名列表[2]: 活动代币性价比表[阶段序号][2].append(2)
elif 材料名 in 精英材料名列表[3]: 活动代币性价比表[阶段序号][2].append(3)
elif 材料名 in 精英材料名列表[4]: 活动代币性价比表[阶段序号][2].append(4)
else: 活动代币性价比表[阶段序号][2].append(其他物品信息列表[2][材料序号-len(精英材料图片列表[1]+精英材料图片列表[2]+精英材料图片列表[3]+精英材料图片列表[4])])
活动代币性价比表[阶段序号][3].append(numpy.hstack((T2精英材料价值向量, T3精英材料价值向量, T4精英材料价值向量, T5精英材料价值向量, 其他物品信息列表[3]))[材料序号] / eval(活动商店[活动商店阶段][材料名]) + 材料序号 * 1e-8) # 性价比
活动代币性价比表[阶段序号][4] = [{序号: i+1 for i, 序号 in enumerate(sorted(活动代币性价比表[阶段序号][3], reverse=True))}[序号] for 序号 in 活动代币性价比表[阶段序号][3]] # 性价比排名

return 定价关卡列表, 精英材料价值排序表, 精英材料价值向量, 信用性价比表, 资质凭证性价比表, 高级凭证性价比表, 寻访参数模型性价比表, 情报凭证性价比表, 活动代币性价比表
59 changes: 45 additions & 14 deletions 罗德岛物价局.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import json
import numpy
from PIL import Image, ImageTk
import re
import requests
import ttkbootstrap as 界面
from bs4 import BeautifulSoup
from ttkbootstrap.constants import *
from ttkbootstrap.scrolled import ScrolledFrame
from 物价局计算 import 材料定价计算
Expand Down Expand Up @@ -210,8 +212,8 @@ def 计算工序():

基备选集合 = 关卡范围.get()
换算活动代币 = 活动代币.get()
固源岩单独定价 = 以固源岩为原料.get()
装置单独定价 = 以装置为原料.get()
固源岩单独定价 = 不加工固源岩.get()
装置单独定价 = 不加工装置.get()
瑕光加工T5精英材料 = 瑕光[0].get()
瑕光加工T4精英材料 = 瑕光[1].get()
瑕光加工T3精英材料 = 瑕光[2].get()
Expand All @@ -229,7 +231,7 @@ def 计算工序():
]

# try:
定价关卡列表, 精英材料价值排序表, 精英材料价值向量, 信用性价比表, 资质凭证性价比表, 高级凭证性价比表, 寻访参数模型性价比表, 情报凭证性价比表 = 材料定价计算(输入, 精英材料编号列表, 精英材料名列表, 精英材料图片列表, 其他物品信息列表)
定价关卡列表, 精英材料价值排序表, 精英材料价值向量, 信用性价比表, 资质凭证性价比表, 高级凭证性价比表, 寻访参数模型性价比表, 情报凭证性价比表, 活动代币性价比表 = 材料定价计算(输入, 精英材料编号列表, 精英材料名列表, 精英材料图片列表, 其他物品信息列表)
# except:
# 提示.configure(text='计算失败,请检查输入内容的合理性!', foreground='red')
# return
Expand All @@ -243,6 +245,7 @@ def 计算工序():
for 子控件 in 高级凭证性价比域.winfo_children(): 子控件.destroy()
for 子控件 in 寻访参数模型性价比域.winfo_children(): 子控件.destroy()
for 子控件 in 情报凭证性价比域.winfo_children(): 子控件.destroy()
for 子控件 in 活动代币性价比域.winfo_children(): 子控件.destroy()
for 子控件 in 定价关卡域.winfo_children(): 子控件.destroy()
界面.Label(定价关卡域, image=理智图标).grid(row=0, column=0, padx=10, pady=3)
界面.Label(定价关卡域, text="材料名称").grid(row=0, column=1, padx=10, pady=3)
Expand Down Expand Up @@ -333,12 +336,37 @@ def 计算工序():
界面.Label(情报凭证性价比域, text=情报凭证性价比表[1][情报凭证性价比表[4].index(序号+1)], foreground=名称颜色[情报凭证性价比表[2][情报凭证性价比表[4].index(序号+1)]]).grid(row=序号+1, column=1, padx=10, pady=2)
界面.Label(情报凭证性价比域, text=format(100 * [num / max(情报凭证性价比表[3]) for num in 情报凭证性价比表[3]][情报凭证性价比表[4].index(序号+1)], '.2f')).grid(row=序号+1, column=2, padx=10, pady=2)

PRTS首页 = "https://prts.wiki/w/首页"
B = BeautifulSoup(requests.get(PRTS首页).text, "html.parser").find_all("b")
活动名称 = "当前无活动"
for b in B:
if "「" in b.text:
活动名称 = "「" + re.findall(r'\「(.*?)\」', b.text)[0] + "」"
break
if 活动名称 != "当前无活动":
活动商店价格数据 = json.load(open('活动商店数据.json', encoding="utf-8"))
活动代币性价比域.grid(row=0, column=0, sticky=界面.W+E+N+S, pady=10, padx=10)
= 0
界面.Label(活动代币性价比域, text=活动名称).grid(row=, column=0, padx=10, pady=3)
界面.Label(活动代币性价比域, text="材料名称").grid(row=, column=1, padx=10, pady=3)
界面.Label(活动代币性价比域, text="性价比").grid(row=, column=2, padx=10, pady=3)
for 阶段序号, 阶段 in enumerate(活动商店价格数据.keys()):
+= 1
for 序号 in range(len(活动代币性价比表[阶段序号][4])):
界面.Label(活动代币性价比域, image=活动代币性价比表[阶段序号][0][活动代币性价比表[阶段序号][4].index(序号+1)]).grid(row=, column=0, padx=10, pady=2)
界面.Label(活动代币性价比域, text=活动代币性价比表[阶段序号][1][活动代币性价比表[阶段序号][4].index(序号+1)], foreground=名称颜色[活动代币性价比表[阶段序号][2][活动代币性价比表[阶段序号][4].index(序号+1)]]).grid(row=, column=1, padx=10, pady=2)
界面.Label(活动代币性价比域, text=format(100 * [num / max(活动代币性价比表[0][3] + 活动代币性价比表[1][3] + 活动代币性价比表[2][3]) for num in 活动代币性价比表[阶段序号][3]][活动代币性价比表[阶段序号][4].index(序号+1)], '.2f')).grid(row=, column=2, padx=10, pady=2)
+= 1
if 阶段序号 < len(活动商店价格数据.keys())-1:
界面.Separator(活动代币性价比域, bootstyle="success").grid(row=, column=0, columnspan=3, pady=15, sticky=界面.W + E)
+= 1

提示.configure(text='计算完成!', foreground='#78c2ad')


名称颜色 = ["black", "YellowGreen", "DodgerBlue", "LightSlateBlue", "GoldenRod"]
框架颜色 = ["dark", "success", "info", "secondary", "warning"]
窗口 = 界面.Window(title="罗德岛物价局", themename="minty", iconphoto="图片/标题栏图标.png", size=(1750, 1000), minsize=(0, 0))
窗口 = 界面.Window(title="罗德岛物价局", themename="minty", iconphoto="图片/标题栏图标.png", size=(1750, 1100), minsize=(0, 0))
窗口.style.configure('primary.TNotebook', tabposition='wn', tabmargins=0, background='#78c2ad')
窗口.style.configure('primary.TNotebook.Tab', font=('微软雅黑', 11))
标签页集 = 界面.Notebook(窗口, style='primary.TNotebook')
Expand Down Expand Up @@ -410,13 +438,13 @@ def 计算工序():
界面.Separator(价值观域, bootstyle="light").grid(row=8, column=0, columnspan=3, pady=5, sticky=界面.W+E)
源石碎片图标 = ImageTk.PhotoImage(Image.open(f'图片/源石碎片.png').resize((40, 40)))
界面.Label(价值观域, image=源石碎片图标).grid(row=15, pady=1, column=0, sticky=界面.E)
界面.Label(价值观域, text="制造源石材料").grid(row=15, column=1, columnspan=2, ipadx=103, pady=5, sticky=界面.W)
以固源岩为原料 = 界面.BooleanVar(value=TRUE)
界面.Checkbutton(价值观域, text="以固源岩为原料", variable=以固源岩为原料, onvalue=TRUE, offvalue=FALSE).grid(row=15, pady=5, column=2, padx=5, sticky=界面.W)
界面.Label(价值观域, text="制造源石材料相关").grid(row=15, column=1, columnspan=2, ipadx=103, pady=5, sticky=界面.W)
不加工固源岩 = 界面.BooleanVar(value=FALSE)
界面.Checkbutton(价值观域, text="不加工固源岩", variable=不加工固源岩, onvalue=TRUE, offvalue=FALSE).grid(row=15, pady=5, column=2, padx=5, sticky=界面.W)
固源岩图标 = ImageTk.PhotoImage(Image.open(f'图片/MTL_SL_G2.png').resize((40, 40)))
界面.Label(价值观域, image=固源岩图标).grid(row=15, pady=5, column=2, padx=40, sticky=界面.E)
以装置为原料 = 界面.BooleanVar(value=TRUE)
界面.Checkbutton(价值观域, text="以装置为原料", variable=以装置为原料, onvalue=TRUE, offvalue=FALSE).grid(row=16, pady=5, column=2, padx=5, sticky=界面.W)
不加工装置 = 界面.BooleanVar(value=FALSE)
界面.Checkbutton(价值观域, text="不加工装置", variable=不加工装置, onvalue=TRUE, offvalue=FALSE).grid(row=16, pady=5, column=2, padx=5, sticky=界面.W)
装置图标 = ImageTk.PhotoImage(Image.open(f'图片/MTL_SL_BOSS2.png').resize((40, 40)))
界面.Label(价值观域, image=装置图标).grid(row=16, pady=5, column=2, padx=40, sticky=界面.E)

Expand Down Expand Up @@ -503,21 +531,24 @@ def 计算工序():
精英材料定价域[0].grid(row=1, column=3, sticky=界面.W+E+N+S, pady=10, padx=10)

# 采购性价比标签页
# 活动代币性价比域
活动代币性价比域 = 界面.LabelFrame(滚动区域[2], text="活动代币", relief=界面.RIDGE, bootstyle="info", borderwidth=10)
# 信用性价比域
信用性价比域 = 界面.LabelFrame(滚动区域[2], text=" 信用", relief=界面.RIDGE, bootstyle="danger", borderwidth=10)
信用性价比域.grid(row=0, column=0, sticky=界面.W+E+N+S, pady=10, padx=10)
信用性价比域.grid(row=0, column=10, sticky=界面.W+E+N+S, pady=10, padx=10)
# 资质凭证性价比域
资质凭证性价比域 = 界面.LabelFrame(滚动区域[2], text="资质凭证", relief=界面.RIDGE, bootstyle="success", borderwidth=10)
资质凭证性价比域.grid(row=0, column=1, sticky=界面.W+E+N+S, pady=10, padx=10)
资质凭证性价比域.grid(row=0, column=11, sticky=界面.W+E+N+S, pady=10, padx=10)
# 高级凭证性价比域
高级凭证性价比域 = 界面.LabelFrame(滚动区域[2], text="高级凭证", relief=界面.RIDGE, bootstyle="warning", borderwidth=10)
高级凭证性价比域.grid(row=0, column=2, sticky=界面.W+E+N+S, pady=10, padx=10)
高级凭证性价比域.grid(row=0, column=12, sticky=界面.W+E+N+S, pady=10, padx=10)
# 寻访参数模型价比域
寻访参数模型性价比域 = 界面.LabelFrame(滚动区域[2], text="寻访参数模型", relief=界面.RIDGE, bootstyle="danger", borderwidth=10)
寻访参数模型性价比域.grid(row=0, column=3, sticky=界面.W+E+N+S, pady=10, padx=10)
寻访参数模型性价比域.grid(row=0, column=13, sticky=界面.W+E+N+S, pady=10, padx=10)
# 情报凭证性价比域
情报凭证性价比域 = 界面.LabelFrame(滚动区域[2], text="情报凭证", relief=界面.RIDGE, bootstyle="info", borderwidth=10)
情报凭证性价比域.grid(row=0, column=4, sticky=界面.W+E+N+S, pady=10, padx=10)
情报凭证性价比域.grid(row=0, column=14, sticky=界面.W+E+N+S, pady=10, padx=10)

# 更新文件()
计算工序()
窗口.mainloop()

0 comments on commit 57f687b

Please sign in to comment.