zhenxun_plugin_farm/farm/farm.py

186 lines
5.9 KiB
Python
Raw Normal View History

from numpy import arange
from zhenxun.services.log import logger
from zhenxun.utils._build_image import BuildImage
from zhenxun.utils.image_utils import ImageTemplate
from ..config import g_pJsonManager, g_sResourcePath
from ..database import g_pSqlManager
class CFarmManager:
@classmethod
async def drawFarmByUid(cls, uid: str) -> bytes:
"""绘制用户农场
Args:
uid (str): 用户UID
Returns:
bytes: 返回绘制结果
"""
soilNumber = await g_pSqlManager.getUserLevelByUid(uid)
img = BuildImage(background=g_sResourcePath / "background/background.jpg")
soilSize = g_pJsonManager.m_pSoil['size'] # type: ignore
#TODO 缺少判断用户土地资源状况
soil = BuildImage(background=g_sResourcePath / "soil/普通土地.png")
await soil.resize(0, soilSize[0], soilSize[1])
grass = BuildImage(background=g_sResourcePath / "soil/草土地.png")
await grass.resize(0, soilSize[0], soilSize[1])
soilPos = g_pJsonManager.m_pSoil['soil'] # type: ignore
soilUnlock = g_pJsonManager.m_pLevel['soil'] # type: ignore
x = 0
y = 0
isFirst = True
for index, level in enumerate(soilUnlock):
x = soilPos[str(index + 1)]['x']
y = soilPos[str(index + 1)]['y']
#如果土地已经到达对应等级
if soilNumber >= int(level):
await img.paste(soil, (x, y))
#TODO 缺少判断土地上是否有农作物
plant = BuildImage(background=g_sResourcePath / "plant/basic/0.png")
await plant.resize(0, 35, 58)
await img.paste(plant, (x + 100, y + 50))
else:
await img.paste(grass, (x, y))
if isFirst:
isFirst = False
#首次添加扩建图片
expansion = BuildImage(background=g_sResourcePath / "background/expansion.png")
await expansion.resize(0, 69, 69)
await img.paste(expansion, (x + 85, y + 20))
return img.pic2bytes()
@classmethod
async def getUserPlantByUid(cls, uid: str) -> bytes:
"""获取用户种子仓库
Args:
uid (str): 用户Uid
Returns:
bytes: 返回图片
"""
data_list = []
column_name = [
"-",
"种子名称",
"数量",
"收获经验",
"收获数量",
"成熟时间(分钟)",
"收获次数",
"再次成熟时间(分钟)",
"是否可以上架交易行"
]
plant = await g_pSqlManager.getUserPlantByUid(uid)
if plant == None:
result = await ImageTemplate.table_page(
"种子仓库",
"播种示例:@小真寻 播种 大白菜",
column_name,
data_list,
)
return result.pic2bytes()
sell = ""
for item in plant.split(','):
if '|' in item:
plantName, count = item.split('|', 1) # 分割一次,避免多竖线问题
try:
plantInfo = g_pJsonManager.m_pPlant['plant'][plantName] # type: ignore
icon = ""
icon_path = g_sResourcePath / f"plant/{plantName}/icon.png"
if icon_path.exists():
icon = (icon_path, 33, 33)
if plantInfo['again'] == True:
sell = "可以"
else:
sell = "不可以"
data_list.append(
[
icon,
plantName,
count,
plantInfo['experience'],
plantInfo['harvest'],
plantInfo['time'],
plantInfo['crop'],
plantInfo['again'],
sell
]
)
except Exception as e:
continue
result = await ImageTemplate.table_page(
"种子商店",
"购买示例:@小真寻 购买种子 大白菜 5",
column_name,
data_list,
)
return result.pic2bytes()
@classmethod
async def sowing(cls, uid: str, name: str, num: int = 1) -> str:
"""播种
Args:
uid (str): 用户Uid
name (str): 播种种子名称
num (int, optional): 播种数量
Returns:
str:
"""
plant = await g_pSqlManager.getUserPlantByUid(uid)
if plant == None:
return "你的种子仓库是空的,快去买点吧!"
for item in plant.split(','):
if '|' in item:
plantName, count = item.split('|', 1) # 分割一次,避免多竖线问题
#判断仓库是否有当前播种种子
if plantName == name:
count = int(count)
#获取用户解锁多少块地
soilName = ""
soilNumber = await g_pSqlManager.getUserSoilByUid(uid)
#遍历地块,查看地块是否可以播种
for i in arange(1, soilNumber + 1):
if count > 0:
soilName = f"soil{str(i)}"
#如果可以播种
if await g_pSqlManager.getUserSoilStatusBySoilID(uid, soilName):
count -= 1
await g_pSqlManager.updateUserSoilStatusBySowing(uid, soilName, plantName)
return f"播种{plantName}成功!"
return "播种失败"
g_pFarmManager = CFarmManager()