zhenxun_bot/plugins/open_cases/config.py
2023-02-26 22:17:26 +08:00

393 lines
12 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random
from typing import List, Tuple
from services.log import logger
from .models.buff_skin import BuffSkin
BLUE = 0.7981
BLUE_ST = 0.0699
PURPLE = 0.1626
PURPLE_ST = 0.0164
PINK = 0.0315
PINK_ST = 0.0048
RED = 0.0057
RED_ST = 0.00021
KNIFE = 0.0021
KNIFE_ST = 0.000041
# 崭新
FACTORY_NEW_S = 0
FACTORY_NEW_E = 0.0699999
# 略磨
MINIMAL_WEAR_S = 0.07
MINIMAL_WEAR_E = 0.14999
# 久经
FIELD_TESTED_S = 0.15
FIELD_TESTED_E = 0.37999
# 破损
WELL_WORN_S = 0.38
WELL_WORN_E = 0.44999
# 战痕
BATTLE_SCARED_S = 0.45
BATTLE_SCARED_E = 0.99999
# 狂牙大行动
KUANGYADAXINGDONG_CASE_KNIFE = [
"摩托手套 | 第三特种兵连",
"狂牙手套 | 翡翠",
"驾驶手套 | 美洲豹女王",
"运动手套 | 弹弓",
"专业手套 | 老虎精英",
"专业手套 | 渐变大理石",
"运动手套 | 夜行衣",
"驾驶手套 | 西装革履",
"摩托手套 | 终点线",
"摩托手套 | 血压",
"运动手套 | 猩红头巾",
"驾驶手套 | 雪豹",
"裹手 | 长颈鹿",
"驾驶手套 | 绯红列赞",
"裹手 | 沙漠头巾",
"专业手套 | 一线特工",
"狂牙手套 | 黄色斑纹",
"摩托手套 | 小心烟幕弹",
"裹手 | 蟒蛇",
"裹手 | 警告!",
"狂牙手套 | 精神错乱",
"运动手套 | 大型猎物",
"狂牙手套 | 针尖",
"专业手套 | 陆军少尉长官",
]
KUANGYADAXINGDONG_CASE_RED = ["M4A1 | 印花集", "格洛克 | 黑色魅影"]
KUANGYADAXINGDONG_CASE_PINK = ["FN57 | 童话城堡", "M4A4 | 赛博", "USP | 小绿怪"]
KUANGYADAXINGDONG_CASE_PURPLE = [
"AWP | 亡灵之主",
"双持贝瑞塔 | 灾难",
"新星 | 一见青心",
"SSG 08 | 抖枪",
"UMP-45 | 金铋辉煌",
]
KUANGYADAXINGDONG_CASE_BLUE = [
"CZ75 | 世仇",
"P90 | 大怪兽RUSH",
"G3SG1 | 血腥迷彩",
"加利尔 AR | 破坏者",
"P250 | 污染物",
"M249 | 等高线",
"MP5-SD | 零点行动",
]
# 突围大行动
TUWEIDAXINGDONG_CASE_KNIFE = [
"蝴蝶刀 | 无涂装",
"蝴蝶刀 | 蓝钢",
"蝴蝶刀 | 屠夫",
"蝴蝶刀 | 森林 DDPAT",
"蝴蝶刀 | 北方森林",
"蝴蝶刀 | 狩猎网格",
"蝴蝶刀 | 枯焦之色",
"蝴蝶刀 | 人工染色",
"蝴蝶刀 | 都市伪装",
"蝴蝶刀 | 表面淬火",
"蝴蝶刀 | 深红之网",
"蝴蝶刀 | 渐变之色",
"蝴蝶刀 | 噩梦之夜",
]
TUWEIDAXINGDONG_CASE_RED = ["P90 | 二西莫夫", "M4A1 | 次时代"]
TUWEIDAXINGDONG_CASE_PINK = ["沙漠之鹰 | 阴谋者", "FN57 | 狩猎利器", "格洛克 | 水灵"]
TUWEIDAXINGDONG_CASE_PURPLE = ["PP-野牛 | 死亡主宰者", "CZ75 | 猛虎", "新星 | 锦鲤", "P250 | 超新星"]
TUWEIDAXINGDONG_CASE_BLUE = [
"MP7 | 都市危机",
"内格夫 | 沙漠精英",
"P2000 | 乳白象牙",
"SSG 08 | 无尽深海",
"UMP-45 | 迷之宫",
]
# 命悬一线
MINGXUANYIXIAN_CASE_KNIFE = [
"专业手套 | 大腕",
"专业手套 | 深红之网",
"专业手套 | 渐变之色",
"专业手套 | 狩鹿",
"九头蛇手套 | 响尾蛇",
"九头蛇手套 | 红树林",
"九头蛇手套 | 翡翠色调",
"九头蛇手套 | 表面淬火",
"摩托手套 | 交运",
"摩托手套 | 嘭!",
"摩托手套 | 多边形",
"摩托手套 | 玳瑁",
"裹手 | 套印",
"裹手 | 森林色调",
"裹手 | 钴蓝骷髅",
"裹手 | 防水布胶带",
"运动手套 | 双栖",
"运动手套 | 欧米伽",
"运动手套 | 迈阿密风云",
"运动手套 | 青铜形态",
"驾驶手套 | 墨绿色调",
"驾驶手套 | 王蛇",
"驾驶手套 | 蓝紫格子",
"驾驶手套 | 超越",
]
MINGXUANYIXIAN_CASE_RED = ["M4A4 | 黑色魅影", "MP7 | 血腥运动"]
MINGXUANYIXIAN_CASE_PINK = ["AUG | 湖怪鸟", "AWP | 死神", "USP | 脑洞大开"]
MINGXUANYIXIAN_CASE_PURPLE = [
"MAG-7 | SWAG-7",
"UMP-45 | 白狼",
"内格夫 | 狮子鱼",
"新星 | 狂野六号",
"格洛克 | 城里的月光",
]
MINGXUANYIXIAN_CASE_BLUE = [
"FN57 | 焰色反应",
"MP9 | 黑砂",
"P2000 | 都市危机",
"PP-野牛 | 黑夜暴乱",
"R8 左轮手枪 | 稳",
"SG 553 | 阿罗哈",
"XM1014 | 锈蚀烈焰",
]
LIEKONG_CASE_KNIFE = [
"求生匕首 | 无涂装",
"求生匕首 | 人工染色",
"求生匕首 | 北方森林",
"求生匕首 | 夜色",
"求生匕首 | 屠夫",
"求生匕首 | 枯焦之色",
"求生匕首 | 森林 DDPAT",
"求生匕首 | 深红之网",
"求生匕首 | 渐变之色",
"求生匕首 | 狩猎网格",
"求生匕首 | 蓝钢",
"求生匕首 | 表面淬火",
"求生匕首 | 都市伪装",
"流浪者匕首 | 无涂装",
"流浪者匕首 | 人工染色",
"流浪者匕首 | 北方森林",
"流浪者匕首 | 夜色",
"流浪者匕首 | 屠夫",
"流浪者匕首 | 枯焦之色",
"流浪者匕首 | 森林 DDPAT",
"流浪者匕首 | 深红之网",
"流浪者匕首 | 渐变之色",
"流浪者匕首 | 狩猎网格",
"流浪者匕首 | 蓝钢",
"流浪者匕首 | 表面淬火",
"流浪者匕首 | 都市伪装",
"系绳匕首 | 无涂装",
"系绳匕首 | 人工染色",
"系绳匕首 | 北方森林",
"系绳匕首 | 夜色",
"系绳匕首 | 屠夫",
"系绳匕首 | 枯焦之色",
"系绳匕首 | 森林 DDPAT",
"系绳匕首 | 深红之网",
"系绳匕首 | 渐变之色",
"系绳匕首 | 狩猎网格",
"系绳匕首 | 蓝钢",
"系绳匕首 | 表面淬火",
"系绳匕首 | 都市伪装",
"骷髅匕首 | 无涂装",
"骷髅匕首 | 人工染色",
"骷髅匕首 | 北方森林",
"骷髅匕首 | 夜色",
"骷髅匕首 | 屠夫",
"骷髅匕首 | 枯焦之色",
"骷髅匕首 | 森林 DDPAT",
"骷髅匕首 | 深红之网",
"骷髅匕首 | 渐变之色",
"骷髅匕首 | 狩猎网格",
"骷髅匕首 | 蓝钢",
"骷髅匕首 | 表面淬火",
"骷髅匕首 | 都市伪装",
]
LIEKONG_CASE_RED = ["AK-47 | 阿努比斯军团", "沙漠之鹰 | 印花集"]
LIEKONG_CASE_PINK = ["M4A4 | 齿仙", "XM1014 | 埋葬之影", "格洛克 | 摩登时代"]
LIEKONG_CASE_PURPLE = [
"加利尔 AR | 凤凰商号",
"Tec-9 | 兄弟连",
"MP5-SD | 猛烈冲锋",
"MAG-7 | 北冥有鱼",
"MAC-10 | 魅惑",
]
LIEKONG_CASE_BLUE = [
"内格夫 | 飞羽",
"SSG 08 | 主机001",
"SG 553 | 锈蚀之刃",
"PP-野牛 | 神秘碑文",
"P90 | 集装箱",
"P250 | 卡带",
"P2000 | 盘根错节",
]
GUANGPU_CASE_KNIFE = [
"弯刀 | 外表生锈",
"弯刀 | 多普勒",
"弯刀 | 大马士革钢",
"弯刀 | 渐变大理石",
"弯刀 | 致命紫罗兰",
"弯刀 | 虎牙",
"暗影双匕 | 外表生锈",
"暗影双匕 | 多普勒",
"暗影双匕 | 大马士革钢",
"暗影双匕 | 渐变大理石",
"暗影双匕 | 致命紫罗兰",
"暗影双匕 | 虎牙",
"猎杀者匕首 | 外表生锈",
"猎杀者匕首 | 多普勒",
"猎杀者匕首 | 大马士革钢",
"猎杀者匕首 | 渐变大理石",
"猎杀者匕首 | 致命紫罗兰",
"猎杀者匕首 | 虎牙",
"蝴蝶刀 | 外表生锈",
"蝴蝶刀 | 多普勒",
"蝴蝶刀 | 大马士革钢",
"蝴蝶刀 | 渐变大理石",
"蝴蝶刀 | 致命紫罗兰",
"蝴蝶刀 | 虎牙",
"鲍伊猎刀 | 外表生锈",
"鲍伊猎刀 | 多普勒",
"鲍伊猎刀 | 大马士革钢",
"鲍伊猎刀 | 渐变大理石",
"鲍伊猎刀 | 致命紫罗兰",
"鲍伊猎刀 | 虎牙",
]
GUANGPU_CASE_RED = ["USP | 黑色魅影", "AK-47 | 血腥运动"]
GUANGPU_CASE_PINK = ["M4A1 | 毁灭者 2000", "CZ75 | 相柳", "AWP | 浮生如梦"]
GUANGPU_CASE_PURPLE = [
"加利尔 AR | 深红海啸",
"XM1014 | 四季",
"UMP-45 | 支架",
"MAC-10 | 绝界之行",
"M249 | 翠绿箭毒蛙",
]
GUANGPU_CASE_BLUE = [
"沙漠之鹰 | 锈蚀烈焰",
"截短霰弹枪 | 梭鲈",
"SCAR-20 | 蓝图",
"PP-野牛 | 丛林滑流",
"P250 | 涟漪",
"MP7 | 非洲部落",
"FN57 | 毛细血管",
]
NO_STA_KNIFE = [
"求生匕首 | 北方森林",
"求生匕首 | 夜色",
"求生匕首 | 枯焦之色",
"流浪者匕首 | 夜色",
"流浪者匕首 | 枯焦之色",
"流浪者匕首 | 森林 DDPAT",
"系绳匕首 | 夜色",
"系绳匕首 | 狩猎网格",
"骷髅匕首 | 夜色",
"骷髅匕首 | 森林 DDPAT",
"骷髅匕首 | 狩猎网格",
]
def get_wear(rand: float) -> str:
"""判断磨损度
Args:
rand (float): 随机rand
Returns:
str: 磨损名称
"""
if rand <= FACTORY_NEW_E:
return "崭新出厂"
if MINIMAL_WEAR_S <= rand <= MINIMAL_WEAR_E:
return "略有磨损"
if FIELD_TESTED_S <= rand <= FIELD_TESTED_E:
return "久经沙场"
if WELL_WORN_S <= rand <= WELL_WORN_E:
return "破损不堪"
return "战痕累累"
def random_color_and_st(rand: float) -> Tuple[str, bool]:
"""获取皮肤品质及是否暗金
Args:
rand (float): 随机rand
Returns:
Tuple[str, bool]: 品质,是否暗金
"""
if rand <= KNIFE:
if random.random() <= KNIFE_ST:
return ("KNIFE", True)
return ("KNIFE", False)
elif KNIFE < rand <= RED:
if random.random() <= RED_ST:
return ("RED", True)
return ("RED", False)
elif RED < rand <= PINK:
if random.random() <= PINK_ST:
return ("PINK", True)
return ("PINK", False)
elif PINK < rand <= PURPLE:
if random.random() <= PURPLE_ST:
return ("PURPLE", True)
return ("PURPLE", False)
else:
if random.random() <= BLUE_ST:
return ("BLUE", True)
return ("BLUE", False)
async def random_skin(num: int, case_name: str) -> List[Tuple[BuffSkin, float]]:
"""
随机抽取皮肤
"""
color_map = {}
for _ in range(num):
rand = random.random()
# 尝试降低磨损
if rand > MINIMAL_WEAR_E:
for _ in range(2):
if random.random() < 0.5:
logger.debug(f"[START]开箱随机磨损触发降低磨损条件: {rand}")
if random.random() < 0.2:
rand /= 3
else:
rand /= 2
logger.debug(f"[END]开箱随机磨损触发降低磨损条件: {rand}")
break
abrasion = get_wear(rand)
logger.debug(f"开箱随机磨损: {rand} | {abrasion}")
color, is_stattrak = random_color_and_st(rand)
if not color_map.get(color):
color_map[color] = {}
if is_stattrak:
if not color_map[color].get(f"{abrasion}_st"):
color_map[color][f"{abrasion}_st"] = []
color_map[color][f"{abrasion}_st"].append(rand)
else:
if not color_map[color].get(abrasion):
color_map[color][f"{abrasion}"] = []
color_map[color][f"{abrasion}"].append(rand)
skin_list = []
for color in color_map:
for abrasion in color_map[color]:
rand_list = color_map[color][abrasion]
is_stattrak = "_st" in abrasion
abrasion = abrasion.replace("_st", "")
skin_list_ = await BuffSkin.random_skin(
len(rand_list), color, abrasion, is_stattrak, case_name
)
skin_list += [(skin, rand) for skin, rand in zip(skin_list_, rand_list)]
return skin_list
# M249StatTrak™ | 等高线