zhenxun_bot/plugins/nonebot_plugin_cocdicer/create.py
2021-05-20 17:06:54 +08:00

148 lines
4.9 KiB
Python
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
build_dict = {64: -2, 84: -1, 124: 0, 164: 1,
204: 2, 284: 3, 364: 4, 444: 5, 524: 6}
db_dict = {-2: "-2", -1: "-1", 0: "0", 1: "1d4",
2: "1d6", 3: "2d6", 4: "3d6", 5: "4d6", 6: "5d6"}
def randattr(time: int = 3, ex: int = 0):
r = 0
for _ in range(time):
r += random.randint(1, 6)
return (r+ex)*5
class Investigator(object):
def __init__(self) -> None:
self.age = 20
self.str = randattr()
self.con = randattr()
self.siz = randattr(2, 6)
self.dex = randattr()
self.app = randattr()
self.int = randattr(2, 6)
self.pow = randattr()
self.edu = randattr(2, 6)
self.luc = randattr()
def body_build(self) -> int:
build = self.str + self.con
for i, j in build_dict.items():
if build <= i:
return j
return
def db(self) -> str:
return db_dict[self.body_build()]
def lp_max(self) -> int:
return (self.con+self.siz)//10
def mov(self) -> int:
r = 8
if self.age >= 80:
r -= 5
elif self.age >= 70:
r -= 4
elif self.age >= 60:
r -= 3
elif self.age >= 50:
r -= 2
elif self.age >= 40:
r -= 1
if self.str < self.siz and self.dex < self.siz:
return r-1
elif self.str > self.siz and self.dex > self.siz:
return r+1
else:
return r
def edu_up(self) -> str:
edu_check = random.randint(1, 100)
if edu_check > self.edu:
edu_en = random.randint(1, 10)
self.edu += edu_en
else:
return "教育成长检定D100=%d,小于%d,无增长。" % (edu_check, self.edu)
if self.edu > 99:
self.edu = 99
return "教育成长检定D100=%d成长1D10=%d成长到了最高值99" % (edu_check, edu_en)
else:
return "教育成长检定D100=%d成长1D10=%d,成长到了%d" % (edu_check, edu_en, self.edu)
def edu_ups(self, times) -> str:
r = ""
for _ in range(times):
r += self.edu_up()
return r
def sum_down(self, sum) -> str:
if self.str + self.con + self.dex-45 < sum:
self.str = 15
self.con = 15
self.dex = 15
else:
str_lost = random.randint(0, min(sum, self.str-15))
while sum - str_lost > self.con + self.dex-30:
str_lost = random.randint(0, min(sum, self.str-15))
self.str -= str_lost
sum -= str_lost
con_lost = random.randint(0, min(sum, self.con-15))
while sum - con_lost > self.dex-15:
con_lost = random.randint(0, min(sum, self.con-15))
self.con -= con_lost
sum -= con_lost
self.dex -= sum
return
def age_change(self, age: int = 20) -> str:
if age < 15:
return "年龄过小,无法担当调查员"
elif age >= 90:
return "该调查员已经作古。"
self.age = age
if 15 <= age < 20:
self.str -= 5
self.siz -= 5
self.edu -= 5
luc = randattr()
self.luc = luc if luc > self.luc else self.luc
return "力量、体型、教育值-5幸运增强判定一次"
elif age < 40:
self.edu_up()
return "教育增强判定一次"
elif age < 50:
self.app -= 5
self.sum_down(5)
self.edu_ups(2)
return "外貌-5力量、体型、敏捷合计降低5教育增强判定两次"
elif age < 60:
self.app -= 10
self.sum_down(10)
self.edu_ups(3)
return "外貌-10力量、体型、敏捷合计降低10教育增强判定三次"
elif age < 70:
self.app -= 15
self.sum_down(20)
self.edu_ups(4)
return "外貌-15力量、体型、敏捷合计降低20教育增强判定四次"
elif age < 80:
self.app -= 20
self.sum_down(40)
self.edu_ups(4)
return "外貌-20力量、体型、敏捷合计降低40教育增强判定四次"
elif age < 90:
self.app -= 25
self.sum_down(80)
self.edu_ups(4)
return "外貌-25力量、体型、敏捷合计降低80教育增强判定四次"
def __repr__(self) -> str:
return "调查员 年龄:%d\n力量:%d 体质:%d 体型:%d\n敏捷:%d 外貌:%d 智力:%d\n意志:%d 教育:%d 幸运:%d\nDB:%s 生命值:%d 移动速度:%d" % (
self.age, self.str, self.con, self.siz, self.dex, self.app, self.int, self.pow, self.edu, self.luc, self.db(), self.lp_max(), self.mov())
def output(self) -> str:
return self.__repr__()